Introduction à l’Analyse Numérique Algorithme de Remez Christophe Troestler « If your comp-sci course is easy then you’re either a genius or you’re wasting your money. The odds on that are not in your favour. » Chris Cummer, Two Thoughts on Computer Science Courses Question 1 (Résolution de systèmes linéaires). Implémentez une fonction/méthode gauss : matrice → vecteur → vecteur prenant comme arguments une matrice A et un vecteur b, telle que 1 gauss A b retourne le vecteur x solution du système linéaire Ax = b. Pour calculer x, on utilisera la méthode de Gauss vue au cours. La non-inversibilité de A sera signalée par une exception. Le choix des structures pour matrice et vecteur devra être motivé (en tenant compte de la cohérence avec l’utilisation de cette routine dans les questions ci-dessous). Question 2 (Golden search). Le but de cette question est d’implémenter une fonction/méthode argmin, prenant comme arguments une fonction continue f : R → R et deux réels a et b (et un argument optionnel ε > 0 dont nous parlerons plus tard), telle que argmin f a b retourne un point x de minimum (local) de la fonction f sur l’intervalle 2 [a, b]. Le principe qu’on va employer est le suivant. Tout d’abord on recherche un point c ∈ ]a, b[ tel que f (c) 6 f (a) et f (c) 6 f (b) (1) (si aucun c ne peut être trouvé le minimum se situe au bord et est donc facile à déterminer). (a) Prouvez que sous l’hypothèse d’existence d’un c vérifiant (1), il existe un point x∗ ∈ ]a, b[ tel que ∀x ∈ [a, b], f (x∗ ) 6 f (x). Posons a0 := a, b0 := b et c0 := c. Nous allons estimer un point x∗ tel que ∀x ∈ [a, b], f (x∗ ) 6 f (x) en construisant par récurrence des suites (an )n∈N , (bn )n∈N et (cn )n∈N vérifiant l’invariant cn ∈ ]an , bn [ ∧ f (cn ) 6 min f (an ), f (bn ) (2) quel que soit n. Voici comment. Supposons que nous connaissions an , bn et cn . Prenons un point ξ ∈ ]an , bn [ \ {cn }. Sans perte de généralité on peut supposer que ξ ∈ ]cn , bn [ (le cas où ξ ∈ ]an , cn [ se traite de manière similaire). De deux choses l’une : si f (ξ ) 6 f (cn ), alors on pose an+1 := cn , bn+1 := bn , et cn+1 := ξ ; si f (ξ ) > f (cn ), alors on pose an+1 := an , bn+1 := ξ , et cn+1 := cn . 1. Nous employons ici une notation non parenthèsée.Dans un langage tel que Java, on écrirait gauss(A, b). 2. Tous les intervalles sont non-orientés, i.e. [a, b] = ta + (1 − t)b 0 6 t 6 1 . 1/5 Algorithme de Remez Introduction à l’Analyse Numérique f an f cn ξ bn Cas f (ξ ) 6 f (cn ) an cn ξ bn Cas f (ξ ) > f (cn ) (b) Décrivez explicitement le choix de an+1 , bn+1 et cn+1 dans le cas où ξ ∈ ]an , cn [. (c) Prouvez 3 que l’invariant (2) est effectivement préservé par les choix faits ci-dessus. Pour compléter la description de l’algorithme, il faut dire comment choisir ξ . Comme pour la bissection, on veut que ce choix assure la convergence de l’algorithme de la manière la plus efficace possible. Pour ce faire on va prendre ξ dans le plus grand intervalle parmi les deux ]an , cn [ et ]cn , bn [ et de manière à ce que l’intervalle [an+1 , bn+1 ] soit le plus petit possible quel que soit le choix effectué en fonction de la valeur f (ξ ). Plus précisément si, comme sur les graphiques cidessus, c’est ]cn , bn [ qui est le plus grand, le principe ci-dessus demande 4 de choisir ξ de manière à ce que √ |ξ − an | 1 + 5 = (3) |ξ − bn | 2 √ (le nombre (1 + 5)/2 est appelée « nombre d’or », ce qui explique le nom de cet algorithme de recherche de minimum). (d) Montrez que (3) détermine ξ comme combinaison convexe (1 − λ )an + λ bn pour un certain λ ∈ ]0, 1[. (Il est bien entendu nécessaire de détailler et d’expliquer vos calculs.) (e) Donnez ξ comme combinaison convexe de an et bn dans le cas où c’est l’intervalle ]an , cn [ qui est le plus grand. Finalement, il reste à donner un critère de terminaison. Puisque nous savons qu’un point minimum x∗ existe dans l’intervalle ]an , bn [, l’erreur absolue commise sur x∗ en l’approchant par un point quelconque de l’intervalle est au plus |an − bn |. Bien entendu, il est en général meilleur de considérer l’erreur relative, c’est pourquoi nous prendrons comme critère d’arrêt |an − bn | 6 ε |an | + |bn | (4) où ε > 0 doit optionnellement pouvoir être choisi par l’utilisateur (bien sûr la valeur utilisée par défaut doit être raisonnable). R EMARQUE : Comme d’habitude, on veillera à ce que l’implémentation ne fasse pas de tests inutiles, qu’elle ne réévalue pas la fonction deux fois au même point,... Question 3 (Algorithme de Remez). Nous allons exposer ici un algorithme qui permet d’estimer le polynôme d’un degré donné qui approche uniformément le mieux une fonction. Cet algorithme a diverses applications, par exemple dans les filtres digitaux. 3. On attend une preuve plus détaillée que du simple « blabla ». 4. Nous ne faisons pas ici les détails de la preuve. 2/5 Algorithme de Remez Introduction à l’Analyse Numérique Commençons par rappeler le problème. Soit f : [a, b] → R une fonction continue définie sur un intervalle borné [a, b] et n ∈ N. On cherche p∗ ∈ Pn tel que | f − p∗ |∞ = inf | f − p|∞ p ∈ Pn f p∗ où Pn désigne l’ensemble des polynômes de degré au plus n et |–|∞ est la norme du sup sur C ([a, b]; R). Un tel p∗ existe toujours, est unique, et est appelé le meilleur approximant de f . Une caractérisation de ce polynôme est donné par le théorème d’équi-oscillations de Chebyshev : Théorème (Chebyshev, 1854) Un polynôme p∗ ∈ Pn est le meilleur approximant de f sur [a, b] si et seulement s’il existe n+2 points a 6 x0 < x1 < · · · < xn+1 6 b tels que ∀i = 0, . . . , n + 1, f (xi ) − p∗ (xi ) = (−1)i E avec |E| = | f − p∗ |∞ (5) L’équation (5) peut se lire en disant que l’erreur maxa b imale | f − p∗ |∞ commise en remplaçant f par p∗ est atteinte en n + 2 points de manière oscillante. Ceci est représenté à la figure 1 où les points (xi , f (xi )) sont F IGURE 1 – Meilleure approximation tracés en rouge. Ce résultat forme la base de l’algorithme pour estimer p∗ que nous allons à présent présenter. L’idée est la suivante : si les n + 2 points xi étaient connus, il suffirait de résoudre le système linéaire de n + 2 équations p∗ (xi ) + (−1)i E = f (xi ), 0 6 i 6 n + 1, (6) pour trouver p∗ et E. (a) Prouvez que, sous l’hypothèse qu’au moins n + 1 des n + 2 points xi sont distincts, le système linéaire (6) possède une et une seule solution (p∗ , E) ∈ Pn × R. I NDICATION (à détailler si vous l’utilisez) : Montrez que le noyau de l’application linéaire associée au système est réduit à {0} de manière similaire à ce qui a été fait pour l’interpolation. Le théorème des valeurs intermédiaires vous sera utile. Bien entendu, nous ne connaissons pas a priori les points xi . Nous allons donc chercher à les estimer par approximations successives, sachant qu’ils sont des minimums ou maximums locaux de l’erreur x 7→ f (x) − p∗ (x). Pour initialiser la méthode de Remez, on prend le polynôme p0 ∈ Pn qui interpole f sur les n + 1 nœuds de Chebyshev de l’intervalle [a, b] (voir la figure 2). Comme l’erreur commise par p0 s’annule en les n + 1 points d’interpolation (points bleus sur la figure 3), on peut trouver n + 2 0 points x00 < x10 < · · · < xn+1 qui sont des minimums ou des maximums de l’erreur e0 := f − p0 sur 3/5 Algorithme de Remez Introduction à l’Analyse Numérique f p0 e0 = f − p0 a a b b F IGURE 2 – Interpolation de Chebyshev F IGURE 3 – Erreur d’interpolation chacun des intervalles délimités par ces points d’interpolation (les points (xi0 , f (xi0 )), 0 6 i 6 n + 1 sont représentés en rouge sur la figure 3). Maintenant que nous savons comment trouver le polynôme initial p0 et les points associés 0 0 , nous pouvons passer au cœur de l’algorithme qui va les raffiner de manière x0 , x10 , . . . , xn+1 itérative. Supposons que nous disposions de pk et des n + 2 points k k x0 , x1k , . . . , xn+1 qui maximisent localement l’erreur f − pk . On k+1 k+1 calcule pk+1 et x0 , x1k+1 , . . . , xn+1 de la manière suivante : ek+1 = f − pk+1 a On résoud le système linéaire pk+1 (xik ) + (−1)i Ek+1 = f (xik ), 0 6 i 6 n + 1, b pour déterminer pk+1 et Ek+1 . (La fonction ek+1 := f − pk+1 est représentée à la figure 4 où les losanges bleus marquent les F IGURE 4 – Erreur ek+1 points xik , ek+1 (xik ) .) Si pk+1 est suffisamment proche de pk , on arrête la recherche et retourne pk+1 . Sinon ek+1 := f − pk+1 change n + 2 fois de signe et, dans chacun des n + 2 intervalles délimités par n + 1 racines de ek+1 dans ]a, b[, on recherche en alternance un minimum k+1 ou un maximum de ek+1 . Ceci donne n + 2 points que nous appellerons x0k+1 , x1k+1 , . . . , xn+1 . k+1 k+1 (Les points (xi , ek+1 (xi )) sont représentés en rouge sur la figure 4.) (b) Donnez une définition précise de « pk+1 est suffisamment proche de pk » qui est appropriée pour le problème. Justifiez votre choix et discutez de son implémentation numérique. (c) Expliquez et justifiez la stratégie que vous allez employer pour décider si c’est un minimum ou un maximum local que vous devez rechercher sur chacun des sous-intervalles délimités par les racines. (d) Programmez une fonction/méthode remez qui prend comme arguments un entier n, une fonction f : R → R, deux nombres réels a et b, et qui retourne p∗ ∈ Pn , une approximation du polynôme de meilleure approximation de f sur [a, b], ainsi qu’un tableau contenant une approximation des n + 2 points x0 , x1 , . . . , xn+1 qui témoignent de l’optimalité de p∗ et dont l’existence est affirmée par le théorème de Chebyshev. (e) Tracez le polynôme retourné par 5 remez 2 exp (−2.) 2. et imprimez les valeurs des 5. En Java, l’expression devient, par exemple, remez(2, new fun_exp, −2., 2.). 4/5 Algorithme de Remez Introduction à l’Analyse Numérique points x0 , x1 , . . . , xn+1 . Références [1] Remez, E. Ya., « Sur le calcul effectif des polynômes d’approximation de Tschebyscheff », C. P. Paris, 337–340, 1934. 5/5