Método de Newton-Raphson en
Matlab
El método de Newton-Rhapson es uno de los más utilizados para dar solución a
ecuaciones algebraicas y trascendentes. Clasificándose entre los métodos
abiertos, es decir, aquellos que requieren uno o dos valores que no
necesariamente encierren a la raíz.
Si el valor inicial para la raíz es xi, entonces se puede trazar una tangente desde el
punto [xi, f(xi)] de la curva, el punto donde esta tangente cruza al eje “x”
representa una aproximación mejorada de la raíz.
El método de Newton-Raphson se deduce a partir de esta interpretación
geométrica y se tiene que la primera derivada en x es equivalente a la pendiente:
Que se arregla para obtener
Código en Matlab
Nota: Es importante mencionar que para el siguiente código es necesario tener
instalada la symbolic math toolbox, para trabajar con matemática simbólica.
Podemos crear un nuevo script en Matlab y usar el código siguiente, en cual nos
permitirá ingresar la función, el punto de inicio, porcentaje de error.
%Limpiamos la pantalla y mostramos el nombre del método
clear
clc
disp('Método de Newton Raphson')
%Damos de alta la variable simbólica X
syms x
%Introducimos la función,el punto de inicio,así como
%porcentaje de error
f=input('Introduzca la función f(x):');
pi=input('Introduzca el punto de inicio:');
err=input('Porcentaje de error:');
%Graficamos la función
ezplot(f)
grid on
%Calculamos la derivada de la función
d=diff(f);
d=inline(d);
f=inline(f);
ea=100;
j=0;
while ea>err
%Aproximamos la raiz con la fórmula correpondiente
xi=pi-(f(pi)/d(pi));
%Calculamos el porcentaje de error
ea=abs(((xi-pi)/xi)*100);
pi=xi;
j=j+1;
end
%Mostramos los resultados en pantalla (con 3 decimales)
fprintf('\nRaiz= %10.3f en %d Iteraciones',pi,j)
x0=input('Ingrese el valor inicial: ');
tol=input('Ingrese el porcentaje de error: ');
f=input('Ingrese la función: ');
i=1;
fx(i)=x0;
syms x;
f1=subs(f,x,fx(i));
z=diff(f);
d=subs(z,x,fx(i));
ea(1)=100;
while abs(ea(i))>=tol;
fx(i+1)=fx(i)-f1/d; f1=subs(f,x,fx(i+1)); d=subs(z,x,fx(i+1));
ea(i+1)=abs((fx(i+1)-fx(i))/fx(i+1)*100);
i=i+1;
end
fprintf('i fx(i) Error aprox (i) \n');
for j=1:i;
fprintf('%2d \t %11.7f \t %7.3f \n',j-1,fx(j),ea(j));
end
METODO DE LA SECANTE
INTRODUCCIÓN
En este pequeño aporte se hablara de lo que es el método de la secante,
este método es un algoritmo de la raíz de investigación que utiliza una
serie de raíces de las líneas secantes para aproximar mejor la raíz de
una función f. El método de la secante se puede considerar como una
aproximación en diferencias finitas del método de newton raphson. Sin
embargo, este método fue desarrollado independientemente de este
último. Este método mostrara lo fácil y preciso que es ya que a diferencia
del método de newton raphson no necesitamos la derivada de la función
a evaluar.
EXPLICACIÓN DEL MÉTODO.
El método de la secante es un método para encontrar los ceros de una
función de forma iterativa.
Uno de los objetivos de este método es eliminar el problema de la
derivada de la función.
Ya que el método de la secante es muy similar al método de Newton-
Raphson, con la diferencia principal de que el método de la secante no
requiere de las derivadas de la función. Por ello es más útil emplear el
método de la secante.
Él método se basa en obtener la ecuación de la recta que pasa por los
puntos
A dicha recta se le llama secante por cortar la gráfica de la función.
Para aplicar el método de la secante se parte de Xo y X1 y se calcula,
iterativamente para cada n≥1.
Y cuando no se nos da Xo y X1, se empieza tabulando la función para
saber cuáles tomar y donde se encuentren cambios en los signos del
resultado se toman para meterlos en la formula como Xo y X1.
Posteriormente ya que se hace la primera iteración
Se toma X n-1 como Xn para de la próxima iteración
Y se toma la Xn de la iteración anterior como X n-1 para la
siguiente iteración.
El método de la secante consiste en considerar la siguiente Formula que
es para este metodo:
Después de cada iteración debe sacarse el error aproximado de esa
iteración con la siguiente formula
DIAGRAMA DE FLUJO.
El diagrama de flujo es aquel nos ayuda a entender mas fácil como es
que funciona este programa del método de la secante.
ALGORITMO.
clc
clear
f=input('Ingrese la funcion:\n','s');;
f=inline(f);
x0=input('Ingrese el primer punto inicial:\n');;
x1=input('Ingrese el segundo punto inicial:\n');
xra=0;
xr=0;
tol=0.01;
i=1;
error_aprox=1;
error=0;
fx1=f(x1);
fx0=f(x0);
xr=x1-((x1-x0)/(fx1-fx0))*fx1;
fprintf('It. X0 X1 Xr Error
aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %11.7f
\n',i,x0,x1,xr,error);
while error_aprox >= tol,
xra=xr;
x1=xr;
fx1=f(x1);
fx0=f(x0);
xr=x1-((x1-x0)/(fx1-fx0))*fx1;
error = abs((xr - xra) / xr);
error_aprox = error;
i=i+1;
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %11.7f
\n',i,x0,x1,xr,error_aprox);
end
RESULTADOS EN MATLAB, IMAGENES.
Aquí se muestran los resultados de las corridas del programa con
diferentesfunciones.
A continuación habrá ejemplos resueltos con el programa, donde se
verán los resultados al dar calcular y/o graficar.
1) Ejemplo se evaluara la siguiente función logarítmica.
f=10*log(x)6*x^8-14
Donde se deben ingresar los valores que tomaran X0 y X1 para que la
formula introducida dentro del programa este completa y pueda afectarse
para obtener la raíz de la función. que en este caso serán los siguientes
valores.
X0=2
X1=3
Donde también es necesario agregar el error que habrá al hacer estas
operaciones.
E=0.001
Al darle calcular y graficar se observara el resultado de la raíz
aproximada de la función y la gráfica de la función que se evaluó.
2)Ejemplo la función sera una polinomica
f=x^3+2*x^2+10*x-20
Donde x0 y X1 tomaran los siguientes valores.
X0=0
X1=1
Al igual que el siguiente porcentaje de error.
E=0.001
3) Ejemplo sera una funcion exponencial
f=exp(-x)-x
que se evaluara con lo siguientes valores de X0 y X1
X0=1
X1=2
Al igual que se dará un valor del error de la función al hacer la evaluación
E=0.0001
Y al igual que en los ejemplos pasado se observara la raíz aproximada y
la gráfica de la funcion
Programa De la Secante, espero les sirva
clc
clear
f=input('Ingrese la funcion:\n','s');;
f=inline(f);
x0=input('Ingrese el primer punto inicial:\n');;
x1=input('Ingrese el segundo punto inicial:\n');
xra=0;
xr=0;
tol=0.01;
i=1;
error_aprox=1;
error=0;
fx1=f(x1);
fx0=f(x0);
xr=x1-((x1-x0)/(fx1-fx0))*fx1;
fprintf('It. X0 X1 Xr Error
aprox \n');
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %11.7f
\n',i,x0,x1,xr,error);
while error_aprox >= tol,
xra=xr;
x1=xr;
fx1=f(x1);
fx0=f(x0);
xr=x1-((x1-x0)/(fx1-fx0))*fx1;
error = abs((xr - xra) / xr);
error_aprox = error;
i=i+1;
fprintf('%2d \t %11.7f \t %11.7f \t %11.7f \t %11.7f
\n',i,x0,x1,xr,error_aprox);
end