martes, 17 de enero de 2012

Newton Raphson Multivariable



Si quieren que el usuario ingrese las funciones, jacobiana, tolerancia, etc. deben ocupar el comando input.


%newton raphson multivariable

clear all; close all; clc;

%funciones  x^2+x*y+y^2-1=0
%           x^2-y=0
f=inline('[x(1)^2+x(1)*x(2)+x(2)^2-1; x(2)-x(1)^2]');
df=inline('[2*x(1)+x(2) x(1)+2*x(2); -2*x(1) 1]');

%punto de partida para x e y
x0=[1;1];

%iteraciones máximas
maxi=10;

%tolerancia
tol=1.e-12;

corr=tol+1;
k=0;

while k<=maxi & norm(corr,inf)>tol
    
    fx0=feval(f,x0);
    dfx0=feval(df,x0);
    corr=dfx0\fx0;
    x=x0-corr;
    x0=x;
    k=k+1;
end

disp('la solución es')
disp(x)

if norm(corr,inf)>tol
    error('Se alcanzó el número máximo de iteraciones')
end

disp(['se calculo en ' num2str(k) ' iteraciones'])

8 comentarios:

  1. Sí funciona, en que parte te tira el error?

    ResponderEliminar
  2. Amigo feval no funciona para un script el programa solo sirve en el comand line... para un script da el siguiente error Error using sym/eval (line 15)
    Attempt to add "Qc" to a static workspace.
    See MATLAB Programming, Restrictions on Assigning to Variables for details.

    ResponderEliminar
    Respuestas
    1. puedes cambiarlo por el feval por

      while k<=maxi & norm(corr,inf)>tol

      fx0=f(x0);
      dfx0=df(x0);
      corr=dfx0\fx0;
      x=x0-corr;
      x0=x;
      k=k+1;
      end

      saludos

      Eliminar
  3. Respuestas
    1. dónde está el error?, probaste con la solución que le di a anónimo? a mi me corre sin problemas en el matlab 2011b con todos los toolboxes

      saludos

      Eliminar
  4. A mí sí me funcionó!!!! :D Mil gracias

    ResponderEliminar
  5. para n ecuación y hacer el interfaz de usted es solamente para 2 ecuaciones

    ResponderEliminar