1

LCP(線形相補性問題)のニュートン-フィッシャー再定式化を使用して、ニュートン方程式システムのさまざまな反復サブソルバーの結果を分析しようとしています。これまで、正確なソルバーであるGauss-Siedelと、J * h = -p方程式のサブソルバーとしてbicgmatlabを使用するニュートン修正メソッドを実装しました(ここで、 Jはジャコビアン、pはフィッシャーの値です)。関数とhは私の実現ステップです)。

bicgサブソルバーと正確なソルバーを実装したコードの一部:

if itt
    % use iterative solver for newton eq
    while ~all(fischer(x, A*x+b) == 0) & its < max_it
        % compute the Jacobian
        J = eval_jacobian(A, b, x);
        % compute the value of the Fischer function
        p = fischer(x, A*x + b);
        % the natural merit function for convergence measure
        residual(its) = .5*(p'*p);
        % the newton eq, solve J*h = -p
        h = bicg(J, -p, eps, s_its);
        % update the solution vector 
        x = x + h;
        % increment the iteration counter
        its = its + 1;
    end
else
    % the exact solver for newton equation
    while ~all(fischer(x, A*x+b) == 0) & its < max_it
        % compute the Jacobian
        J = eval_jacobian(A, b, x);
        % compute the value of the Fischer function
        p = fischer(x, A*x + b);
        % the natural merit function for convergence measure
        residual(its) = .5*(p'*p);
        % the newton eq, solve J*h = -p
        h = - J/p;
        % update the solution vector 
        x = x + h;
        % increment the iteration counter
        its = its + 1;
    end

それで、私の質問は、他にどのような反復サブソルバーを使用するかということです。matlabに関数がない場合は、コードを実装してもかまいません。これはもっと理論的な問題だと思います。ありがとうございました。

4

1 に答える 1

3

に加えて、 や など、より優れた収束を提供できるbicg一般的な非対称システム用の反復ソルバーが他にも多数あります。これらの方法はどちらも と精神的に似ていますが、クリロフ部分空間内で異なる更新戦略を伴います。MATLAB にはこれら両方の方法の実装があるため、問題についてテストすることができます。bicgstabgmresbicg

一般に、krylov 反復ソルバーを使用する場合、多くの場合、前処理を組み込むことでパフォーマンスを向上させることができます。これはかなり複雑なテーマです。まだ慣れていない場合は、ここから始めてください。シンプルな jacobi プリコンディショナーから始めて、diag(J)そこから始めることをお勧めします。

反復ソルバーは、いわゆる「行列を使用しない」アプローチに基づいて、追加の効率を得る場合もあります。ソルバーは、実際には行列ベクトルの積を計算するだけでよくJ*p、完全な行列は必要ありませんJJ*p明示的に形成せずに計算する効率的なサブルーチンを書くことは可能かもしれませんがJ、これは特定の問題の詳細に依存します。

最後の考慮事項は、プログラミング言語自体です。MATLAB は直接ソルバー用に高度に最適化されたライブラリ コードを使用しますJ\pが、krylov メソッドは m コードとして実装されるため、一般にパフォーマンスが低下します。

お役に立てれば。

于 2012-03-08T23:16:22.490 に答える