La Web del Programador: Comunidad de Programadores
https://www.lawebdelprogramador.com/foros/Matlab/1363597-Ayuda-en-MATLAB.html

Ayuda en MATLAB

Ayuda en MATLAB

Publicado por Laura Castillo (4 intervenciones) el 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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 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
[email protected]

http://matlabcaballero.blogspot.com
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 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
[email protected]

http://matlabcaballero.blogspot.com

Ayuda en MATLAB

Publicado por Laura Castillo (4 intervenciones) el 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.
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 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
[email protected]

http://matlabcaballero.blogspot.com

Ayuda en MATLAB

Publicado por Laura Castillo (4 intervenciones) el 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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 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
[email protected]

http://matlabcaballero.blogspot.com

Ayuda en MATLAB

Publicado por Laura Castillo (4 intervenciones) el 06/01/2013 17:56:54
Con cualquier valor, porque es un proceso aleatorio.
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/01/2013 03:44:35
Te acuerdas cuando te decía:
1
debe ser, que estas que usando un ciclo iterativo y el contador no está aumentando


mira este parte de tu código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
%% 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
='/img/emoticons/smile.gif' width='22' height='22' border='0' />    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
[email protected]

http://matlabcaballero.blogspot.com
Imágen de perfil de JOSE JEREMIAS CABALLERO

Ayuda en MATLAB

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 07/01/2013 04:51:05
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
>> 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
[email protected]

http://matlabcaballero.blogspot.com

Ayuda en MATLAB

Publicado por edwin (2 intervenciones) el 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