O algoritmo Remez é uma rotina iterativa conhecida para aproximar uma função por um polinômio na norma minimax. Mas, como Nick Trefethen [1] diz sobre isso:
A maioria dessas [implementações] remonta há muitos anos e, de fato, a maioria delas não resolve o melhor problema geral de aproximação, como exposto acima, mas variantes envolvendo variáveis discretas ou filtragem digital. Pode-se encontrar alguns outros programas de computador em circulação, mas, no geral, parece que atualmente não existe um programa amplamente utilizado para calcular as melhores aproximações.
Pode-se calcular a solução minimax também aplicando otimização de mínimos quadrados ou convexa, por exemplo, usando Matlab e a caixa de ferramentas CVX gratuita aplicada à função Runge em [-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
A aproximação com os polinômios de Chebyshev possui uma norma minimax, 0.1090
enquanto essa abordagem aqui atinge um mínimo de 0.0654
, o mesmo valor que é calculado com o algoritmo Remez na chebfun
caixa de ferramentas Matlab .
Existe alguma vantagem em aplicar o algoritmo Remez mais complicado se você puder calcular a solução minimax de maneira mais rápida e precisa com um solucionador de otimização? Existem relatórios / artigos comparando essas duas abordagens em alguns problemas difíceis ou casos de teste?
-
[1] R. Pachon e LN Trefethen. Matemática Numérica do BIT (2008) vol. 46