Fonction Rosenbrog. programmes matlab et fortran gradient et gradient conjugué .pdf



Nom original: Fonction Rosenbrog. programmes matlab et fortran gradient et gradient conjugué.pdf

Ce document au format PDF 1.4 a été généré par TeX / pdfTeX-1.11a, et a été envoyé sur fichier-pdf.fr le 25/05/2016 à 23:07, depuis l'adresse IP 105.104.x.x. La présente page de téléchargement du fichier a été vue 1482 fois.
Taille du document: 272 Ko (7 pages).
Confidentialité: fichier public




Télécharger le fichier (PDF)










Aperçu du document


FONCTION BANANA DE ROSENBROG. GRADIENT ET
GRADIENT CONJUGUE. PAS D’ARMIJO. PROGRAMMES
MATLAB ET FORTRAN

1

La fonction de Rosenbrock

Dé…nition
On appelle fonction de Rozenbrock, la fonction f : Rn ! R dé…nie par
n
i
X1 h
2
2
f (x1 ; x2 ; :::; xn ) =
100 xi+1 x2i + (xi 1)
i=1

Si n = 2; on trouve
f (x; y)

rf (x; y) =

2

x2 )2 + (x 1)
200x2 y + x2 2x + 100y 2 + 1

= 100(y
= 100x4
2x

x2

400x y

2 = 400x3
200y 200x2

400xy + 2x

2

80000
60000

z

40000

-4

-4
20000
-2

-2
0
0 0
2

y

x

2

4

2

4

Méthode du Gradient. Pas D’Armijo. Programme en Matlab pour la fonction de Rosenbrog

% Méthode du Gradient. Pas D’Armijo.
1

%Programme en Matlab pour la fonction de Rosenbrog
function result=Optim(mth)
time=cputime ;
%****initialisation des varaibles***
epsilon = 10^-6;
X(1)= -1.2;
X(2)=1.0 ;
gradient(1)= 1.0;
gradient(2)= 1.0;
% Donner la valeur initiale du pas d’Armijo
alpha= 1.0
% Donner la valeur du parametre beta qui
%intervient dans l’inégalité % d’Armijo. beta
%est positif et beta est inférieur à 1
beta=0.9 ;
k=0;
% variable logique true ou false
‡ag=true;
while ‡ag
k=k+1
y=fun(X)
gradient=grd(X)
normGradient=gradient*gradient’
f0= y ;
f1=fun(X-alpha*gradient) ;
% Calcul du pas d’Armijo. On démarre par un
% pas initial alpha=1.0. S’il est accéptable, on le
% multiplie par 2, et ainsi de suite...
alpha= 1.0 ;
if(f1<=f0-alpha*beta*(gradient*gradient’))
while(f1<=f0-alpha*beta*(gradient*gradient’))
alpha=alpha*2.0;
f1=fun(X-alpha*gradient) ;
end
% A cette étape le pas ne veri…e plus
%l’inégalité d’Armijo. On prend
% donc le pas obtenu à l’étape juste avant qui
%était accéptable. On le divise donc par 2. C’est
%le plus grand pas obtenu véri…ant
% la condition d’Armijo
alpha=alpha/2.0;
else
% Si on arrive à cette étape, celà veut dire
%que alpha initial ne
% véri…e pas la condition d’Armijo, c’est à
%dire qu’il est trop grand.
2

% On le divise par 2. Si le nouveau pas véri…e
%la condition d’Armijo,
% on s’arrete, sinon on divise encore par 2, et %ainsi de suite.
while(f1>f0-alpha*beta*(gradient*gradient’))
alpha=alpha/2.0;
f1=fun(X-alpha*gradient) ;
end
end
alpha=alpha
% Calcul de X(k+1) = X(k)+alpha(k)d(k)
%=X(k)-alpha(k)*gradf(X(k))
X=X-alpha*gradient ;
if epsilon>normGradient
‡ag=false;
end
end
time = cputime - time
end
% Rosenbrock function
function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
end
% Rosenbrock Gradient
function g=grd(x)
g(1)=-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));
g(2)= 200*(x(2)-x(1)^2);
end

3

Méthode du Gradient Conjugué. Version Fletcher
Reeves. Pas D’Armijo. Programme en Matlab pour la fonction de Rosenbrog

%Méthode du Gradient Conjugué. Pas D’Armijo. Programme en
Matlab pour la fonction de Rosenbrog
function result=GradientConjugue(mth)
time=cputime ;
%****initialisation des varaibles***
% epsilon est la valeur qui sert à arreter l’algorithme.
%L’Algorithme s’arrête lorsque la norme
%du gradient est inférieureà epsilon
%Epsilon est le critère d’arrêt.
%On prend en général epsilon=0.000001
%ou une valeur plus petite.

3

epsilon = 10^-6;
% On donne le vecteur initial X(1), X(2).
%L’Algorithme démarre de ce point
X(1)= -1.2;
X(2)=1.0 ;
gradient(1)= -1.2;
gradient(2)= 1.0;
% On donne le pas initial d’Armijo alpha=1.0.
% S’il véri…e la condition d’Armijo,
%on essaye de l’aggrandir en le
%multipliant par 2. Sinon on le divise par 2
alpha= 1.0
% On donne la constante beta qui
%intervient dans la règle d’Armijo
beta=0.9 ;
k=0;
y=fun(X) ;
gradient=grd(X) ;
g0=grd(X) ;
d=-gradient ;
normGradient=gradient*gradient’
while normGradient > epsilon
k=k+1
% On donne à présent le pas initial de
%la méthode d’Armijo: on démarre par alpha =1.0
alpha= 1.0 ;
f0=fun(X) ;
f1=fun(X+alpha*d) ;
%Calcul d’alpha à l’aide de la recherche d’armijo
if(f1<f0+alpha*beta*(g0*d’))
while(f1<f0+alpha*beta*(g0*d’))
alpha=alpha*2.0;
f1=fun(X+alpha*d) ;
end
else
while(f1>f0+alpha*beta*(g0*d’))
alpha=alpha/2.0;
f1=fun(X+alpha*d) ;
end
end
alpha=alpha
% …n du calculcul du pas d’Armijo alpha
% On calcule le vecteur x(k+1)
% successeur du vecteur x(k)
X=X+alpha*d ;
% On calcule le gradient au point x(k+1)
4

g1=grd(X) ;
% On calcule la constante de Flecher Reeves beta(k)
betaFR= ((norm(g1)^2)/(norm(g0)^2))
% On calcule la nouvelle direction d(k+1)
d=-g1+betaFR*d ;
g0=g1 ;
normGradient= norm(g0)
end
time = cputime - time
end
% Rosenbrog function
function f=fun(x)
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
end
%Rosenbrog Gradient
function g=grd(x)
g(1)=-400*x(1)*(x(2)-x(1)^2)-2*(1-x(1));
g(2)= 200*(x(2)-x(1)^2);
end

4

Méthode du Gradient. Pas D’Armijo. Programme en Fortran90 pour la fonction de Rosenbrog

! Le but de ce programme est de calculer le minimum de la fonction de Rosenbrog
ou bien un point stationnaire.
! Programme Steepest. Fonction Rosenbrog. Recherche Armijo-n quelconque
program steepest
implicit none
integer, parameter::n=500
double precision yc(n),pk(n)
double precision eps,s,be,f1,f0,mu,f2
integer k,l,m,j
double precision td,tf,tm
call cpu_time(td)
k=0;m=0
!print*,’enter the initial point’
do j=1,n
yc(j)=1.5
enddo
!print*,’enter eps’
!read*,eps

5

be=0.5;mu=0.2
do
if(sqrt(dot_product(df(yc),df(yc)))<=0.000001)exit
print*,’f(xk)=’,f(yc)
print*,’grad(f(xk))=’,sqrt(dot_product(df(yc),df(yc)))
print*,’k=’,k
pk=-df(yc)
f0=f(yc)
!recherche d’Armijo
l=1;s=1
f1=f(yc+s*pk)
if(f1<=f0+mu*s*dot_product(df(yc),pk))then
s=s/be
do
f2=f(yc+s*pk)
if(f2>f0+mu*s*dot_product(df(yc),pk))exit
s=s/be
f1=f2;l=l+1
enddo
s=s*be
yc=yc+s*pk
k=k+1
!print*,s
else
s=s*be
do
f1=f(yc+s*pk)
if(f1<=f0+mu*s*dot_product(df(yc),pk))then
yc=yc+s*pk
k=k+1
!print*,s
exit
endif
s=s*be
l=l+1
enddo
endif
m=m+l+1
f0=f1
enddo
print*,’LA SOLUTION EST’
print ’(2e10.2)’,yc
print*,’LA VALEUR DE LA FONCTION EST’,f(yc)
print*,’LA NORME DU GRADIENT EST’,sqrt(dot_product(df(yc),df(yc)))
print*,’LE NOMBRE D IERATIONS EST’
6

print ’(i10)’,k
call cpu_time(tf)
tm=tf-td
print*,’temps mis’,tm
contains
function f(u)
double precision f
double precision,dimension(n) :: u
integer i
f=0
do i=1,n/2
f=f+((100*(u(2*i)-u(2*i-1)**2)**2)+((1-u(2*i-1))**2))
end do
end function
!— — — — — -Le gradient de la fonction de Rosenbrock
function df(u)
integer i
double precision,dimension(n) :: u,df
do i=1,n/2
df(2*i-1)=(400*u(2*i-1)*((u(2*i-1)**2)-u(2*i)))+((2*u(2*i-1))-2)
df(2*i)=200*(u(2*i)-(u(2*i-1)**2))
end do
end function
end program steepest

5

Résultats numériques et comparaisons entre
la méthode du gradient et la méthode du gradient conjugué pour la fonction de Rozenbrog

L’Algorithme s’arrête à l’itération k au point quand (xk ; yk ) quand krf (xk ; yk )k <
10 6
Méthode
Gradient
Gradient Conjugué

nombre d’itérations
1675 itérations
507 itérations

7

temps de calcul
2.137 secondes
0.87 secondes

krf (xk ; yk )k
9:14 10 7
8:35 10 7



Documents similaires


fonction rosenbrog programmes matlab et fortran gradient et gradient conjugue
gradient conjugue cas quadratique et non quadratique
14 problemes ouverts sur le gradient conjugue sujets de theses de doctorat
04277904
extraction cannabis medical juin 2014
convergence et vitesse convergence methode du gradient


Sur le même sujet..