Matlab - Hacer que mi contador se detanga para cada i de mi ciclo for

   
Vista:

Hacer que mi contador se detanga para cada i de mi ciclo for

Publicado por Arturo (1 intervención) el 25/02/2018 07:10:26
hola, espero obtener ayuda para resolver este problema. Estoy iniciando en MatLab, hice un programa que requiere de dos ciclos for uno dentro de otro, pero tengo un problema con el contador (SUMA_EQ_CLAS) que esta dentro del ciclo de segundo nivel, ya que quisiera que ese contador terminara cuando el ciclo for del segundo nivel termine y el dato obtenido lo almacene y empiece a contar de nuevo, para cada j del for principal, pero mi contador sigue acumulando los datos y se detiene solo hasta que el programa ha finalizado. Al final quiero que para cada valor del ciclo principal j genere un dato y lo pueda graficar, sin que se acumulen

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
n=1000000;
SIGMA=0;
EQUIVOCADO=0;
PROB_POS=0;
SUMA_EQ_CLAS=0;
%este programa genera bits aleatorios y les suma un ruido  y apartir de esto, el programa calcula la probabilidad 
%de que se equivoque al clasificarlos si lo que fue originalmente fue un
%bit cero o un bit uno. Usa el teorema de Bayes para esto.
 
for j=1:100 %sigama para generar un ruido cada vez mayor de 0.1 en 0.1 hasta 10%
 
    PROB_POS=0;
    INTERV=0.1;
    SIGMA=SIGMA+INTERV;
    V_SIGMA(j)=SIGMA;
    fprintf('PARA SIGMA = %f\n',SIGMA);
 
 
    for i=1:n %se repetira un millon de veces el experimento de genrar el bit y el 
        %ruido y calcular al probabilidad de equivocarseaal deducir si fue un 0 o 1 originalmente
 
        C=rand;
 
        if C<0.9
 
 
 
            U=0;
            Y(i)=U;
 
        else
            U=1;
            Y(i)=U;
 
 
        end
        EV= randn*SIGMA +U;
 
 
        P_EVBIT1=exp(-((EV-1)^2)/(2*(SIGMA^2)));
        P_EVBIT0=exp(-((EV-0)^2)/(2*(SIGMA^2)));
        P_EV=P_EVBIT0*0.9 + P_EVBIT1*0.1;
 
        P_BIT0EV= (P_EVBIT0*0.9)/P_EV;
        P_BIT1EV= (P_EVBIT1*0.1)/P_EV;
 
        if P_BIT1EV<P_BIT0EV
            CLASIF=0;
            CLAS(i)=CLASIF;
 
        else
            CLASIF=1;
            CLAS(i)=CLASIF;
        end
 
        if CLASIF~=U
            SUMA_EQ_CLAS=SUMA_EQ_CLAS+ 1; % este contado sigue sumando aunque el ciclo i ya termino hasta que el ciclo j termine
 
 
        end
 
 
 
 
 
 
    end
 
    PROB_EQUI=SUMA_EQ_CLAS/n
    %
    %   V_P_EVBIT1(i)=P_EVBIT1;
    %   V_P_EVBIT0(i)=P_EVBIT0;
    %   V_P_BIT1EV(i)=P_BIT1EV;
    %   V_P_BIT0EV(i)=P_BIT0EV;
    %   CLAS(i)=CLASIF;
    %   CERO_CLAS= numel(find(CLAS==0));
    %
    %   UNO_CLAS= numel(find(CLAS==1));
    %   Y(i)=U;
    %   F(i)= EV;
    %   CERO_BIT= numel(find(Y==0));
    %
    %   UNO_BIT= numel(find(Y==1));
    V_SIGMA(j)=SIGMA;
    V_EQ_CLASS(j)=PROB_EQUI;
 
end
 
 
plot(V_SIGMA,V_EQ_CLASS)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO

Hacer que mi contador se detanga para cada i de mi ciclo for

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (4811 intervenciones) el 25/02/2018 14:16:34
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
...
...
...
 
for j=1:100 %sigama para generar un ruido cada vez mayor de 0.1 en 0.1 hasta 10%
   SUMA_EQ_CLAS=0;
 
    PROB_POS=0;
    INTERV=0.1;
    SIGMA=SIGMA+INTERV;
    V_SIGMA(j)=SIGMA;
    fprintf('PARA SIGMA = %f\n',SIGMA);
..
..
..



1
2
3
4
5
6
7
8
9
10
11
12
>> ambitos_de_variables
PARA SIGMA = 0.100000
 
PROB_EQUI =
 
     0
 
PARA SIGMA = 0.200000
 
PROB_EQUI =
 
    0.0034


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Revisar política de publicidad