Optimisation, algorithmique (MML1E31) (M1 Maths, 2016-2017)
Feuille de TD/TP n3:
Méthode du gradient conjugué
Exercice 1.
Le but de cet exercice est d’implémenter l’algorithme du gradient conjugué et de comparer
sa convergence avec celle du gradient à pas optimal.
1. Coder la fonction
function x = gradient_conjugue(A,b,x0,eps)
vue en cours. Ajouter une commande qui affiche à chaque itération la valeur de ket de
k∇f(x(k))k2=kAx(k)bk2. Limiter le nombre d’itérations à kmax = 1000.
2. Coder une deuxième fonction
function [Xk, FXk] = gradient_conjugue_h(A,b,x0,eps)
qui reprend les calculs de la fonction gradient_conjugue et conserve l’historique
de tous les points (x(k))et valeurs f(x(k)).
Afin de tester la fonction on va utiliser le problème suivant :
stacksize max
n = 100;
A = toeplitz([2, -1, zeros(1, n-2)])*(n+1)^2;
t = linspace(1/(n+1), 1-1/(n+1),n)’;
b = t.*(1-t).*exp(-t);
c= 0;
xstar = A\b;
x0 = ones(b)/40 + rand(b)/50;
eps = 10^(-4);
[Xk, FXk] = gradient_conjugue_h(A,b,x0,eps);
x = Xk(:,$);
norm(x-xstar)
Ce problème correspond à une discrétisation de type différence finie du problème de Poisson
suivant :
Trouver u∈ C2(]0,1[) telle que
u(t) = t(1 t)etet u(0) = u(1) = 0 (conditions de Dirichlet).
Ainsi, chaque point x(k)correspond aux valeurs d’une fonction udiscrétisée sur l’ensemble
1/(n+ 1),2/(n+ 1), . . . , n/(n+ 1). On peut donc afficher les courbes correspondant à ces
vecteurs. L’affichage de la solution est donné par
1
Yk = [zeros(1,size(Xk,2)); Xk; zeros(1,size(Xk,2))];
scf(1); clf;
plot2d([0;t;1], Yk(:,$), style=-1);
On peut également afficher toutes les courbes correspondant aux points intermédiaires x(k)(avec
une couleur aléatoire)
for k = 1:size(Yk,2)
plot2d([0;t;1], Yk(:,k),style=ceil(15*rand()));
sleep(100)
end
3. Tester ce problème et afficher les solutions correspondantes. Expliquer le rôle de la ligne
Yk = [zeros(1,size(Xk,2)); Xk; zeros(1,size(Xk,2))];
Vérifier que l’on a bien convergence en au plus nitérations et changeant la valeur de n.
On va maintenant comparer les performances de l’algorithme du gradient conjugué avec
celles du gradient à pas optimal appliqué à la fonctionnelle quadratique
f(x) = 1
2hAx, xi−hb, xi.
4. Ecrire une fonction
function [Xk, FXk] = gradient_pas_optimal_h(A,b,x0,eps)
qui applique la descente de gradient à pas optimal à la foncionnelle quadratique définie
ci-dessus et qui limite le nombre d’itérations à kmax = 103(on pourra partir du code
vu en TP1, ou encore du code la fonction du gradient conjugué dont la première itération
correspond à celle du gradient à pas optimal).
5. Tester cette fonction sur le problème de Poisson pour n= 100.
6. Sur un même graphe en échelle semi-logarithmique afficher la suite d’erreurs (e(k))k=
(kx(k)x?k)kpour le gradient conjugué et pour le gradient à pas optimal. Qu’observe-t-
on ? Quel algorithme est le plus performant ?
Exercice 2.
On a vu que l’algorithme du gradient conjugué permettait de résoudre de manière efficace
un système de la forme
Ax =b
dans le cas où Aest une matrice carrée définie positive.
Le but de l’exercice et de montrer que l’on peut également utiliser cet algorithme pour
résoudre le problème des moindres carrés. On considère donc Aune matrice rectangulaire de
Mm,n(R)et bRm, et on définit f:RnRpar
f(x) = 1
2kAx bk2.
1. Montrer que la fonction fest quadratique et préciser le matrice A0, le vecteur b0et la
constante c0pour cette fonctionnelle.
2. Sous quelle condition sur Al’algorithme du gradient conjugué converge-t-il pour cette
fonctionnelle f?
2
3. Le calcul de la matrice produit ATApeut être très coûteux si l’on est en grande dimension.
Justifier que l’on peut éviter de calculer cette matrice (on s’autorisera toutefois à faire ce
calcul dans la suite).
Dans toute la suite de l’exercice on supposera que Aest de rang n(et donc que m>n).
4. Dans le cas m=n, cette hypothèse revient à supposer AGLn(R)(c’est-à-dire Aest
une matrice inversible). Justifier que minimiser frevient à résoudre la système linéaire
Ax =b. On peut donc résoudre tous les systèmes linéaires carrés avec l’algorithme de
gradient conjugué.
Les problèmes de moindre carrés sont très souvent rencontrés en statistique et en traitement
du signal. Cette question propose un cadre pour tester l’algorithme du gradient conjugué pour
résoudre le problème des moindres carrés.
On se place sur l’intervalle [0,2π]. On suppose que l’on dispose de mmesures yiR
prise en chaque point ti∈ {0,2π
n,...,(n1)2π
n}. Ces mesures correspondent aux valeurs d’une
fonctions g(ti)et sont corrompus par un bruit gaussien i.i.d. de loi N(O, σ2).
yi=g(ti) + Wi,avec Wi' N (O, σ2)
On cherche alors à approcher la fonction gpar un polynôme trigonométrique de degré inférieur
ou égal à d
p(t) = a0+
d
X
k=1
akcos(kt) +
d
X
k=1
bksin(kt).
Pour déterminer les n= 2d+ 1 coefficients a0, a1, . . . , ad, b1, . . . , bdon résout le problème des
moindres carrés
min 1
2kAx bk2
avec
b=
y1
.
.
.
ym
Rm, x =
a0
a1
.
.
.
ad
b1
.
.
.
bd
, A =
1
.
.
.
1
CS
C= (Ci,k)16i6m,16k6n=cos(kti)
et
S= (Si,k)16i6m,16k6n=sin(kti)
Ce problème peut s’interpréter comme un maximum de vraisemblance (car le bruit est gaus-
sien).
5. Tester le script ci-dessous qui résout le problème des moindres carrés pour l’approxi-
mation de mesures bruités de la fonction g(t) = t(2πt)par un polynôme trigo-
nométrique. Vérifier que l’algorithme du gradient conjugué appliqué à la fonctionnelle
f(x) = 1
2kAx bk2résout convenablement le problème. Tester plusieurs valeurs pour
met pour l’écart-type σ. Qu’observe-t-on pour n=m? Est-ce toujours intéressant de
prendre mgrand ?
3
// Exemple : Interpolation par un polynôme trigonometrique
stacksize max;
m = 101; // m impaire
d = 10;
n=2*d+1; // n impaire
t = linspace(0, 2*%pi*(1-1/m), m)’; // lieu des mesures
A = zeros(m,n);
A(:,1) = ones(m,1);
for k=1:d
A(:,k+1) = cos(k*t);
A(:,k+1+d) = sin(k*t);
end
// simulation des mesures bruitees
sigma = 0.5;
b = t.*(2*%pi-t) + sigma*rand(m,1,’normal’);
// Resolution avec Scilab :
xstar = A\b;
// Resolution avec gradient conjugue :
// A FAIRE x =
tt = linspace(0,2*%pi,10^3)’;
N = length(tt);
D = zeros(N,n);
D(:,1) = ones(N,1);
for k=1:d
D(:,k+1) = cos(k*tt);
D(:,k+1+d) = sin(k*tt);
end
polstar = D*xstar;
pol = D*x;
// affichage
scf(1);clf()
plot2d(t,b,style=-1);
plot2d(tt,polstar,style=2);
plot2d(tt,pol,style=5);
6. Reprendre la même méthodologie avec des polynômes réels de degré inférieur ou égal à
m1(au plus mcoefficients à déterminer).
4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !