El algoritmo Remez es una rutina iterativa bien conocida para aproximar una función por un polinomio en la norma minimax. Pero, como Nick Trefethen [1] dice al respecto:
La mayoría de estas [implementaciones] se remontan a muchos años y, de hecho, la mayoría de ellas no resuelven el problema general de mejor aproximación como se plantea anteriormente, sino variantes que involucran variables discretas o filtrado digital. Uno puede encontrar algunos otros programas de computadora en circulación, pero en general, parece que actualmente no hay un programa ampliamente utilizado para calcular las mejores aproximaciones.
También se puede calcular la solución minimax mediante la aplicación de mínimos cuadrados u optimización convexa, por ejemplo, usando Matlab y la caja de herramientas CVX gratuita aplicada a la función Runge en [-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
La aproximación con los polinomios de Chebyshev tiene una norma 0.1090
mínima de 0.0654
, mientras que este enfoque aquí alcanza un mínimo del mismo valor que se calcula con el algoritmo Remez en la chebfun
caja de herramientas de Matlab .
¿Hay alguna ventaja en aplicar el algoritmo Remez más complicado si puede calcular la solución minimax más rápido y más preciso con un solucionador de optimización? ¿Hay informes / artículos que comparen estos dos enfoques sobre algunos problemas difíciles o casos de prueba?
-
[1] R. Pachon y LN Trefethen. BIT Numerical Mathematics (2008) vol. 46)