NEWTON

NEWTON

martes, 20 de septiembre de 2011

Quinto Programa: Newton - Raphson

MÉTODO DE NEWTON-RAPHSON:

Una de las formas más utilizadas para encontrar raíces es la fórmula de Newton-Raphson. 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. Por lo común el punto donde esta tangente cruza al eje x representa una aproximación mejorada de la raíz.

Codigo para Octave:

%Metodo de Newton
format long
Xo=input ('coloque el valor inicial: ');
Iter=input ('cantidad de iteraciones: ');
Tol=input ('indique la tolerancia deseada: ');
Fun=input ('ingrese la funci—n = ','s');
Der=input ('ingrese la derivada de la funcion = ','s');
f=inline (Fun);
Y1=f (Xo);
Der=inline (Du);
D=Der (Xo);
% Evalua la derivada en Xo para poder saber si es adecuad para seguir con este mŽtodo, es decir que sea diferente de cero
Error=Tol+1;
%Ya que solo calcule un valor de x, debemos utilizar un valor mayor a la tolerancia.
Cont=0;
% el contador se encuentra en cero ya que no se ha realizado ninguna operaci—n.
Z= [Cont, Xo, Y1, Error];
%Z, es la matriz en la que se almacenan los resultados de cada una de las iteraciones que realiza el programa para ser finalmente entregados en una tabla.
    while Y1~=0 & Error>Tol & Cont<Iter&D~=0
%while, comando que permite ejecutar el programa mientras se cumplan ciertas condiciones.
        X1=Xo-(Y1/D);
        Y1=f(X1);
        D=Der (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)=Error;
        Xo=X1;
    end
    if Y1==0
        fprintf('X1 es raíz\n');
    else
        if Error<Tol
            fprintf('La raíz es %g con un error de %g\n',X1,Error);
        else
            if D==0
                fprintf('Se esta dividiendo por cero')
            else
            fprintf('numero m‡ximo de iteraciones\n');
            end          
        end
    end
    fprintf('        Xo,         X1,         Y1,         Error\n');
    disp(Z);

No hay comentarios:

Publicar un comentario