我正在尝试使用 LCP(线性互补问题)的 Newton-Fischer 重新表述来分析牛顿方程系统的不同迭代子求解器的结果。到目前为止,我已经实现了精确的求解器 - Gauss-Siedel,以及使用bicg matlab作为 J*h = -p 方程的子求解器的牛顿修正方法(其中J是雅可比,p是 Fischer 的值函数和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 中没有它们的功能,我不介意为它们实现代码。我意识到这更像是一个理论问题。谢谢你。