Vous êtes sur la page 1sur 7

Département E.E.

A – Filière Automatique
4ème année Automatique – Semestre 2
TRAVAUX PRATIQUE – Optimisation et Recherche Opérationnelle

TP 5
Méthode des gradient
conjugués

Réalisé par

Leulmi Mohammed Islam


E-mail : islamfcb.enpc@gmail.com

Encadré par

Pr. Samir Ladaci

Année universitaire 2018/2019


1. Analyse du problème :

Rappelons que la méthode de gradient à pas optimal consiste à


faire :
𝑢(𝑘+1) = 𝑢(𝑘) − 𝜌𝑘 𝛻𝐽(𝑢(𝑘) ) = 𝑚𝑖𝑛 𝐽 (𝑢(𝑘) − 𝜌𝑘 𝛻𝐽(𝑢(𝑘) ))
𝜌𝑘 ∈ℝ

Ceci est équivalent avec :

𝑢(𝑘+1) ∈ 𝑢(𝑘) + ℒ (𝛻𝐽(𝑢(𝑘) ))

Est l’élément qui minimise J sur

𝑢(𝑘) + ℒ (𝛻𝐽(𝑢(𝑘) ))

Dans la suite on va procéder de la manière suivante : On va


noter pour tout 𝑘 ∈ ℕ ∶

𝐺𝑘 = ℒ (𝛻𝐽(𝑢(0) ), 𝛻𝐽(𝑢(0) ), … 𝛻𝐽(𝑢(𝑘) )) ∁ ℝ𝑛

La méthode des gradients conjugués consiste à chercher


𝑢(𝑘+1) ∈ 𝑢(𝑘) + 𝐺𝑘
Tel que
𝐽(𝑢(𝑘+1) ) = min 𝐽(𝑣)
𝑣∈𝑢(𝑘)+𝐺𝑘

(En supposant qu’un tel minimum existe).


On minimise donc sur un espace plus “grand” que dans la
méthode de gradient à pas optimal. On s’attend alors à un
“meilleur” minimum.
Étant donné 𝐴 ∈ 𝑀𝑛 (ℝ) matrice symétrique et définie positive, ∈
ℝ𝑛 , 𝑐 ∈ ℝ , On veut réaliser un programme, basé sur la méthode
du gradient à pas optimal permettant de retrouver u* qui
minimise J.
2. Organigramme du programme :
3. Programme Réalisé :

clear all; close all; clc

% Entrée des données _____________________________________

A=input('Entrez la matrice A symétrique et définie


positive\n');
b=input('Entrez le vecteur colonne b\n');
c=input('Entrez le scalaire c\n');
u=input('entrez le vecteur colonne initial\n');
epsilon=input('Entrez epsilon\n');
itmax=input('Entrez le nobmre d''iteration maximal\n');

% Calcul des itérations _____________________________________

j=0; % intialisation de compteur d'itérations


d=A*u-b; % intialisation de
while norm(A*u-b)>epsilon && j<itmax %test d'arret
p=-1*(dot(A*u-b,d)/dot(A*d,d)); %calcule de rho
ug=u; %engerister la vleur précedente de u
u=u+p*d; % calcul de nouveau u
be=(norm(A*u-b)^2)/(norm(A*ug-b)^2); %calcul de beta
d=(A*u-b)+be*d; %calcul de d
j=j+1; %incérmentation de d
end

min=0.5*dot(A*u,u)-dot(b,u)+c; % calcul de minimum

%Affichage des resultats_____________________________________

disp('---------------------------------------------');
disp('Le vecteur u* qui minimise la fontion J est');
disp(u)
disp('La valeur de minimum de la fonction J est');
disp(min)
disp('Nombre d''tération :');
disp(j)
disp('---------------------------------------------');
4. Exemples d’exécution :

Exemple 1 :

2 1 1 0
𝐴=[ ] 𝑏=[ ] 𝑐=5 𝑢(0) = [ ] ℰ = 10−6
0 3 −1 0
Exemple 2 :

1 0 0 1 −10
𝐴 = [0 2 0] 𝑏 = [−1] 𝑐=5 𝑢(0) = [ 13 ] ℰ = 10−6
0 0 3 1 40
5. Remarque !
On remarque que la méthode des gradients conjuguées
converge toujours avec un nombre d’itération inférieure ou égale
à la dimension de l’espace du problème (comme on voit dans les
exemples d’exécution) ce qui est un grand avantage (moins
d’espace disque utilisé et moins temps de calcul) par rapport
aux autres méthodes abordées dans les TPs précédents

Vous aimerez peut-être aussi