1

PCG線形方程式系を解くためにMATLAB のサブルーチンを使用しています。しかし、私はそれを正確に解決したくありません。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
4

0 に答える 0