Utilizamos cookies propias y de terceros para mejorar la experiencia de navegación, y ofrecer contenidos y publicidad de interés.
Al continuar con la navegación entendemos que se acepta nuestra política de cookies.
Iniciar sesión Cerrar
Correo:
Contraseña:
Entrar
Recordar sesión en este navegador
Crear cuenta

Matlab - Ayuda en MATLAB

Vista:
Me gusta: Está pregunta es útil y esta clara
0
No me gusta: Está pregunta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:Laura Castillo ldcastillo.11@gmail.com (4 intervenciones)
Fecha:05/01/2013 01:42:40
Buenas, tengo un problema con un código en MATLAB, resulta que estoy programando el Algortimo Viterbi de Modelos Ocultos de Markov, ya tengo todo listo incluso la reestimación del mismo pero cuando pongo a correr el programa se queda en BUSY, quién puede ayudarme con eso, o qué significa?
Gracias
Responder Subir
información
Otras secciones de LWP con contenido similar...
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:05/01/2013 16:49:09
debe ser, que estas que usando un ciclo iterativo y el contador no está aumentando, o la cantidad de datos es muy grande. Eso podría ser uno de los posibles errores. Lo que pasa es que de la forma que estas preguntando, es difícil darte una respuesta precisa a tu pregunta.


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:05/01/2013 17:20:11
http://en.wikipedia.org/wiki/Viterbi_algorithm

http://www.mathworks.com/matlabcentral/fx_files/11050/1/getViterbi.m

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:Laura Castillo (4 intervenciones)
Fecha:06/01/2013 02:25:10
Muy agradecida con su ayuda. Sería mucha molestia si le adjunto el código vía correo electrónico? De verdad necesito ayuda por qué no veo el error. Gracias de antemano.
Comentar Subir
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:06/01/2013 17:33:50
Bueno si me envidas a mi correo, estaría en cierta manera comprometido ayudarte y si no puedo arreglar tu código quedaría mal frente a ti, y derepente pienses que yo quería apropiarme tu código, seria mejor que lo pusieras en el foro, así tendrías mayor opción a que te ayuden. Bueno el objetivo del foro es compartir conocimientos, y yo contestando las preguntas de matlab, comparto mis conocimientos de matlab

Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
1
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:Laura Castillo (4 intervenciones)
Fecha:06/01/2013 17:38:37
Te entiendo perfectamente. Voy a copiarlo acá y vamos a ver quien me echa la mano. De verdad muy agradecida por tu tiempo. Saludos


%1. INDICAR EL NÚMERO DE ESTADOS
VCN=1; % VARIABLE CONTROL QUE INDICA QUE N ES ENTERO Y MAYOR QUE CERO, DONDE N ES EL NÚMERO DE ESTADOS.
while VCN
N=input('INDIQUE EL NÚMERO DE ESTADOS DEL MOM:');
n=fix(N);
if N <=0|N~=n; % VERIFICA QUE N SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCN=0;
end
end
%2. INDICAR EL NÚMERO DE SIMBOLOS K
VCK=1; % VARIABLE CONTROL PARA K ENTERO Y MAYOR A CERO.
while VCK
K=input('INDIQUE EL NÚMERO DE SIMBOLOS DEL MOM m: ');
k=fix(K);
if K <=0|K~=k; % VERIFICA QUE K SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCK=0;
end
end

%3. INDICAR LA LONGITUD DE LAS OBSERVACIONES (T)
VCT=1; % VARIABLE CONTROL PARA T ENTERO Y MAYOR QUE CERO.
while VCT
T=input('INDIQUE EL NÚMERO DE OBSERVACIONES DEL MOM m: ');
t=fix(T);
if T <=0|T~=t; % VERIFIFICA QUE T SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCT=0;
end
end

% 4. CREAR EL VECTOR DE ESTADOS PARA LOS ESTADOS DEL MOM m
for i=1:N
E(i)=i;
end

%5. DEFINICIÓN DE LA MATRIZ DE PROBABILIDAD DE TRANSICIÓN DE ESTADOS
%(MPTE)QUE VAN DESDE i A j. DE FORMA ALEATORIA Y VERIFICACIÓN DE QUE MPTE
%SEA ESTOCÁSTICA
A=rand(N,N);
for i=1:N
MA=0;
for j=1:N
MA=MA+A(i,j);
end
VMA(i)=MA;
end
for i=1:N
for j=1:N
A(i,j)=A(i,j)/VMA(i);
end
end

% Matriz de Probabilidad t=1
PI0(1,1)=1;
for i=2:N
PI0(i,1)=0.000001;
end;

% 6. INTRODUCCIR LA MATRIZ DE PROBABILIDAD INICIAL (MPI) PARA LOS ESTADOS.
PI=rand(N,1);
MPI=0;
for i=1:N
MPI=MPI+PI(i,1);
end
for i=1:N
PI(i,1)=PI(i,1)/MPI;
end

% 7. CREAR EL VECTOR DE SIMBOLOS PARA LOS ESTADOS DEL MOM m
for i=1:K
V(i)=i;
end

% 8. INTRODUCIR LA MATRIZ DE PROBABILIDAD DE GENERACIÓN DE SIMBOLOS (MPGS)
% PARA CADA ESTADO
B=rand(N,K);
for i=1:N
MB=0;
for j=1:K
MB=MB+B(i,j);
end
VMB(i)=MB;
end
for i=1:N
for j=1:K
B(i,j)=B(i,j)/VMB(i);
end
end


% 9. INTRODUCIR EL NÚMERO DE SECUENCIAS DE OBSERVACIONES L (MÚLTIPLES SECUENCIAS)

VCSO=1; % VARIABLE CONTROL PARA QUE L SEA UN NÚMERO ENTERO Y MAYOR QUE CERO.
while VCSO
L=input('INTRODUZCA EL NÚMERO DE SECUENCIAS DE OBSERVACIONES DEL MOM m: ');
l=fix(L);
if L <=0|L~=l; % VERIFICA QUE L SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO')
else
VCSO=0;
end
end

O=randi([1,K],[L,T]);

%10. INTRODUCIR EL NÚMERO DE ITERACIONES I
VCI=1; %VARIABLE CONTROL PARA QUE I SEA ENTERO Y MAYOR QUE CERO
while VCI
I=input('INTRODUZCA EL NÚMERO DE ITERACIONES DEL MOM m: ');
i=fix(I);
if I <=0|I~=i%VERIFICA QUE L SEA ENTERO Y MAYOR QUE CERO.
disp('ERROR: INGRESE UN NÚMERO POSITIVO Y ENTERO');
else
VCI=0;
end
end

%11. INTRODUCCIÓN DEL EPSILÓN (e)
VCE=1; %VARIABLE CONTROL QUE VERIFICA QUE e SE ENCUENTRE ENTRE CERO Y UNO (0<PROB(e)<1)
while VCE
salida=sprintf('INGRESE EL VALOR CRÍTICO DE CONVERGENCIA: ');
disp(salida)
e=input('');
if e<0|e>1; % VERIFICA QUE LA PROBABILIDAD DE e SE POSITIVA
disp('ERROR: INGRESE UN NÚMERO ENTRE CERO Y UNO');
else
VCE=0;
end
end


% TOMA LA POSICIÓN DEL SIMBOLO (K)PARA CADA OBSERVACIÓN (O)
for i=1:T
for l=1:L
for j=1:K
if O(l,i)==V(j);
R(l,i)=j;
end
end
end
end

N
E
A
PI
K
L
V
B
O
I
e


%%%%%%%%%%%%%%%%%%%%

%%ALGORITMO VITERBI. PROBLEMA 2: DECODIFICACIÓN DEL MOM m (HALLAR LA MEJOR SECUENCIA DE ESTADOS DEL MOM m Y LA PROBABILIDAD)

%1. ESTADO PROBABLE PARA LA PRIMERA REALIZACIÓN T=1

% VECTOR DE PROBABILIDAD INICIAL Pi(1)=1; P(2)= 0; ..., Pi(N)=0
for i=1:N;
if i==1;
P(i,1)=1;
else;
P(i,1)=0;
end
end
P

SE=zeros(L,T,3);
for l=1:L
for i=1:N
D(l,i)=-log(P(i,1))-log(B(i,R(l,1))); %DISTANCIA QUE SE DEBE CALCULAR
end
Dmin=D(l,1); %DISTANCIA MÁS PEQUEÑA ENTRE TODAS
h=1;
for i=1:N-1
if Dmin>D(l,i+1)
Dmin=D(l,i+1);
h=(i+1);
end
end
SE(l,1,1)=1;
SE(l,1,2)=h;
SE(l,1,3)=D(l,h);
end

%2.ESTADO PROBABLE PARA LAS REALIZACIONES SIGUIENTES 2 A T

for l=1:L
for t=2:T
for j=1:N
D(l,j)=SE(l,t-1,3)-log(A((SE(l,t-1,2)),j))-log(B(j,R(l,t)));
end
Dmin=D(l,1);
h=1;
for i=1:N-1
if Dmin>D(l,i+1)
Dmin=D(l,i+1);
h=(i+1);
end
end
SE(l,t,1)=t;
SE(l,t,2)=h;
SE(l,t,3)=D(l,h);
end

Prob(l)=exp(-SE(l,T,3)); %PROBABILIDAD A ENCONTRAR
for i=1:T
LPS(l,i)=SE(l,i,2);
end
end
SEPRO=0;
for l=1:L
SEPRO=SEPRO+SE(l,T,3);
end
CTSE=SEPRO;
PROSEC=exp(-CTSE);
PROSEC0=PROSEC;
LMS=LPS;
salida=sprintf('COSTO TOTAL: %g',CTSE);
disp(salida)
salida1=sprintf('PROBABILIDAD CONJUNTA: %g',PROSEC0);
disp(salida1)
disp('SECUENCIA DE ESTADOS ÓPTIMA: ');
LMS

% 3. PROBLEMA 3: RE-ESTIMACIÓN DE LOS PARÁMETROS DEL MOM m

VC=1; % VARIABLE CONTROL QUE PERMITE DAR INICIO A EL CONTADOR DE INTERACIONES
CDIT=0; % CONTADOR PARA EL NÚMERO DE ITERACIONES
while VC
CDIT=CDIT+1;
MCDE=zeros(N,N); % MATRIZ PARA EL CONTEO DE CAMBIOS EN LOS ESTADOS
MCGSE=zeros(N,K); % MATRIZ PARA EL CONTEO DE GENERACIÓN DEL SIMBOLO K EN CADA ESTADO N
for l=1:L
for t=1:T
CONTAR=MCGSE(LPS(l,t),R(l,t))+1;
MCGSE(LPS(l,t),R(l,t))=CONTAR;
end
end
for l=1:L
for t=1:T-1
CCONTAR=MCDE(LPS(l,t),LPS(l,t+1))+1;
MCDE(LPS(l,t),LPS(l,t+1))=CCONTAR;
end
end

for i=1:N
NHj=0;
NDi=0;
for j=1:N
NDi=NDi+MCDE(i,j);
NHj=NHj+MCDE(j,i);
end
VNDi(i)=NDi;
VNHj(i)=NHj;
end
for i=1:N
for j=1:N
if VNDi(i)==0
A1(i,j)=0.0000001;
else
if MCDE(i,j)==0;
A1(i,j)=0.0000001;
else
A1(i,j)=MCDE(i,j)/VNDi(i);
end
end
end
end
end

E1=VNHj(1)
VNHj(1)=E1+L;
for i=1:N
for k=1:K
if VNHj(i)==0
B1(i,k)=0.0000001;
else
if MCGSE(i,k)==0;
B1(i,k)=0.0000001;
else
B1(i,k)=MCGSE(i,k)/VNHj(i);
end
end
end
end


% 4. SE APLICA EL ALGORITMO VITERBI A LOS PARÁMETROS RE-ESTIMADOS PARA
% VERIFICAR LA VALIDEZ

SE1=zeros(L,T,3);

% MATRIZ DE PROBABILIDAD INICIAL EN t=1
PI1(1,1)=1;
for i=2:N
PI1(i,1)=0.000001;% ACOTA EL NÚMERO HASTA DONDE PUEDE LLEGAR LA PROBABILIDAD PARA QUE NO SEA LEIDA COMO NULA
end;
for l=1:L
for i=1:N
D1(l,i)=-log(PI1(i,1))-log(B1(i,R(l,1)));
end
Dmin1=D1(l,1);
h1=1;
for i=1:N-1
if Dmin1>D1(l,i+1)
Dmin1=D1(l,i+1);
h1=(i+1);
end
end
SE1(l,1,1)=1;
SE1(l,1,2)=h1;
SE1(l,1,3)=D1(l,h1);
end

% ESTADO MAS PROBABLE PARA LAS REALIZACIONES SIGUIENTES 2 A T

for l=1:L
for t=2:T
for j=1:N
D1(l,j)=SE1(l,t-1,3)-log(A1(SE1(l,t-1,2),j))-log(B1(j,R(l,t)));
end
Dmin1=D1(l,1);
h1=1;
for i=1:N-1
if Dmin1>D1(l,i+1)
Dmin1=D1(l,i+1);
h1=(i+1);
end
end
SE1(l,t,1)=t;
SE1(l,t,2)=h1;
SE1(l,t,3)=D1(l,h1);
end
Prob1(l)=exp(-SE1(l,T,3));
end
SEPRO1=0;
for l=1:l
SEPRO1=SEPRO1+SE1(l,T,3);
end
for l=1:L
for t=1:T
LMST(l,t)=SE1(l,t,2);
end
end
PROSECONJ1=exp(-SEPRO1);
salida3=sprintf('ITERACIÓN NÚMERO: %g',CDIT);
disp(salida3)
salida4=sprintf('COSTO TOTAL (TODAS LAS SECUENCIAS): %g',SEPRO1);
disp(salida4)
salida5=sprintf('PROBABILDAD CONJUNTA (TODAS LAS SECUENCIAS): %g',PROSECONJ1);
disp(salida5)
disp('SECUENCIA DE ESTADOS ÓPTIMAS (TODAS LAS SECUENCIAS): ');
LMST
if PROSECONJ1>PROSEC
for l=1:L
for t=1:T
LPS(l,t)= LMST(l,t);
end
PROSEC =PROSECONJ1;
PROSECONJF=SEPRO1;
A=A1;
B=B1;
end
end
if CDIT==I %|epsilon>(Prob1-Prob)
VC=0;
end

salida4=sprintf('\nCosto Total (Todas las Secuencias) Final: %g',SEPRO1);
disp(salida4)
salida5=sprintf('\nProbabilidad Conjunta (Todas las Secuencias) Final: %g',PROSEC);
disp(salida5)
disp('Secuencias de Estados Óptimas (Todas las Secuencias) Final: ');
LOP
disp('Matriz de Probabilidad de Transición de Estados: ');
A
disp('Matriz de Probabilidad de Generación de Simbolos: ');
B
Comentar Subir
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:06/01/2013 17:54:03
Con que valores lo ejecutas?.


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:Laura Castillo (4 intervenciones)
Fecha:06/01/2013 17:56:54
Con cualquier valor, porque es un proceso aleatorio.
Comentar Subir
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:07/01/2013 03:44:35
Te acuerdas cuando te decía: debe ser, que estas que usando un ciclo iterativo y el contador no está aumentando

mira este parte de tu código:

%% 3. PROBLEMA 3: RE-ESTIMACIÓN DE LOS PARÁMETROS DEL MOM m VC=1; % VARIABLE CONTROL QUE PERMITE DAR INICIO A EL CONTADOR DE INTERACIONES CDIT=0; % CONTADOR PARA EL NÚMERO DE ITERACIONES while VC CDIT=CDIT+1; MCDE=zeros(N,N); % MATRIZ PARA EL CONTEO DE CAMBIOS EN LOS ESTADOS MCGSE=zeros(N,K); % MATRIZ PARA EL CONTEO DE GENERACIÓN DEL SIMBOLO K EN CADA ESTADO N for l=1:L for t=1:T CONTAR=MCGSE(LPS(l,t),R(l,t))+1; MCGSE(LPS(l,t),R(l,t))=CONTAR; end end for l=1:L for t=1:T-1 CCONTAR=MCDE(LPS(l,t),LPS(l,t+1))+1; MCDE(LPS(l,t),LPS(l,t+1))=CCONTAR; end end for i=1:N NHj=0; NDi=0; for j=1:N NDi=NDi+MCDE(i,j); NHj=NHj+MCDE(j,i); end VNDi(i)=NDi; VNHj(i)=NHj; end for i=1:N for j=1:N if VNDi(i)==0 A1(i,j)=0.0000001; else if MCDE(i,j)==0; A1(i,j)=0.0000001; else A1(i,j)=MCDE(i,j)/VNDi(i); end end end end end

VC siempre va a ser 1 y nunca va a cambiar , y eso ocasiona que no salga del bucle while.
allí esta uno de los errores, por lo cual siempre esta en BUSY.


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
imágen de perfil
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (2405 intervenciones)
Fecha:07/01/2013 04:51:05
>> viterbi_markov INDIQUE EL NÚMERO DE ESTADOS DEL MOM:3 INDIQUE EL NÚMERO DE SIMBOLOS DEL MOM m: 4 INDIQUE EL NÚMERO DE OBSERVACIONES DEL MOM m: 5 INTRODUZCA EL NÚMERO DE SECUENCIAS DE OBSERVACIONES DEL MOM m: 6 INTRODUZCA EL NÚMERO DE ITERACIONES DEL MOM m: 7 INGRESE EL VALOR CRÍTICO DE CONVERGENCIA:8 ERROR: INGRESE UN NÚMERO ENTRE CERO Y UNO INGRESE EL VALOR CRÍTICO DE CONVERGENCIA:0.5 N = 3 E = 1 2 3 A = 0.5522 0.0267 0.4212 0.4918 0.0483 0.4599 0.4675 0.2340 0.2985 PI = 0.3271 0.2865 0.3864 K = 4 L = 6 V = 1 2 3 4 B = 0.3509 0.4035 0.0600 0.1856 0.1796 0.4302 0.1472 0.2431 0.0873 0.3500 0.1270 0.4357 O = 2 1 2 3 2 4 3 1 1 2 3 2 3 3 2 4 3 4 2 4 3 3 2 4 2 4 1 4 1 4 I = 7 e = 0.5000 P = 1 0 0 COSTO TOTAL: 59.705451 PROBABILIDAD CONJUNTA: 1.17558e-26 SECUENCIA DE ESTADOS ÓPTIMA: LMS = 1 1 1 3 1 1 3 1 1 1 1 1 3 3 1 1 3 3 1 3 1 3 1 3 1 1 1 3 1 3 ITERACIÓN NÚMERO: 1 COSTO TOTAL (TODAS LAS SECUENCIAS): 46.3512 PROBABILDAD CONJUNTA (TODAS LAS SECUENCIAS): 7.4118e-21 SECUENCIA DE ESTADOS ÓPTIMAS (TODAS LAS SECUENCIAS): LMST = 1 1 1 3 1 1 3 1 1 1 1 1 3 3 1 1 3 1 1 3 1 3 1 3 1 1 1 3 1 3 Costo Total (Todas las Secuencias) Final: 46.3512 Probabilidad Conjunta (Todas las Secuencias) Final: 7.4118e-21 Matriz de Probabilidad de Transición de Estados: A = 0.4000 0.0000 0.6000 0.0000 0.0000 0.0000 0.7778 0.0000 0.2222 Matriz de Probabilidad de Generación de Simbolos: B = 0.2632 0.4737 0.1053 0.1579 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.5455 0.4545


Saludos.
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
programador en matlab
Servicios de programación matlab
jjcc94@hotmail.com

http://matlabcaballero.blogspot.com
Comentar Subir
Me gusta: Está respuesta es útil y esta clara
0
No me gusta: Está respuesta no esta clara o no es útil
 
Asunto:Ayuda en MATLAB
Autor:edwin (2 intervenciones)
Fecha:10/01/2013 19:09:49
hola soy nuevo en matlab y quisiera una ayuda, me gustarian leer datos de mi fichero txt y es como se muestra asi




=== Prediccion de datos ===

inst# actual predicted error prediccion
1 1:? 6:06 + 0.924



yo solo quiero leer la quinta columna osea el valor de 0.924

saludos
Comentar Subir