Matlab - Errror con codigo

 
Vista:

Errror con codigo

Publicado por Edward (1 intervención) el 11/01/2012 21:43:11
Buenas tardes, estoy intentando crear un codigo que realice un barrido en el intervalo (a,b) de un polinomio p. para encontrar la primera raiz y funciona si hay una raiz, pero si dentro de ese intervalo no existe una raiz que me devuelva un valor de c igual al de b.... que pasa, que cuando hago la prueba con este valor
proyecto ([1 -5 5 -5 -6], -2.2, -2)

el deberia detenerse cuando a = b = -2 pero en lugar de esto el ciclo sigue.

este es el codigo

function [a, c] = proyecto(p,a,b)
dx =0.1;it=0;i=0;

while(i==0 || a<=b )
if (a == b)
c=b;
break
end
ya=polyval(p,a);
yb=polyval(p,a+dx);
if(ya*yb<=0)
c =a+dx;
i=1;
break
else
it = it+1;
a = a+dx;
%c= 0;
end
end


usando el debugger creo que el problema esta en que en el ultimo paso "a" toma un valor igual a -2.00000 y b = -2 por eso no entra en la condicion del if...

si pueden ayudarme se los agradeceria
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

Errror con codigo

Publicado por Jorge (226 intervenciones) el 13/01/2012 11:18:47
No conviene hacer comparaciones tan tajantes en los valores, precisamente por los errores de precisión inherentes al cálculo numérico.

Cambia esto
if (a == b)

por algo así
if abs(a - b) < 1e-5

en donde 1e-5 es una tolerancia aceptable, técnicamente cero.
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