Matlab - Compara un valor con el nuevo en un bucle for

 
Vista:
sin imagen de perfil

Compara un valor con el nuevo en un bucle for

Publicado por Marco Antonio (61 intervenciones) el 22/10/2017 15:30:44
Buenas tengo el siguiente programa

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
P1=randi([0 (2^Max_Number_of_Bits-1)],10,1)%Asigna valore decimales de forma aleatoria a P1
x14=P1
o5=dec2bin(x14)
Poblaciones=[]
%calcular decimales separado 
Mas1=(2^Number_of_bits1)-1%Crea una Mascara  
Mas2=2^Max_Number_of_Bits-(2^(Number_of_bits1)-1)-1%Crea una Mascara 
for k=1:10
for p=1:length(P1)
    P1
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x3(n,1)=bitand(Mas2,P1(n))
P11(n)=bitshift(x3(n,1),-Number_of_bits2);  %X
end
P12=(P11*(bj1-aj1)+aj1)'%Escala los valores decimales a el rango
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x4(n,1)=bitand(Mas1,P1(n)) %Y
end
P13=x4*(bj2-aj2)+aj2%Escala los valores decimales a el rango
%Calculando fitness
for n=1:size(P1)                                                                % Calcula el valor de x1 para calcular fitness
    x5(n,1)=aj1+(P12(n,1)*((bj1-aj1)/(2^Number_of_bits1-1)))
end
for n=1:size(P1)                                                                     % Calcula el valor de x3 para calcular fitness
    x5(n,2)=aj2+(P13(n,1)*((bj2-aj2)/(2^Number_of_bits2-1)))
end
for n1=1:size(P1)
    for n2=1:size(P1)
        if m==1
            fx1(n1,1)=1/(15000+(21.5 + x5(n1,1) * sin(4*pi*x5(n1,1)) + x5(n1,2) * sin(20*pi*x5(n1,2))))
                else m==2
                    fx1(n2,1)=((21.5 + x5(n2,1) * sin(4*pi*x5(n2,1)) + x5(n2,2) * sin(20*pi*x5(n2,2))))+15000
        end
    end
end

fX1=sort(fx1);
[maximo]=max(fX1)
[minimo]=min(fX1)
[fila1, columna1]=find(fx1==maximo)
[fila2, columna2]=find(fx1==minimo)
valor_correspondiente1=P1(fila1,columna1)
valor_correspondiente2=P1(fila2,columna2)

end
end

pero ahora quiero compara el valor de [maximo] del la primera corrida con el valor de [maximo] de la segunda corrida si es mayor sustituir el valor si es menor o igual mantener el valor de la corrida anterior

Atentamente
gracias de ante mano
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Compara un valor con el nuevo en un bucle for

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 22/10/2017 16:05:58
1
2
3
Undefined function or variable 'Max_Number_of_Bits'.
Error in faltan_valores (line 1)
P1=randi([0 (2^Max_Number_of_Bits-1)],10,1)%Asigna valore decimales de forma aleatoria a P1

1
2
3
Undefined function or variable 'Number_of_bits1'.
Error in faltan_valores (line 8)
Mas1=(2^Number_of_bits1)-1%Crea una Mascara  

1
2
3
Undefined function or variable 'Number_of_bits2'.
Error in faltan_valores (line 17)
P11(n)=bitshift(x3(n,1),-Number_of_bits2); %X 


1
2
3
Undefined function or variable 'bj1'.
Error in faltan_valores (line 20)
P12=(P11*(bj1-aj1)+aj1)'%Escala los valores decimales a el rango


1
2
3
4
Error using bitand
Double inputs must have integer values in the range of ASSUMEDTYPE.
Error in faltan_valores (line 17)
x3(n,1)=bitand(Mas2,P1(n))
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
sin imagen de perfil

Compara un valor con el nuevo en un bucle for

Publicado por Marco Antonio (61 intervenciones) el 22/10/2017 16:18:16
Ya corregí los errores este funciona

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
clear all
clear var
close all
clc
 
P1=randi([0 (2^42-1)],10,1)%Asigna valore decimales de forma aleatoria a P1
x14=P1
o5=dec2bin(x14)
Poblaciones=[]
aj1=-8
bj1=8
aj2=-8
bj2=8
m=2
%calcular decimales separado 
Mas1=(2^21)-1%Crea una Mascara  
Mas2=2^42-(2^(21)-1)-1%Crea una Mascara 
for k=1:10
for p=1:length(P1)
    P1
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x3(n,1)=bitand(Mas2,P1(n))
P11(n)=bitshift(x3(n,1),-21);  %X
end
P12=(P11*(bj1-aj1)+aj1)'%Escala los valores decimales a el rango
%Crea un lazo que hace el bitand y bitshift y lo guarda en P11
for n = 1:size(P1)
x4(n,1)=bitand(Mas1,P1(n)) %Y
end
P13=x4*(bj2-aj2)+aj2%Escala los valores decimales a el rango
%Calculando fitness
for n=1:size(P1)                                                                % Calcula el valor de x1 para calcular fitness
    x5(n,1)=aj1+(P12(n,1)*((bj1-aj1)/(2^21-1)))
end
for n=1:size(P1)                                                                     % Calcula el valor de x3 para calcular fitness
    x5(n,2)=aj2+(P13(n,1)*((bj2-aj2)/(2^21-1)))
end
for n1=1:size(P1)
    for n2=1:size(P1)
        if m==1
            fx1(n1,1)=1/(15000+(21.5 + x5(n1,1) * sin(4*pi*x5(n1,1)) + x5(n1,2) * sin(20*pi*x5(n1,2))))
                else m==2
                    fx1(n2,1)=((21.5 + x5(n2,1) * sin(4*pi*x5(n2,1)) + x5(n2,2) * sin(20*pi*x5(n2,2))))+15000
        end
    end
end

fX1=sort(fx1);
[maximo]=max(fX1)
[minimo]=min(fX1)
[fila1, columna1]=find(fx1==maximo)
[fila2, columna2]=find(fx1==minimo)
valor_correspondiente1=P1(fila1,columna1)
valor_correspondiente2=P1(fila2,columna2)

end
end
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