% opti1.m
% fd, 14  janvier 2006, 02, 05 mars2025 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% function  yy=gg(x);   yy = xx + 5.*(1.-cos(2*pi*xx))  ; endfunction 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear ; format long 

   fprintf ('opti1 : dichotomie a une variable \n') ;

m=101 ; xmin=0. ;  xmax = 1 ; dx=(xmax - xmin) /m ; 
x =zeros(m+1,1) ;   f =zeros(m+1,1) ;  
ymin=1.e30 ; ymax=-1.e30 ; 
for k=1 : m+1 ;  xx = xmin + (k-1) * dx ; 
x(k:k,1) = xx ;  
yy=ff(xx);
ymin = min ( yy , ymin ) ; 
ymax = max ( yy , ymax ) ; 
x(k:k,1) = xx ;  f(k:k,1) = yy ;  end ; 

hold  off ; 
plot(x,f(:,1),'k;fonction a minimiser;' ) ;
hold on
axis ( [ -.01 , 1.01 , .74 , 1.10 ]) ;
title ('dichotomie a une variable') ;


n=14 %% 7
  a=xmin ;  b=xmax ;  xi = (a+b)/2  ; 
for j=1:n ;  
xi = (a+b)/2 ; 
ya=ff(a) ; yb = ff(b) ; yi = ff(xi) ; 
x1 = (a+xi)/2 ; x2 = (xi+b)/2 ; 
y1=ff(x1) ; y2=ff(x2) ; 
xx = [a,x1,xi,x2,b] ; yy = [ya,y1,yi,y2,yb] ;
if j==1 ; plot(xx,yy, '*r;iteration 1;') ; pause (.05) ; end ;  
if j==2 ; plot(xx,yy, '+b;iteration 2;') ; pause (.05) ; end ;  
if j==3 ; plot(xx,yy, 'om;iteration 3;') ; pause (.05) ; end ;  
if j==4 ; plot(xx,yy, 'xk;iteration 4;') ; pause (.05) ; end ;  
if j==5 ; plot(xx,yy, '+g;iteration 5;') ; pause (.05) ; end ; 
if j==6 ; plot(xx,yy, '*r;iteration 6;') ; pause (.05) ; end ;  
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi ; end ; 
if ((yi<=y1)&&(yi<=y2)) ;  a = x1 ; b = x2 ; end ; 
if ((y2<=yi)&&(yi<=y1)) ;  a = xi ; b = b  ; end ;
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi  ; end ;
xi ; 
% j , a , b   
end ;
a , b , ecart=abs (b-a)
		
print('01a-dichotomie-une-variable', '-djpg','-S891,630');
hold  off ; pause (2) 



m=200 ; xmin=-1.1  ;  xmax = 5.1 ; dx=(xmax - xmin) /m ; 
x =zeros(m+1,1) ;   f=zeros(m+1,1) ;  
for k=1 : m+1 ;
xx = xmin + (k-1) * dx ; 
x(k:k,1) = xx ;  
yy = gg(xx) ; %% xx + 5.*(1.-cos(2*pi*xx)) ;
ymin = min ( yy , ymin ) ; 
ymax = max ( yy , ymax ) ; 
x(k:k,1) = xx ;  f(k:k,1) = yy ;  end ;
hold  off ; 
plot(x,f(:,1),'k;nouvelle fonction a minimiser;' ) ;
axis ( [ -1.11 , 5.11 , -2, 15.5 ]) ;
title ('y = x + 5 (1 - cos(2 pi x))') ;
print('01b-fonction-oscillante', '-djpg','-S891,630');
pause (2) 

fprintf ('7 minima pour la seconde fonction ! \n') ;

xref = -1. ;
niter = 30 

for lmini = 1:7 ;   %%% boucle sur les differents minima 
a = xref - .1 ; b = xref +.1 ; xi = (a+b)/2 ;

for j=1:niter ;  
xi = (a+b)/2 ; 
ya=gg(a) ; yb = gg(b) ; yi = gg(xi) ;
if ((yi<=ya)&&(yi<=yb)) ; ok = 1 ; else ; ok = 0 ; end 

x1 = (a+xi)/2 ; x2 = (xi+b)/2 ; 
y1=gg(x1) ; y2=gg(x2) ;  
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi ; end ; 
if ((yi<=y1)&&(yi<=y2)) ;  a = x1 ; b = x2 ; end ; 
if ((y2<=yi)&&(yi<=y1)) ;  a = xi ; b = b  ; end ;
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi  ; end ;
end ; a , b , ecart=abs (b-a)

	xref = xref + 1 ;   end ; 

fprintf ('solution analytique \n') ;
xxx = -(1./(2*pi))*asin(1./(10*pi))

s5 = 5+xxx

hold off

m=200 ; xmin=-1.1  ;  xmax = 5.1 ; dx=(xmax - xmin) /m ; 
x =zeros(m+1,1) ;   f=zeros(m+1,1) ;  
for k=1 : m+1 ;
xx = xmin + (k-1) * dx ; 
x(k:k,1) = xx ;  
yy = gg1(xx) ;
ymin = min ( yy , ymin ) ; 
ymax = max ( yy , ymax ) ; 
x(k:k,1) = xx ;  f(k:k,1) = yy ;  end ;
hold  off ; 
title ('y = x*x + 5 (1 - cos(2 pi x))') ;
plot(x,f(:,1),'k;une autre fonction a minimiser;' ) ;
axis ( [ -1.11 , 5.11 , -2, 32.5 ]) ;
print('01c-fonction-oscillante', '-djpg','-S891,630');


fprintf ('encore 7 minima pour la troisieme fonction \n') ;

  

xref = -1. ;
niter = 30 

for lmini = 1:7 ;   %%% boucle sur les differents minima 
lmini 
a = xref - .1 ; b = xref +.1 ; xi = (a+b)/2 ;

for j=1:niter ;  
xi = (a+b)/2 ; 
ya=gg1(a) ; yb = gg1(b) ; yi = gg1(xi) ;
if ((yi<=ya)&&(yi<=yb)) ; ok = 1 ; else ; ok = 0 ; end 

x1 = (a+xi)/2 ; x2 = (xi+b)/2 ; 
y1=gg1(x1) ; y2=gg1(x2) ;  
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi ; end ; 
if ((yi<=y1)&&(yi<=y2)) ;  a = x1 ; b = x2 ; end ; 
if ((y2<=yi)&&(yi<=y1)) ;  a = xi ; b = b  ; end ;
if ((y1<=yi)&&(yi<=y2)) ;  a = a  ; b = xi  ; end ;
end ; a , b , ecart=abs (b-a) , yi 
xref = xref + 1 ;   end ; 
