1

LCP(線形相補性問題)のNewton-Fischer再構成を使用して、ニュートン方程式系の異なるサブソルバーの結果を分析しようとしています。今まで私は正確なソルバを実装しました - Gauss-Siedelと、bicg matlabをJ * h = -pの式のサブソルバーとして使用するニュートン修正法(ここで、Jはヤコビアンです、pはフィッシャー関数の値であり、hが私の実現ステップです)。私はbicgのsubsolverと正確なソルバーを実装したコードのbicg以外の反復サブソルバーは、MATLABのニュートン方程式を解くのに使用できますか?

パート:

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でそれらのための関数がない場合、それらのためのコードを実装しても構いません。私はこれがもっと理論的な疑問であることを理解しています。 ありがとうございます。

+0

これは魅力的な質問です。私はそれがSEの数学に属しているのかどうか疑問に思っていますか? – macduff

答えて

3

bicgに加えて、一般的な非対称システムの他の反復解法の数があることができ、時々そのようなbicgstabgmresとして提供良好収束、。これらの方法は両方とも、bicgと似ていますが、krylovのサブスペース内では異なる更新方法が必要です。 MATLABにはこれら2つのメソッドの実装が用意されているため、問題をテストできます。

一般に、krylovの反復ソルバーを使用する場合、プレコンディショニングを組み込むことでパフォーマンスを向上させることができます。これはかなり複雑なテーマです。もしあなたがまだよく知らないのであれば、hereはどんなところからでも良い場所です。私は簡単なjacobi preconditioner diag(J)から始め、そこから行くことをお勧めしたいと思います。

ソルバーは、実際にはベクトルベクトル積J*pを計算する必要があるだけで、完全な行列Jは必要ありません。 Jを明示的に作成せずにを計算する効率的なサブルーチンを記述することは可能ですが、これは特定の問題の詳細に依存します。

最後の考慮事項は、プログラミングlaguage自体である - クリロフ法は、一般的にパフォーマンスの低下を招くMコードとして実装されている間、それは、直接解法J\pだは、MATLABは、高度に最適化されたライブラリコードを使用します。

これが役に立ちます。

関連する問題