Я пытаюсь проанализировать результаты для различных итерационных подрешителей системы уравнений Ньютона, используя переформулировку Ньютона-Фишера LCP (линейная проблема дополнительности) . До сих пор я реализовал точный решатель - Гаусса-Зиделя и метод, модифицированный Ньютоном, который использует bicg matlab в качестве вспомогательного решателя уравнения J * h = -p (где 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. Я понимаю, что это больше теоретический вопрос.
Спасибо.