Matlab - Codigo ilogico, porfavor ayuda!!

 
Vista:

Codigo ilogico, porfavor ayuda!!

Publicado por Pepe (2 intervenciones) el 11/08/2010 15:25:00
if (temp3(1,1)~= MediaMovil(i,1)) && (temp3(1,2)~= MediaMovil(i,2));
if temp3(1,2) >= 0.0170 && temp3(1,2) <=0.03
disp('--->')
disp(temp3(1,2))
disp(MediaMovil(i,2))
disp(temp3(1,2)==MediaMovil(i,2))
disp(0.0170 == 0.0170)
end
end

A ver os explico mi problema:
temp3 y MediaMovil son matrices, por alguna extraña razon, cuando llega el bucle y el valor de temp3(1,2) es 0.0170 dice que es diferente al valor MediaMovil(i,2) que si lo sacas por pantalla también es 0.0170.
No lo entiendo, como puede decir que 0.0170 es diferente a 0.0170, no tiene lógica.

Lo que me sale por pantalla es:

--->
0.0170

0.0170

0

1

Porfavor, ayudadme !!!
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

RE:Codigo ilogico, porfavor ayuda!!

Publicado por sander (14 intervenciones) el 12/08/2010 03:10:15
Don Pepe, hay cuestiones k para nuestra vista son logicas, sin embargo no siempre lo k parece ser logico es ilogico: ejemplo:
>> 1.546783454657987546513246542
ans =
1.5468
>> 1.546783454657987546513246548
ans =
1.5468
>>
los algoritmo k se usaste son distintos es por eso k son resultados distintos pero infinitecimal..... es por eso k tus resultados visualmente son iguales , pero internamente son distintos , debido a k el MatLab , y trabaja con hast 12 decimales.
lo que tienes k hacer es entra ha a la barra menu del Matlab y luego seguir la siguiente secuencia:

File/Preferences... luego te sale una ventana y buscar....: Command windows al lado izquierdo , al lado derecho observaras k existe un configuracion para lo resultados "text display", lo unico ke tienes k hacer es cambiar el formato de numero y visualizacion de numero te recomiendo kj uses los "long" y "compact".

para cualkier otra consulta
Alex S.
[email protected]
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

RE:Codigo ilogico, porfavor ayuda!!

Publicado por Pepe (2 intervenciones) el 12/08/2010 14:17:35
Hola Alex, muchas gracias por responder, te lo agradezco.
He probado lo que me decias en la respuesta, pero parece ser que siguen siendo iguales los numeros, ya si que no se, a que puede ser debido,

for i=1:length(MediaMovil);
if (temp1(1)~= MediaMovil(i,1)) && (temp2(1)~= MediaMovil(i,2));
if temp2(1) >= 0.0170 && temp2(1) <=0.03
if temp2(1) == MediaMovil(i,2)
disp(temp2(1))
end
disp('--->')
disp(temp2(1))
disp(MediaMovil(i,2))
disp(temp2(1)==MediaMovil(i,2))
end
end
end

MediaMovil es una matriz de 2948x2 double, temp2 y temp1 es temp1=[];
temp2=[];

se supone que, temp1 y temp2 guardan los datos de una fila de MediaMovil, cuando esta es diferente a la siguiente en ambos campos, pero como puedes ver, entra en el if y me pone que por ejemplo este dato es igual al siguiente, en el ejemplo que te muesrto a continuación que me sale en la pantalla command window

0.017000000000000
0.017000000000000
0
--->
0.017000000000000
0.017000000000000
0
--->
0.017000000000000
0.024500000000000
0

¿que puede estar pasando?

Muchas gracias
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

RE:Codigo ilogico, porfavor ayuda!!

Publicado por Jorge (226 intervenciones) el 13/08/2010 21:19:13
En el primer código que pusiste:

if (temp3(1,1)~= MediaMovil(i,1)) && (temp3(1,2)~= MediaMovil(i,2))

es condición que temp3(1,2) sea diferente a MediaMovil(i,2).

Si fueran iguales no se seguiría a la siguiente línea (el segundo if).
Hay un error muy pequeño de precisión.

Mi sugerencia es que añadas esto inmediatemente antes de ese primer if, sólo para fines de depuración:

((temp3(1,2)/MediaMovil(i,2)) - 1)*1e20

Con ello vas a notar la diferencia que hay entre los términos.
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