Metodo di Newton 2 dim

Mrs92
voglio implementare il metodo di newton in 2 dimensioni per trovare il minimo in un problema non vincolato
ma non so come scriverlo nelle due dimensioni.
per ora ho scritto questo:

%Metodo di Newton
clear
clc

%--------------------

%definisco i parametri base
syms x1 x2 f

f=input('inserire la funzione obiettivo: ');
x1=input('inserire dato iniziale x1: ');
x2=input('inserire dato iniziale x2: ');
eps=input('inserire tolleranza: ');
nmax=input('inserire numero massimo di iterazioni: ');

x0=[x1,x2];

disp('funzione obiettivo f: '),disp(f)
disp('dato iniziale: '),disp(x0)
disp('tolleranza: '),disp(eps)
disp('iterazioni massime: '),disp(nmax)

%--------------------

%inizializzo i parametri di iterazione
x=x0;
n=0;
disc=eps + 1;
grad1 = diff(f,x1);
grad2 = diff(f,x2);
grad =[grad1; grad2];
hess=[gradient(grad1,x1) gradient(grad1,x2); ...
      gradient(grad2,x1) gradient(grad2,x2)];
%hessinv=inv(hess);


  
while abs(disc)>eps && n<nmax
    n=n + 1;
    disc=-inv(hess(x))*grad(x);
    x=x + disc;
    f;
end

if n==nmax
    disp('Raggiunto il numero massimo di iterazioni');
else
    disp ( ['Convergenza in',num2str(n),'iterazioni. Radice=',...
        num2str(x)])
end


ovviamente mi dà errore durante il ciclo while...
posso risolvere il problema del calcolo delle funzioni mettendo grad(x1,x2)
ma come implemento la x?

Risposte
Quinzio
Il problema dove sta ? Nella sintassi, o nel metodo stesso ?
Perchè poi questa riga ?
disc=-inv(hess(x))*grad(x);

Mrs92
il problema sta nella sintassi.
quella riga forse è sbagliata ma mi serviva un criterio di arresto per le iterazioni

Mrs92
up

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.