% mininewton01.m   origine :   opti4.m
% fd, 14  janvier 2006, 03 mars 2025,
% fd, 30 juin 2026
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
clear , format long
   
printf("mininewton01 ; minimisation d une fonction quadratique \n"); 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ff  = inline("(x-1)**2 + 3*(x-y)**2") ; 
dxf = inline("2*(x-1) + 2*3*(x-y)") ; 
dyf = inline("-2*3*(x-y)") ; 
   
printf("\n"); 

printf("isovaleurs de la fonction ff = (x-1)**2 + 3*(x-y)**2 \n"); 

nvaleurs = 5 ; 
for ll=1:nvaleurs
	 if (ll==1) val = 1. ; endif 
	 if (ll==2) val = 2. ; endif 
	 if (ll==3) val = 3. ; endif 
	 if (ll==4) val = 4. ; endif 
	 if (ll==5) val = 5. ; endif 

nn = 200 ; 
xisof = zeros(nn+1,1) ; yisof = xisof ; 
dth = 2.*pi/nn ; 
  
for j=1:nn+1
xisof(j) = 1. + val*cos(j*dth) ;
yisof(j) = xisof(j) + val*sin(j*dth)/sqrt(3.) ; 
end


plot (xisof, yisof, 'b;;' ) 
title ('minimisation d une fonction quadratique') ;
axis ( [ -5. , 6.5 , -6.1, 7.5 ]) ; pause (.1) ; 
hold on ;

end 
print('01a-minimisation-gradient-quadratique', '-djpg','-S891,630'); 
	
hold on 

niter = 50 
xx = 6. ; yy = 6. ;
xiter = zeros(niter+1,1) ; 
yiter = zeros(niter+1,1) ; 

rho = .145
  
for j=1:niter
xiter(j) = xx ;
yiter(j) = yy ;

valeur = ff(xx,yy) ; 
gx = dxf(xx,yy) ; gy = dyf(xx,yy) ;

xx = xx - rho*gx ;
yy = yy - rho*gy ;

end 	
xiter(niter+1) = xx ;	yiter(niter+1) = yy ;    


title ('iterations de l algorithme de gradient') ;
plot (xiter, yiter, '*r;;' , xiter, yiter, 'r;;' ) 
print('01b-minimisation-gradient-quadratique', '-djpg','-S891,630'); 
hold off 




