El método abierto Newton-Rapshon es de los más utilizados por su rapidez y efectividad. Este es una variante del método de punto fijo. La diferencia se encuentra en la ecuación de iteración que está dada por:
Según la definición geométrica el método funciona como se explica a continuación:
1) Se inicia trazando una recta tangente a la gráfica de f(X) en el punto (X0, f(X0)), donde X0 es la aproximación inicial.
2) La anterior recta tangente corta al eje X en un punto (X1,0), entonces con este valor se traza una recta tangente en el punto: (X1,f(X1)) de la curva f(x).
3) Los pasos 1 y 2 se repiten y en consecuencia los puntos de corte de las rectas tangentes se aproximan cada vez más a la raíz de f(X), cuando el método converge.
PSEUDOCODIGO DE NEWTON-RAPSHON
write (‘Método de Newton-Rapshon’)
read fx, df, x0, tol, niter
fx=convert the input fx of the user to function
df=convert the input df of the user to function
contador=0
error=tol+1
while error>tol and fx(x0) ≠0 and df(x0)≠0 and contador<niter do
contador=contador+1
write table with this information (Ite, Xn, f(Xn), df(Xn), error)
x1=x0-f(x0)/df(x0)
error=|x1-x0|
x0=x1
end while
if fx(x0) ==0
write (‘Este número es raíz: x0’)
else if
write(‘ Este número x1 es una aproximación a una raíz con una tolerancia de: tol’)
else if
write(‘Es una posible raíz múltiple’)
else
write(‘Fracaso el número de iteraciones’)
end
CODIGO DE NEWTON-RAPSHON
clc
clear all
disp('Metodo de Newton-Rapshon');
fx=input('Ingrese la funcion: ','s');
df=input('Ingrese la derivada de la funcion: ','s');
x0=input('Ingrese la aproximacion inicial: ');
tol=input('Ingrese una tolerancia: ');
niter=input('Entre el numero maximo de iteraciones: ');
fx=inline(fx);
df=inline(df);
contador=0;
error=tol+1;
while error>tol && fx(x0)~=0 && df(x0)~=0 && contador<niter
contador=contador+1;
fprintf('Iter:%2i\t Xn= %f\t f(Xn)= %f\t df(Xn)= %f\t Error= %f\n',contador,x0,fx(x0),df(x0),error)
x1=x0-fx(x0)/df(x0);
error=abs(x1-x0);
x0=x1;
end
if fx(x0)==0
disp('Este numero es raiz:')
disp(x0)
elseif error<tol
disp('Este numero ... es una aproximcion a una raiz con una tolerancia de: ')
disp(x1)
disp(tol)
elseif df(x0)==0
disp('Es una posible raiz multiple: ')
disp(x1)
else
disp('Fracaso el numero de iteraciones')
end