2ème année Séance de T.P. n◦ 2 (Cours électif : optimisation) Optimisation non-linéaire EXERCICE N◦ 1 (résolution de l’équation de Laplace) On souhaite utiliser différentes méthodes d’optimisation pour résoudre l’équation différentielle −u00 (x) = f (x) x ∈]0, 1[ u(0) = u(1) = 0. On se donne une subdivision de [0, 1] en N intervalles de longueur h = N 1+1 et on considère les points {xk }k∈J0,N +1K de l’intervalle [0, 1] définis par xk = kh. On cherche alors une solution approchée uN = (uk )k∈J0,N +1K telle que uk ' u(xk ) pour tout k ∈ J0, N + 1K, où les uk vérifient le schéma aux différences finies ( u k+1 − 2uk + uk−1 − = f (xk ), k ∈ J1, N K (1) h2 u0 = uN +1 = 0. 1. Réécriture sous la forme d’un problème d’optimisation. (a) Montrer que l’équation (1) peut se mettre sous la forme AN uN = fN , où AN et fN sont donnés par 2 −1 0 . . . 0 .. −1 2 −1 . . . . f (x1 ) 1 AN = 2 0 . . . . . . . . . 0 et fN = ... . h .. .. f (xN ) . . −1 2 −1 0 . . . 0 −1 2 (b) Montrer que résoudre (1) revient à minimiser la fonction JN définie par JN : RN −→ R u 7−→ JN (u) = 12 hAN u, uiRN − hfN , uiRN . Rappeler les expressions de ∇JN et Hess JN . Dans toute la suite, on choisira f constante, telle que h2 fN = (1, . . . , 1)> . 2. Première méthode : l’algorithme de Newton-Raphson. On cherche à appliquer l’algorithme de Newton-Raphson à ∇JN . On rappelle la méthode de Newton multi-dimensionnelle pour la résolution de l’équation F(x) = 0, avec F : RN → RN . On se reportera au cours pour davantage de précisions sur les hypothèses, la mise en œuvre et la convergence de cette méthode. 1 on se donne ε > 0 et mmax ∈ N∗ poser k = 0 choisir x(0) dans un voisinage de x∗ (m+1) tant que (x − x(m) RN ≥ ε) et (m ≤ mmax ) faire resoudre le systeme lineaire [DF(x(m) )]δ (m) = F(x(m) ) poser x(m+1) = x(m) − δ (m) poser m = m + 1 fin tant que On notera um , la suite des itérés obtenus par la méthode de Newton-Raphson. (a) Montrer que le calcul des um est donné formellement par m um+1 = um − A−1 N (AN u − fN ). Expliquer pourquoi il est cependant déconseillé d’utiliser cette formule en vue de la résolution numérique du problème. (b) Ecrire une fonction newton.m qui prend en argument AN , f N , un point de départ u0 et un test d’arrêt (ε, mmax ), et qui renvoie le vecteur uN qui minimise JN ainsi que le nombre d’itérations effectuées. (c) Créer un script scriptTP2_newton.m et tester la fonction newton.m pour ε = 10−12 et N = 2, 5, 20, 50. Afficher à l’aide de la fonction fprintf le nombre d’itérations ainsi que le temps de calcul pour chaque N . Tracer sur une même figure les solutions approchées uN , ainsi que la solution exacte de (1). 3. Deuxième méthode : le gradient conjugué. On notera um , la suite des itérés obtenus par la méthode du gradient conjugué. On rappelle l’algorithme du gradient conjugué pour la minimisation de x 7→ 21 hAx, xiRN − ++ (R) et b ∈ RN . hb, xiRN avec A ∈ SN on se donne ε > 0 et mmax ∈ N∗ . poser k = 0 (0) (0) (0) ; choisir x(0) et poser r(0) (m+1) = AN x − b et dmax= −r (m) −x ≥ ε) et (m ≤ m ) faire tant que ( x RN hr(m) ,d(m) i x(m+1) = x(m) + ρm d(m) , avec ρm = − hAd(m) ,d(m)Ri N RN poser r(m+1) = Ax(m+1) − b poser d(m+1) = −r(m+1) + βm d(m) avec βm = kr(m+1) k2 N R kr(m) k2 N R poser m = m + 1 fin tant que Écrire un programme gradConj.m résolvant à l’aide de l’algorithme de gradient conjugué le système AN uN = fN . −→ L’entier N sera placé dans les arguments d’entrée du programme, de même que le point permettant d’initialiser l’algorithme et le second membre du système à résoudre. −→ On testera le programme pour différentes valeurs de N , en allant au maximum jusqu’à N = 1000. 2 −→ On utilisera un double critère pour stopper l’algorithme : un critère sur le nombre maximal d’itération et un autre critère sur la norme du résidu. On notera à chaque fois le nombre d’itérations nécessaires pour atteindre la solution. −→ On pourra comparer la solution trouvée par ce programme avec la solution réelle de ce système calculée par Matlab. 4. Troisième méthode : la méthode du gradient conjugué préconditionné. Cette méthode sert à réduire le nombre d’itérations de l’algorithme. L’idée de cette méthode est basée sur la remarque suivante : si M est une matrice inversible, alors, la solution du système AN uN = fN est la solution du système M −1 AN uN = M −1 fN . Des difficultés numériques peuvent survenir si le conditionnement de la matrice AN est mauvais. On va donc choisir M pour que le conditionnement de M −1 AN soit meilleur que le conditionnement de AN , et pour que l’inverse de M soit aisée à calculer. (a) Expliquer brièvement le principe de factorisation de Cholesky. (b) AN étant une matrice creuse, on note RI, la factorisée incomplète de Cholesky de AN , et on pose M = t RI × RI. Vérifier que le conditionnement de la matrice M −1 AN est meilleur que celui de AN et que l’inverse de M se calcule aisément. Fonction Matlab utile : inv, cholinc(avec l’option 0 00 ). (c) Nouveau système à résoudre. Une difficulté de cette méthode réside dans le fait que la matrice M −1 AN n’est a priori pas symétrique. Pour contourner cette difficulté, justifier f := t RI −1 AN RI −1 sont semblables. Que peut-on dire que les matrices M −1 AN et M du conditionnement de ces matrices ? En déduire qu’il est pertinent de résoudre le système fyN = t RI −1 fN M avec yN = RIuN . (d) En utilisant les remarques précédentes, améliorer le programme précédent pour calculer la solution du système AN uN = fN . Le nouveau programme s’appellera gradConjPre.m. On tiendra compte des remarques faites pour la méthode du gradient conjugué sans préconditionnement. (e) Comparaison des deux méthodes. Compléter les deux programmes précédents (gradient conjugué et gradient conjugué préconditionné) afin de tracer, à chaque appel des programmes le résidu logarithmique en fonction du nombre d’itérations. Conclure. 5. Autres exemples. En réutilisant les approches précédentes, déterminer une solution approchée du problème −u00 (x) + xu(x) = sin x x ∈]0, 1[ u(0) = u(1) = 0. EXERCICE N◦ 2 (distance d’un point à un plan) Dans cet exercice, on cherche à déterminer numériquement la plus courte distance entre un point x0 ∈ Rn et un hyperplan (H) d’équation Ax = b, où les lignes de la matrice A sont linéairement indépendantes et b, un vecteur colonne de taille n. Ce problème peut s’écrire comme un problème de programmation quadratique : inf Ax=b 1 (x − x0 )> (x − x0 ). 2 1. Étude théorique. 3 (a) Montrer que le multiplicateur de Lagrange, à l’optimum est : λ∗ = −(AA> )−1 (b − Ax0 ). (b) Montrer que la solution est x∗ = x0 + A> (AA> )−1 (b − Ax0 ). (c) Montrer que, dans le cas où A est un vecteur ligne, la plus petite distance entre x0 et l’hyperplan vaut |b − Ax0 | d(x0 , H) = . kAk On précisera les notations utilisées dans cette formule. 2. Étude numérique. Faites-vous confirmer les résultats précédents à l’aide d’une étude numérique. On pourra par exemple utiliser l’algorithme d’Uzawa. 4