Código Matlab – Método de Newton-Raphson

El método de Newton-Raphson es un método iterativo ampliamente utilizado para encontrar aproximaciones de las raíces de ecuaciones no lineales. A diferencia de otros métodos que dividen intervalos, este método se basa en la idea de aproximar la raíz mediante una tangente a la curva de la función en un punto inicial. Aquí el código realizado en Matlab:

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

34 thoughts on “Código Matlab – Método de Newton-Raphson

  1. hola me sale lo siguiente
    >> x^3-3*x-1
    error: ‘x’ undefined near line 1 column 1
    >> x^3-3*x-1=0
    parse error:

    invalid left hand side of assignment

    >>> x^3-3*x-1=0

  2. Me sale este error:
    Error using fprintf
    Function is not defined for ‘sym’ inputs.
    Error in jalaplz (line 20)
    fprintf(‘%2d \t %11.7f \t %7.3f \n’,j-1,fx(j),ea(j));

  3. como puedo hacer el metodo de biseccion sin usar la tolerancia ni el error solo diciendole al usuario que ingrese la funcion y los valores para a y b

  4. ola tengo una duda como debo de introducir los datos de la ecuacion y si me pudieran explicar como va cada parte del programa soy nuevo en esto de antemano gracias

    1. oeoeo
      te mando el de la secante y biseccion en matlab no se si esten muy bueno
      function x=secant(f,a,b,n,e)
      disp ‘Método de la Secante’
      f=inline(f);
      for k=1:n
      t=b;
      b=(f(b)*a-f(a)*b)/(f(b)-f(a));
      a=t;

      if(abs(b-a)e && k<n
      m=(a+b)*1/2;
      if f(a)*f(m)<=0
      b=m;
      else
      a=m;
      end
      k=k+1;
      end
      out=[a,b];

  5. ??? Undefined function or method ‘syms’ for input arguments of type
    ‘char’.

    Error in ==> newton at 3
    syms x;

  6. Use una variación del programa utilizado por el autor, con el consiguiente código:

    function Newtonraphson
    clc
    clear
    syms x;

    x0=input(‘Ingrese el valor inicial: ‘);
    tol=input(‘Ingrese el porcentaje de error: ‘);
    f=input(‘Ingrese la función: ‘);
    i=1;
    fx(i)=x0;

    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

    Si ponen al principio syms x, el programa reconoce a x como una variable simbolica y deja de dar errores. Además hay que tener cuidado al meter la ecuación al programa, siempre considerando a f(x)=0, y respetando la forma en como matlab escribe las ecuaciones.

  7. ola soy (tapia) lo que pasa que estoy buscando un hombre que me enseñe a manegar el programa de matlab que sea juapo atractivo y muy varonil cualquier cosa que necesite estoy a sus odenes solo a para ti…….hablame te lo ponjo a tu imaginacion.

  8. hola, soy novato en Matlab y estoy intentando resolver un sistema con las siguientes funciones:
    u=2x-y-e^x
    v=-x+2y-e^(-y)

    Para ello he creado el siguiente programa pero no me dan los resultados deseados, podrían decirme si el fallo es en el programa o es porque estas no convergen?

    Gracias.

    function Primeraparte
    clc
    clear
    close all

    B=Calculo;
    end

    function B=Calculo
    i=2;
    B=[0 0;1 1];
    T=0.001;

    while abs(B(i,1)-B(i-1,1))>T && abs(B(i,2)-B(i-1,2))>T

    J=[2-exp(B(i,1)) -1;-1 2+exp(-B(i,2))];

    D=det(J);

    u=2*B(i,1)-B(i,2)-exp(B(i,1));
    v=-B(i,1)+2*B(i,2)-exp(-B(i,2));

    B(i+1,1)=B(i,1)-(((u*J(2,2))-(v*J(1,2)))/D);
    B(i+1,2)=B(i,2)-(((v*J(1,1))-(u*J(2,1)))/D);

    i=i+1;
    end
    disp(B(i-1,1))
    disp(B(i-1,2))
    end

  9. oye me aparece esto al ingresar la funcion:
    ??? Error using ==> input
    Undefined function or variable ‘x’.

    Error in ==> newton1 at 3
    f=input(‘Ingrese la función: ‘);

    que puedo hacer

  10. Te complicas la vida: asi es mucho mas facil.

    function sol=newton(fn,dfn,x0,tol)
    old = x0+1;while abs (x0−old)> tol;
    old=x0;
    x0 =old−feval(fn,old)/feval(dfn,old);end; sol=x0;

    1. esta bien tu programa.. solo deves especificar par los principiantes que debes declarar tu funcion fn= inline(‘funcon deseada’) y que ademas debesn poner la funcion en funcion de x0 n_n

  11. hola muy buenos los aportes, pero me gustaria q los dejaras un poquito explicados, pues bueno muchos somos principiantes y no sabesmos bn, sobre la programacion, solo es para q nos quede un poco mas facil el entender el programa….

    grax

      1. mire que me aparece Error using ==> input
        Undefined function or variable ‘x’. que hago ay le mando el codigo para que me ayude por favor 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

        por otro lado en que linea coloco el sgte codigo

        function sol=newton(fn,dfn,x0,tol)
        old = x0+1;while abs (x0−old)> tol;
        old=x0;
        x0 =old−feval(fn,old)/feval(dfn,old);end; sol=x0;

Deja un comentario