vuoi
o PayPal
tutte le volte che vuoi
A=hessiana_grad(x);
if (k==0) % alla prima iterazione prendo come direzione
quella dell'antigradiente
d= -gradf/norm(gradf);
end
%devo scegliere adesso un passo alfa con cui muovermi lungo questa direzione
%metodo senza l'uso di derivate:finestramento
epsilon=10^-8;
delta = 0.5;
alfa=1;
y=x;
h=0;
while(delta>epsilon) %continuo ad iterare fino ad un valore prefissato di
tolleranza
k=0;
while(f_obiettivo(x++alfa*d)>f_obiettivo(x+(alfa+delta)*d))
alfa_new=delta+alfa;
alfa=alfa_new;
k=k+1;
end
%ad ogni iterata succcessiva dimezzo il passo per avvicinarmi sempre
%più al punto di minimo
alfa=alfa-2*delta;
delta=delta/2;
h=h+1;
end % una volta calcolato il passo mi sposto di un passo alfa lungo la direzione
d x_new = x+alfa*d; % è un vettore colonna dato che sia x che d
sono vettori colonna
f_new = f_obiettivo(x_new);
gradf_new = GRADF(x_new)';
%aggiorno i criteri di Himmelblau
a = norm(gradf_new);
b = norm(x_new-x)/max(norm(x),1);
c = norm(f_new-f)/max(norm(f),1);
if (k>=1)
beta=(norm(gradf_new))^2/(norm(gradf))^2; %espressione di
Fletcher-Reeves
d_new=-gradf_new+beta*d; %direzione coniugata con quella
dell'antigradiente nel punto
d=d_new/norm(d_new);
%metodo essatto
%B= hessiana_grad(x_new);
%beta = (-gradf_new*B*d)/(d'*B*d);
%d_new = -gradf_new + beta*d;
%d=d_new;
end
x=x_new;
Xit = [Xit ; x_new'];
it=it+1;
end
punto.min = x;
%per graficare le linee di livello