El Método de raíces múltiples es ampliamente utilizado para encontrar las raíces de la ecuación f(x)=0, ya que converge rápidamente, la contra es que uno debe conocer la derivada de f(x) y se necesita una aproximación inicial a la raíz.
Permite aproximar las primeras N iteraciones en el método de Newton-Raphson modificado aplicado a la función f tomando como aproximación inicial x0 . Observe que no requiere construir la función M definida en el método de Newton-Raphson modificado.
Codigo para Octave:
%METODO RAICES MULTIPLES
disp('METODO : NEWTON');
disp('por:');
disp('Carolina Perez Gaviria');
disp('Jennifer Olano Arrieta');
disp('Carlos Trujillo');
disp(' ');
fprintf ('Calculo de una raíz por el método de raíces mœltiples: ');
%fprintf me permite ingresar comentarios de manera textual que pueden orientar al usuario en el uso del programa, también permite mostrar el valor de las variables.
format long
%El comando format long me permite utilizar la máxima capacidad de almacenamiento de decimales permitidos por la máquina, de tal modo que el error por redondeo se disminuye, esto se explica al entender que tras cada iteración las cifras que se irán contaminando son las últimas. También pueden ser utilizados los comandos de formato simple o doble.
Xo=input('ingrese el valor inicial: ');
%El comando input me permite asignar a una variable un valor que ingresa el usuario. Xo, es uno de los valores iníciales que se ingresa para comenzar la búsqueda de raíces
Iter=input('ingrese el número de iteraciones: ');
Tol=input('ingrese la tolerancia que desea: ');
Fun=input('ingrese la funcion = ','s');
f=inline(Fun);
%Cuando ingreso función esta se encuentra en un formato simbólico, que no me sirve para utilizarla en el resto del programa, por esto se utiliza el formato inline, que la transforma y me permite evaluarla.
Y1=f (Xo);
%forma en la que evalúo la función en el valor inicial, y al mismo tiempo le asigno el nombre de Y
Du=input('ingrese la primera derivada = ','s');
Der=inline(Du);
%inline, permite asignar a una variable el valor de una función, para así utilizarla en el resto del programa
D=Der(Xo);
Du2=input ('ingrese la segunda derivada de la funcion = ','s');
Der2=inline (Du2);
D2=Der2 (Xo);
Error=Tol+1;
%como solo he calculado un valor de X, utilizo cualquier valor que sea mayor que la tolerancia que necesito, para que me continúe ejecutando el programa, pues cualquier valor que sea mayor que la tolerancia es inadecuado.
Cont=0;
% el contador hasta este momento está en cero, porque no se ha realizado ninguna operación
Denominador=D^2-(Y1*D2);
%Es necesario definir una variable solo para el denominador, pues se debe evaluar que este sea diferente de cero.
Z=[Cont,Xo,Y1,Error];
%Z, es una matriz en la que se almacenan los resultados de cada una de las iteraciones que realiza el programa.
while Y1~=0 & Error>Tol & Cont<Iter & Denominador~=0
%While es un comando que permite de manera repetitiva ejecutar un estamento mientras la condición sea verdadera.
%Operaciones que me ejecuta el método para llegar a la raíz
X1=Xo-((Y1*D)/(D^2-(Y1*D2)));
Y1=f(X1);
D=Der(X1);
D2=Der2(X1);
Error=abs((X1-Xo)/X1);
Cont=Cont+1;
Z(Cont,1)=Cont;
Z(Cont,2)=Xo;
Z(Cont,3)=Y1;
Z(Cont,4)=D;
Z(Cont,5)=D2;
Z(Cont,6)=Error;
Xo=X1;
end
%Evalúo las condiciones de éxito y de fracaso, utilizando el comando if
if Y1==0
fprintf('X1 es raíz: ');
else
if Error<Tol
fprintf('La raíz es %g con un error de %g: ',X1,Error);
else
if Denominador==0
fprintf('Se está haciendo división por cero')
else
fprintf('Se llego al máximo de Iteraciones: ');
end
No hay comentarios:
Publicar un comentario