Remezアルゴリズム


14

Remezアルゴリズムは、ミニマックスノルムの多項式で関数を近似するよく知られた反復ルーチンです。しかし、Nick Trefethen [1]がそれについて言っているように:

これらの[実装]のほとんどは何年も前に遡り、実際、それらのほとんどは上記の一般的な最良近似問題を解決するのではなく、離散変数またはデジタルフィルタリングを含むバリアントを解決します。流通している他のいくつかのコンピュータープログラムを見つけることができますが、全体として、現時点では最適な近似を計算するために広く使用されているプログラムはないようです。

たとえば、Matlabと[-1、1]のルンゲ関数に適用される無料のCVXツールボックスを使用して、最小二乗または凸最適化を適用することによって、ミニマックスソリューションを計算することもできます。

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、Matlab chebfunツールボックスのRemezアルゴリズムで計算される値と同じです。

最適化ソルバーを使用してミニマックスソリューションをより高速かつ正確に計算できる場合、より複雑なRemezアルゴリズムを適用する利点はありますか?いくつかの困難な問題やテストケースについて、これら2つのアプローチを比較するレポート/記事はありますか?

-
[1] R. PachonおよびLN Trefethen。BIT数値数学(2008)Vol。46。

回答:


4

「正しい」答えは、あなたがあなたの近似を必要とするものに強く依存します。いくつかの誤差限界に対して本当に最適な近似が必要ですか?またはちょうど良い近似?それとも、ミニマックスの意味でちょうど良い近似ですか?

Nick Trefethenは最近、Remez近似が悪い考えであるという良い例を挙げました。これは、区間全体の平均誤差に関係なく最大誤差を最小化するためです。もちろん、最大誤差は大きいかもしれませんが、これは滑らかな機能のために制限されています。

更新

以下のコメントの説明に従って、CVX Toolboxをダウンロードし、Chebfun Remezアルゴリズムと直接比較を行いました(免責事項:私はChebfun開発チームの一員です)。

% Do the convex optimization bit.
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_or = toc                % 0.17 sec for Matlab, CVX and SeDuMi

% Extract a Chebfun from the result
x = chebfun( [-1,1] );
A = [ chebfun(1) , x ];
for k=3:n, A(:,k) = A(:,k-1).*x; end
or = A * flipud(p)

% Make a chebfun of Runge's function
f = chebfun( @(x) 1 ./ ( 1 + 25*x.^2 ) )

% Get the best approximation using Remez
tic, cr = remez( f , 10 ); toc_cr = toc

% Get the maximum error in each case
fprintf( 'maximum error of convex optimization: %e (%f s)\n' , norm( f - or , inf ) , toc_or );
fprintf( 'maximum error of chebfun remez: %e (%f s)\n' , norm( f - cr , inf ) , toc_cr );

% Plot the two error curves
plot( [ f - cr , f - or ] );
legend( 'chebfun remez' , 'convex optimization' );

多くの出力の後、Matlab 2012aを搭載したラップトップで、CVXバージョン1.22およびChebfunの最新のSVNスナップショットを取得します。

maximum error of convex optimization: 6.665479e-02 (0.138933 s)
maximum error of chebfun remez: 6.592293e-02 (0.309443 s)

fエラーの測定に使用されるChebfun は15桁まで正確であることに注意してください。したがって、ChebfunのRemezは2倍の時間がかかりますが、グローバルエラーは小さくなります。Chebfunは100%ネイティブのMatlabであるのに対し、CVXは最適化のためにコンパイルされたコードを使用することに注意してください。の最小誤差0.00654は、「グリッド上」、そのグリッド外の最小誤差であり、誤差は最大である可能性があります0.00659。グリッドサイズを増やすm = 1001I GET

maximum error of convex optimization: 6.594361e-02 (0.272887 s)
maximum error of chebfun remez: 6.592293e-02 (0.319717 s)

つまり、ほぼ同じ速度ですが、離散最適化は4桁目の10進数の時点でさらに悪化します。最後に、にさらにグリッドサイズをncreasing m = 10001I GET

maximum error of convex optimization: 6.592300e-02 (5.177657 s)
maximum error of chebfun remez: 6.592293e-02 (0.312316 s)

つまり、離散最適化は10倍以上遅くなり、6桁目ではさらに悪化しています。

一番下の行は、Remezがグローバルに最適な結果を得るということです。ディスクリートアナログは小さなグリッドでは高速かもしれませんが、正しい結果にはなりません。


そして、N。Trefethenは同じことを強調しており、私が引用した記事で同様の例を挙げました。問題は最良の近似についてではありませんでしたが、合理的な凸ソルバーで同じ結果を得ることができる場合、Remezアルゴリズムの利点は何ですか(現在)?
ハンスW.

1
@HansWerner、すみません、あなたの質問を読み違えました。凸ソルバーは、少なくともすべての数字ではなく、同じ結果をあなたに与えていません。私があなたの凸型コードを正しく理解していれば、あなたは離散的な点のセットで最大誤差を最小化しています。これは、グローバル最大誤差を最小化するのに適した近似ですが、同じではありません。
ペドロ

この場合の凸ソルバーはより良い結果をもたらしました。考えてみてください。Remezアルゴリズムは、最適化ルーチンに非常によく似た反復手順であり、正確な結果も返しません。上記の具体的なケースでは、最適化からの解決策は、私が知っている最高のRemez実装からの結果よりも優れていました。質問はまだ開かれています。
ハンスW.

@HansWerner、凸ソルバーで得られた解の最大誤差をどのように測定しましたか?Remezアルゴリズムは、chebfun(ある意味で)マシン精度の最小値に達するまで繰り返されるはずです。
ペドロ

必ずしも; には 'tol'(相対許容差)や 'maxiter'などのchebfun/remezオプションがありますが、あらゆる種類の最適化ソルバーに同様のオプションがあります。ある意味では、Remezは特定のタスクに特化した最適化ルーチンです。そして質問は、汎用ソルバーが追いついており、そのような特殊なソルバーはもう必要ないということですか?もちろん、私は間違っているかもしれません。
ハンスW.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.