Metodo di Newton 2 dim
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:
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?
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
Il problema dove sta ? Nella sintassi, o nel metodo stesso ?
Perchè poi questa riga ?
disc=-inv(hess(x))*grad(x);
Perchè poi questa riga ?
disc=-inv(hess(x))*grad(x);
il problema sta nella sintassi.
quella riga forse è sbagliata ma mi serviva un criterio di arresto per le iterazioni
quella riga forse è sbagliata ma mi serviva un criterio di arresto per le iterazioni
up