L'algoritmo di Remez è una routine iterativa ben nota per approssimare una funzione con un polinomio nella norma minimax. Ma, come dice Nick Trefethen [1] al riguardo:
La maggior parte di queste [implementazioni] risale a molti anni fa e, di fatto, la maggior parte di esse non risolve il problema generale di approssimazione migliore come esposto sopra, ma varianti che coinvolgono variabili discrete o filtri digitali. Si possono trovare alcuni altri programmi per computer in circolazione, ma nel complesso sembra che al momento non ci siano programmi ampiamente utilizzati per calcolare le migliori approssimazioni.
Si può calcolare la soluzione minimax anche applicando l'ottimizzazione dei minimi quadrati o convessi, ad esempio usando Matlab e il toolbox CVX gratuito applicato alla funzione Runge su [-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'approssimazione con i polinomi di Chebyshev ha una norma minimax 0.1090
mentre questo approccio qui raggiunge un minimo di 0.0654
, lo stesso valore che viene calcolato con l'algoritmo Remez nella chebfun
casella degli strumenti Matlab .
Esistono dei vantaggi nell'applicazione dell'algoritmo Remez più complicato se è possibile calcolare la soluzione minimax in modo più rapido e preciso con un risolutore di ottimizzazione? Ci sono rapporti / articoli che confrontano questi due approcci su alcuni problemi difficili o casi di test?
-
[1] R. Pachon e LN Trefethen. BIT Numerical Mathematics (2008) Vol. 46.