Алгоритм Remez - це добре відома ітеративна програма для наближення функції поліномом у нормі minimax. Але, як про це говорить Нік Трефефен [1]:
Більшість із цих [реалізацій] проходять багато років назад, і фактично більшість з них не вирішує загальну проблему найкращого наближення, поставлену вище, але варіанти, що передбачають дискретні змінні чи цифрову фільтрацію. В обігу можна знайти декілька інших комп’ютерних програм, але в цілому, здається, що зараз немає широко використовуваної програми для обчислення найкращих наближень.
Можна розрахувати рішення minimax також, застосувавши найменші квадрати або опуклу оптимізацію, наприклад, використовуючи Matlab та вільний інструментарій CVX, застосований до функції Runge на [-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
Наближення до поліномів Чебишева має 0.1090
мінімальну норму, хоча цей підхід тут досягає мінімуму 0.0654
, такого ж значення, яке обчислюється алгоритмом Remez в chebfun
панелі інструментів Matlab .
Чи є якась перевага у застосуванні складнішого алгоритму Remez, якщо ви можете обчислити рішення minimax швидше і точніше за допомогою оптимізатора? Чи є звіти / статті, що порівнюють ці два підходи щодо деяких складних проблем або тестових випадків?
-
[1] Р. Пашон та Л. Н. Трефетен. Числова математика BIT (2008) Vol. 46.