Matlab - Ejercicio de Matlab - Comparar en Biseccion

 
Vista:

Ejercicio de Matlab - Comparar en Biseccion

Publicado por Cristian (6 intervenciones) el 20/06/2010 00:35:32
Gente, se me presenta el siguiente problema. Quiero calcular una aproximacion de uan tasa de interes por medio del metodo de Newton y no me tira resultado alguno.

Tengo definida la funcion interes como:

function f=interes(I)
f=340/(I/1200)*(((1+(I/1200))^240)-1)-300000;
syms I
function df=derivada(I)
df=diff(f,I)

y la function derivada :

function df=derivada(I)
f=340/(I/1200)*(((1+(I/1200))^240)-1)-300000);
df=diff(f,I);

El Programa lo hice:

%1-Maximo Error Absoluto con 6 decimales.
format long
clear
t=6;
e=0.5*10^-t;
disp('El Maximo Error Absoluto es:'), disp(e);
%2-Calculo de la tasa de interes mediante el uso del metodo de la biseccion.
a=5;
b=15;
fa=interes(a);
fb=interes(b);
n=round((log(b-a)-log(e))/log(2)-1);
disp('La cantidad minima de iteraciones necesarias es:'), disp(n);
for i= 1 : n
c = (a+b)/2;
fc = interes(c);
if(fc*fa<0)
b = c;
fb = fc;
else
a = c;
fa = fc;
end
end
disp('El valor de la tasa de interes por medio del metodo de la Biseccion es:'), disp(a);
%3-Calculo de la tasa de interes mediante el uso del metodo de Newton.
clear
xo=15;
fxo=interes(xo);
dfxo=derivada(xo);
x1=xo-(fxo./dfxo);
fx1=interes(x1);
dfx1=derivada(x1);
n=1;
while (abs(x1-xo)>0.0000001)
xo=x1;
fxo=fx1;
dfxo=dfx1;
x1=xo-(fxo./dfxo);
fx1=interes(x1);
dfx1=derivada(x1);
n=n+1;
end
disp('El valor de la tasa de interes por medio del metodo de Newton es:'), disp(x1);
disp('Para lo cual, la cantidad de pasos necesarios fue de:'), disp(n);

y como resultado me tira:

El Maximo Error Absoluto es:
5.000000000000000e-007

La cantidad minima de iteraciones necesarias es:
23

El valor de la tasa de interes por medio del metodo de la Biseccion es:
11.14441633224487

El valor de la tasa de interes por medio del metodo de Newton es:
Para lo cual, la cantidad de pasos necesarios fue de:
1

Por lo que algo pasa con lo de Newton claramente...¿Me dan una 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

RE:Ejercicio de Matlab - Comparar en Biseccion

Publicado por emiliio (51 intervenciones) el 14/07/2010 10:38:22
como ya tienes las funciones necesarias
f(xo) y diff ( f(xo) )

prueba con esto

f1= f(xo); funcion
f2= diff( f(xo) ); función derivada
ea= 1; error abasoluto
xo= 15;
b=0;

while ea>= 0.000001

b=b+1; Contador de iteraciones

x1= xo - f1/f2;

ea = abs ( ( x1-xo ) / x1 );

xo=x1;

_if b> 20000 asi aseguras que si el sistema no encuentra solucion no siga iterando eternamente

ea= -1; puedes poner un disp si aparece esto q no se encontro solución

__end
end

con esto el programa andara más rapido ya que no tendra q derivar siempre, controlas que no itere eternamente, y pudes ponerle un disp por ahi para q te muestre el numero de iteraciones y se puede ver mas claro todo lo que haces, en tu programa no veo errores, pero el q te muestro, es el que estoy ocupando y n o me ha presentado problema alguno.

Una pregunta yo estoy trabajando con ecuaciones no lineales y quiero saber cual es el método más seguro para encontrar ceros??
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