我正在使用MATLAB的PCG
子程序来求解线性方程组。但是,我不希望它完全解决。我希望它只运行20次迭代,如果它不收敛,我希望它在第20次迭代时返回值。
然而,MATLAB(我的版本是最新版本)正在做的是返回零向量,如果它没有通过20次迭代找到可接受的解决方案。有没有办法在不更改pcg.m
的源代码的情况下覆盖它?
我有一个我写的代码(我刚刚从维基百科中复制过)但很明显,它与MATLAB版本的强大程度无关。
function [x] = conjgrad(A,b,x)
r=b-A*x;
p=r;
rsold=r'*r;
for i=1:20
Ap=A*p;
alpha=rsold/(p'*Ap);
x=x+alpha*p;
r=r-alpha*Ap;
rsnew=r'*r;
if sqrt(rsnew)<1e-10
break;
end
p=r+rsnew/rsold*p;
rsold=rsnew;
end