En mathématiques, l’algorithme de Remez, du nom de son inventeur Eugène Yakovlevitch Remez, vise à construire la meilleure approximation polynomiale d'une fonction continue sur un intervalle borné, étant donné le degré maximal du polynôme.
Cet algorithme est le calcul pratique lié au théorème d'équi-oscillation de Tchebychev (cf. Théorie de l'approximation). Voir aussi les polynômes de Tchebychev.
Algorithme
Le but est de trouver le polynôme
de degré n qui approche au mieux une fonction continue f donnée sur un intervalle
, dans le sens où le maximum de la différence entre le polynôme et la fonction doit être minimal :
![{\displaystyle P_{n}={\textrm {arg}}\min \left(\sup _{a\leq x\leq b}|P_{n}(x)-f(x)|\right)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/62dcf20e8a3a3ba610d4ac876da1e7c1c4241c00)
Cela implique que la différence entre le polynôme et la fonction atteindra
extremums, de même amplitude et qui alterneront.
Notons le polynôme cherché.
Il y a donc
inconnues qui sont :
![{\displaystyle a_{0};a_{1};a_{2};a_{3};...;a_{n}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/dd6e5145503ed280dca7129c332913fce6e6f2cc)
Première étape :
Un départ possible est de choisir les zéros du polynôme de Tchebychev de degré
et de déterminer le polynôme
qui coïncide avec la fonction en ces points. Il faut faire une homothétie des zéros pour tenir compte des bornes de l'intervalle. Les valeurs à prendre en compte sont :
, pour ![{\displaystyle k\in \{1,\ldots ,n+1\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7dbcb27b2ac600fd947ea4d7ad230740bdd7817b)
Il faut donc résoudre :
pour ![{\displaystyle k\in \{1,\ldots ,n+1\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/7dbcb27b2ac600fd947ea4d7ad230740bdd7817b)
Explicitement, si on cherche les coefficients du polynôme
cela donne :
![{\displaystyle \forall k\in [\![1;n+1]\!],\,a_{0}+a_{1}\cdot z_{k}+a_{2}\cdot z_{k}^{2}+a_{3}\cdot z_{k}^{3}+...+a_{n}\cdot z_{k}^{n}=f(z_{k})}](https://wikimedia.org/api/rest_v1/media/math/render/svg/e9b4c14d32a17e7a4e7b14b898d13def374dc6f3)
Sous forme de matrice, cela donne :
![{\displaystyle {\begin{pmatrix}1&z_{1}&z_{1}^{2}&...&z_{1}^{n}\\1&z_{2}&z_{2}^{2}&...&z_{2}^{n}\\...&...&...&...&...\\1&z_{n+1}&z_{n+1}^{2}&...&z_{n+1}^{n}\\\end{pmatrix}}{\begin{pmatrix}a_{0}\\a_{1}\\...\\a_{n}\end{pmatrix}}={\begin{pmatrix}f(z_{1})\\f(z_{2})\\...\\f(z_{n+1})\\\end{pmatrix}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/88be9f6fbc7cac90700c78b735dc5ad862906e2f)
Première étape, meilleur départ :
Un meilleur départ est de choisir les extremums du polynôme de Tchebychev de degré
, bornes comprises.
![{\displaystyle x_{k}={\frac {a+b}{2}}+{\frac {b-a}{2}}\cdot \cos \left({\frac {(k-1)\pi }{n+1}}\right),\,\forall k\in \{1,\ldots ,n+2\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/094109417d6acbf80701ae82fec425c8e1b6b1ab)
Deuxième étape :
Une fois un premier polynôme approximant la fonction trouvé, chercher les n+2 extremums de la différence entre le polynôme et la fonction. En général, les deux bornes
et
font partie de ces extremums. Cela devrait donner
points
.
En général,
est le premier extremum, ensuite les autres extremums alternent entre "minima" et "maxima", jusqu'à
.
Troisième étape :
Déterminer le polynôme
de degré
qui satisfait :
![{\displaystyle P_{n}(x_{k})+(-1)^{k}\cdot e=f(x_{k}),\,\forall k\in \{1,\ldots ,n+2\}.}](https://wikimedia.org/api/rest_v1/media/math/render/svg/5dad6aa60b0178108a5c4b00783b947214a0ca14)
où e est la n+2e inconnue.
Si l'approximation trouvée n'est pas suffisamment bonne, retourner à l'étape 2. En général une itération suffit, la convergence est très rapide.
Sous forme de matrice, l'équation à résoudre est :
La valeur absolue
donne une bonne estimation de la différence maximale entre le polynôme et la fonction sur l'intervalle
donné.
Remarque
Une dernière légère amélioration serait d'écrire le polynôme sous la forme :
![{\displaystyle P_{n}(x)=c_{0}+c_{1}\cdot T_{1}(x)+c_{2}\cdot T_{2}(x)+c_{3}\cdot T_{3}(x)+...+c_{n}\cdot T_{n}(x)}](https://wikimedia.org/api/rest_v1/media/math/render/svg/d63a6565622c18594783e21818183966395c3672)
où
est le n-ème polynôme de Tchebychev.
Ensuite on évalue efficacement ce polynôme en
par
![{\displaystyle d_{n+1}=0;\quad d_{n}=c_{n};}](https://wikimedia.org/api/rest_v1/media/math/render/svg/4018fe60ad2033f54a1bd2e62ebdcd3c856f7096)
![{\displaystyle d_{j}=2\cdot x\cdot d_{j+1}-d_{j+2}+c_{j}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/0ce83f0c4eb320e25774fbc37c38c9ad525e5a66)
pour
![{\displaystyle P_{n}(x)=x\cdot d_{1}-d_{2}+c_{0}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/04634035f766d514d7aad80d9d02f67091814d5a)
Les coefficients
décroîtront habituellement rapidement.
Article connexe
Bibliographie
- J.-M. Muller, Elementary functions: Algorithms and Implementation. éd. Birkhäuser (1997, rééd. 2005), (ISBN 0-8176-4372-9), p. 41–47
- Numerical Recipes, The Art of Scientific Computing, Second Edition ou Third Edition, William H. Press, Saul A. Teukolsky, William T. Vetterling, Brian P. Flannery, éd. Cambridge university press, 1992 ou 2007. Chapitre 5, "Chebyshev Approximation" jusqu'à "Rational Chebyshev Approximation".
Liens externes
- (en) Eric W. Weisstein, « Remez Algorithm », sur MathWorld
- Approximation polynomiale de fonctions dans le langage SciLab, avec une implémentation de l'algorithme de Remez. C.f. la Série 4 et le corrigé qui suit.
Portail de l'informatique théorique