Алгоритм Ремеза - это хорошо известная итерационная процедура для приближения функции полиномом в минимаксной норме. Но, как говорит Ник Трефетен [1]:
Большинство из этих [реализаций] уходят в прошлое на многие годы, и на самом деле, большинство из них не решают общую проблему наилучшего приближения, как изложено выше, а представляют собой варианты с дискретными переменными или цифровой фильтрацией. Можно найти несколько других компьютерных программ в обращении, но в целом, кажется, что в настоящее время нет широко используемой программы для вычисления наилучших приближений.
Минимаксное решение можно вычислить также, применяя метод наименьших квадратов или выпуклую оптимизацию, например, используя Matlab и бесплатный набор инструментов CVX, примененный к функции Рунге в [-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
, того же значения, которое вычисляется с помощью алгоритма Ремеза в chebfun
наборе инструментов Matlab .
Есть ли преимущество в применении более сложного алгоритма Ремеза, если вы можете быстрее и точнее вычислить минимаксное решение с помощью решателя оптимизации? Существуют ли какие-либо отчеты / статьи, сравнивающие эти два подхода по некоторым сложным проблемам или контрольным случаям?
-
[1] Р. Пачон и Л. Н. Трефетен. БИТ Численная математика (2008) Том. 46.