Méthodes numériques : optimisation. L e semestre. Feuille de TD n o 2 : Méthodes de descente de gradient Éléments de correction.

Save this PDF as:
 WORD  PNG  TXT  JPG

Dimension: px
Commencer à balayer dès la page:

Download "Méthodes numériques : optimisation. L e semestre. Feuille de TD n o 2 : Méthodes de descente de gradient Éléments de correction."

Transcription

1 Méthodes numériques : optimisation. L e semestre. Feuille de TD n o : Méthodes de descente de gradient Éléments de correction. Retour en dimension un. (a) Sachant qu ici le gradient en x k est f (x k ), les deux méthodes peuvent être vues sous la forme x k+ = x k α k f (x k ). Pour la méthode de Newton : x k+ = x k f (x k ) on a α f (x k ) k =, et pour f (x) la méthode de la sécante x k+ = x k (x k x k )f (x k ) donc α x f (x k ) f (x k ) k = k x k f (x k ) f (x k ) (dans ce cas-là, il faut avoir deux points de départ x 0 x pour que cela fonctionne). Pour que la méthode soit vraiment une direction de descente, il faut que le pas soit positif, et que l on ait f(x k + α k f (x k )) < f(x k ). On peut essayer d aller plus loin. Pour que le pas soit positif, une condition suffisante est que la fonction soit (un peu plus que) strictement convexe : si f (x) > 0 pour tout x, alors le pas de la méthode de Newton est strictement positif. Si f est strictement croissante, alors le pas de la méthode de la sécante est strictement positif (dans le cas où on a toujours x k x k, ce que l on peut supposer vrai, car si à une étape on a x k = x k, c est qu on a eu f (x k ) = 0, et dans ce cas on arrête l algorithme, puisqu on a trouvé un point critique et qu on ne peut pas calculer le point suivant, le dénominateur étant nul). Pour que la deuxième condition soit satisfaite, il existe des conditions suffisantes, par exemple que x k soit suffisamment proche d un minimum x où f (x ) > 0, mais c est plus compliqué à montrer (on ne s attend pas à cette réponse). (b) On a x k+ = x k αx k + αx 3 k = x k ( α + αx k). Pour α ]0, [, on a si x 0 est suffisamment petit avec ρ = α + αx 0 <, que x k est décroissante (donc f(x k ) aussi) et que x k+ ρ x k donc la suite converge au moins linéairement vers 0. x Le taux de convergence linéaire est donné par lim k+ 0 k x k = lim 0 k α + αx k = α. La convergence est donc superlinéaire quand ce taux est nul, c est à dire pour α =. Essayons d obtenir son ordre : on a dans ce cas-là x k+ = x3 k, donc

2 x on obtient que lim k+ 0 k x k =. Comme la suite converge vers 0, on dit 0 3 que l ordre de convergence est 3. Bien remarquer que le fait que < n est aucunement important, on aurait pu avoir ça aurait très bien convenu. Pour le cas α = c est un peu plus subtil : on a x k+ = x k ( x k) de sorte que x k est décroissante dès que x 0 <. Elle converge donc vers une limite l. En passant à la limite dans la relation de récurrence, on obtient que l = l l. Comme l 0 on obtient que l {0, }. Comme on a démarré avec x 0 <, on est assuré de la convergence vers 0. x Par contre dans ce cas là, on a lim k+ k x k =, donc la convergence n est pas linéaire. Enfin dès que α >, on obtient x k+ > x k dès que x k est assez petit (par exemple dès que x k ε). Donc, à moins d être constante égale à 0 à partir d un certain rang, la suite x k ne converge pas vers 0 : par l absurde, il existerait un N 0 tel que pour tout k N 0, on ait x k ε, ce qui donnerait que la suite x k serait croissante à partir du rang N 0. On peut montrer (mais ce n est pas demandé) que le cas où la suite stationne à zéro n arrive presque jamais : si k 0 est le premier endroit où x k = 0, alors x k = ±, puis x α k n a qu au plus trois solutions (on résout une équation de degré 3), ainsi de suite, si on remontait en arrière, on n a qu un nombre fini de solutions pour x 0, et ce pour chaque k 0. L ensemble des points à partir duquel la suite peut stationner à 0 est donc dénombrable, et donc de mesure nulle. (c) * En supposant que 0 < x 0 <, la suite (x k) k N est décroissante d après la question (b) et on a x n+ x n = x n ( ( x n) ) = x n x n x 4 n ( x n) = x n ( x n). En faisant la somme de n = 0 à N, les termes se téléscopent, et en divisant par N, on obtient = ( ) N + a n, N Nx N x 0 où a n = x n. On peut donc montrer (théorème des moyennes de ( x n ) Cesáro) que Nx N, autrement dit que x N N, et ce quelque soit x 0 ], [\{0}. (d) On a f(x) =. Donc x +x k+ = x k α x k = x (+x k ( α ). k ) (+x k ) Si α ]0, ] et x 0 0, alors on a bien toujours < α <, et (+x k ) on obtient que la suite ( x k ) k N est décroissante, et converge donc vers une limite l telle que l = l α donc l = 0 ou α =, qui n a de (+l ) (+l ) solution non nulle que si α > (on obtient α = ( + l ), soit l = α ). Si on prend x 0 suffisamment petit, la suite x k converge donc vers 0. De même on montre que le taux de convergence est linéaire est alors α (la suite ne converge donc pas linéairement pour α = ). n=0

3 Si α >, lorsque x k 0 pour tout k, alors la suite ne peut pas converger vers 0 pour les mêmes raisons que dans la question (b). Encore une fois, pour k 0 fixé, on peut montrer (mais ce n est pas demandé) que pour une suite telle que x k0 = 0, il n y a qu un nombre fini de cas possibles pour x 0. Si l on prend α ]0, ] mais x 0 trop grand, le facteur ( α ) sera très (+x k ) proche de pour les premières itérations, et la décroissance de x k va être très lente initialement. On ne verra pas numériquement le taux de convergence linéaire de α, il faut attendre que x k soit suffisamment proche de 0 (et cela peut être long) pour pouvoir observer ce comportement. 3

4 Méthode de gradient à pas fixe, cas test en dimension. (a) On a f a (x 0, x ) = (+ax 0 +x ) ( ax0 x ). Les itérées sont données par la formule de récurrence X k+ = X k α f a (X k ). (b) Le code demandé pourrait ressembler à cela : a=3 3 # On définit à la main la fonction gradient de f_a. 4 def gradfa(x): 5 global compteur 6 compteur=compteur+ 7 d=(+a*x[0]**+x[]**)** 8 return /d*array([a,])*x 9 0 # On écrit la descente de gradient. # Noter que l on ne fait qu une seule évaluation de gradfa. def methodedescente(alpha,x0,eps): 3 X=X0 4 gx=gradfa(x0) 5 while norm(gx)>eps: 6 X=X-alpha*gX 7 gx=gradfa(x) 8 return X 9 0 X0=array([,]) # point de départ de la descente. alpha=0. epsilon=logspace(-,-,0) 3 listen=[] # va contenir le nombre d évaluations du gradient 4 # pour chaque précision epsilon. 5 for eps in epsilon: 6 compteur=0 7 methodedescente(alpha,x0,eps) 8 listen.append(compteur) 9 30 semilogy(listen,epsilon, -o ) 3 xlabel("compteur") 3 ylabel("tolérance") 33 show() ( ) a 0 (c) En 0, la hessienne de f a est. Sa plus grande valeur propre est donc 0 max(, a). On s attend donc à ce que la méthode converge, pour X 0 suffisamment proche de 0, lorsque α <. max(,a) On s attend à un taux de convergence inférieur à max( αl, αl ), 4

5 où l (resp. L) est la plus petite (resp. la plus grande) valeur propre de la hessienne au point de minimum. Donc ici, on s attend à un taux inférieur à max( α, aα ). Ce taux est minimisé pour α = soit ici α =. l+l +a (d) La méthode par différences finies à droite permet de faire moins d évaluations de fonctions : n + au lieu de n. La méthode des différences finies centrées par contre est plus précise : on peut obtenir une erreur de l ordre de η 3 au lieu de η pour les différences finies à droite (cf. TD), si η est la précision relative du calcul de f, et si on se donne des hypothèses de régularité raisonnables sur f. Dans le cas standard d une précision η de l ordre de 0 6, un bon choix de ε est donc de 0 8 (soit η) pour les différences finies à droite et 0 5 (soit η 3 ) pour les différences finies centrées. (e) Si r est le taux de convergence linéaire de la méthode, on s attend donc à un taux effectif de r n+ pour les différences finies à droite et r n pour les différences finies centrées. Étant donné que la précision sur le gradient est d ordre η (ou η 3 ), cela n a pas de sens de prendre pour critère d arrêt que la norme du gradient est plus petite qu une tolérance donnée si cette tolérance est elle-même plus petite que la précision de calcul du gradient. Pour que le calcul ait du sens, on doit donc prendre des tolérances plus grandes que η (ou η 3 ). 5

6 3 Problème d application : recherche de trajectoires fermées sur un billard. (a) Dessin (b) Si θ i [0, π] est l angle entre la tangente dirigée par T i et la trajectoire sortante en M i, on a cos θ i = T i U i. En effet comme T i et U i sont unitaires, on a T i U i = T i U i cos θ i. De même si ϕ i [0, π] est l angle entre la trajectoire arrivant en M i et la tangente, on a cos ϕ i = ( T i ) ( U i ). On a bien U i qui correspond au vecteur unitaire dirigé de M i à M i. On a donc que θ i = ϕ i si et seulement si leurs cosinus sont égaux, donc si T i U i = T i U i. (c) On utilise la compacité de [0, π] n pour montrer que L (continue) admet un maximum sur [0, π] n. Par périodicité ce point de maximum est inférieur à toute valeur de L sur R n, donc c est un maximum global. Si n est pair, on peut montrer que le maximum est atteint en faisant n allers-retours entre deux points du bord maximisant leur distance mutuelle. (d) Par l absurde, si on suppose que M i = M i +, on écrit L(t 0,..., t i, t i + ε, t i+,..., t n ) L(t 0,... t n = γ(t i+ ) γ(t i + ε) + γ(t i + ε) γ(t i ) γ(t i+ ) γ(t i ). Cette dernière quantité est positive (inégalité triangulaire), et elle n est nulle que si γ(t i + ε) est situé sur le segment [γ(t i ), γ(t i+ )]. Or pour ε suffisamment petit, γ(t i + ε) est sur le bord du convexe, et différent de γ(t i+ ) (lui-même égal à γ(t i ))) puisque γ (t i ) 0. De même, il est différent de γ(t i ). Comme le domaine est strictement convexe, alors les points du segment [γ(t i ), γ(t i+ )] autres que les extrémités ne sont pas sur le bord. Faire un dessin pour bien voir tout ça! Donc la quantité est strictement positive, en contradiction avec le fait qu on a un maximum local en (t 0,... t n ). On a donc toutes les normes dans l expression de L qui sont strictement positives au voisinage du maximum local, donc on peut dériver. On connait le gradient de la norme au carré : si Q(x) = x, x, alors Q(x) = x. Donc par composition avec la racine, on obtient le gradient de la norme en un point non nul : si N(x) = x = Q(x) alors N(x) = x. Par x composition, on obtient donc ti L = γ γ(t i ) γ(t i ) (t i ) γ(t i ) γ(t i ) γ γ(t i+ ) γ(t i ) (t i ) γ(t i+ ) γ(t i ) = γ (t i ) (U i U i ). Ceci est vrai pour i 0 et i n, mais pour ces cas particuliers on obtient la même chose avec les notations U n = U 0. En un point de maximum local, on obtient donc bien que γ (t i ) (U i U i ) = 0 pour tout i, donc on a bien affaire à une trajectoire de billard. 6