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に関数がない場合は、コードを実装してもかまいません。これはもっと理論的な問題だと思います。ありがとうございました。