L'algorithme de Remez est une routine itérative bien connue pour approximer une fonction par un polynôme dans la norme minimax. Mais, comme le dit Nick Trefethen [1]:
La plupart de ces [implémentations] remontent à plusieurs années et en fait, la plupart d'entre elles ne résolvent pas le problème général de meilleure approximation tel que posé ci-dessus mais des variantes impliquant des variables discrètes ou un filtrage numérique. On peut trouver quelques autres programmes informatiques en circulation, mais dans l'ensemble, il semble qu'il n'y ait actuellement aucun programme largement utilisé pour calculer les meilleures approximations.
On peut également calculer la solution minimax en appliquant une optimisation par moindres carrés ou convexe, par exemple en utilisant Matlab et la boîte à outils CVX gratuite appliquée à la fonction Runge sur [-1, 1]:
m = 101; n = 11; % 101 points, polynomial of degree 10
xi = linspace(-1, 1, m); % equidistant points in [-1, 1]
ri = 1 ./ (1+(5*xi).^2); % Runge function
tic % p is the polynomial of degree (n-1)
cvx_begin % minimize the distance in all points
variable p(n);
minimize( max(abs(polyval(p, xi) - ri)) );
cvx_end
toc % 0.17 sec for Matlab, CVX and SeDuMi
L'approximation avec les polynômes de Chebyshev a une norme minimax 0.1090
tandis que cette approche atteint ici un minimum de 0.0654
, la même valeur qui est calculée avec l'algorithme Remez dans la chebfun
boîte à outils Matlab .
Y a-t-il un avantage à appliquer l'algorithme Remez plus compliqué si vous pouvez calculer la solution minimax plus rapidement et plus précisément avec un solveur d'optimisation? Existe-t-il des rapports / articles comparant ces deux approches sur des problèmes difficiles ou des cas de test?
-
[1] R. Pachon et LN Trefethen. BIT Numerical Mathematics (2008) Vol. 46.
la source
chebfun
doit itérer jusqu'à ce que le minimum soit atteint à la précision de la machine (dans un sens).chebfun/remez
, mais il existe des options similaires pour tous les types de solveurs d'optimisation. D'une certaine façon, on pourrait dire que Remez est une routine d'optimisation spécialisée pour une certaine tâche. Et la question est: les solveurs à usage général ont-ils rattrapé leur retard et il n'y a plus besoin d'un tel solveur spécialisé? Bien sûr, je peux me tromper.