MATLAB Function Reference | ![]() ![]() |
表示
x = symmlq(A,b) symmlq(A,b,tol) symmlq(A,b,tol,maxit) symmlq(A,b,tol,maxit,M) symmlq(A,b,tol,maxit,M1,M2) symmlq(A,b,tol,maxit,M1,M2,x0) symmlq(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...) [x,flag] = symmlq(A,b,...) [x,flag,relres] = symmlq(A,b,...) [x,flag,relres,iter] = symmlq(A,b,...) [x,flag,relres,iter,resvec] = symmlq(A,b,...) [x,flag,relres,iter,resvec,resveccg] = symmlq(A,b,...)
詳細
x = symmlq(A,b)
は、線形方程式 A*x=b
を x
に関して解きます。n
行 n
列の係数行列 A
は、対称である必要がありますが、必ずしも正定である必要はありません。列ベクトル b
は、長さ n
をもっています。A
は、afun(x)
が、A*x
を戻すような関数 afun
です。
symmlq
が収束する場合、その効果に関するメッセージが表示されます。symmlq
が、設定された最大繰り返し回数に達しても収束しなかったり、または、何らかの理由で、計算を停止すると、ワーニングメッセージが、相対残差 norm(b-A*x)/norm(b)
と停止したときの繰り返し回数を表示します。
symmlq(A,b,tol)
は、使用する方法のトレランスを設定します。tol
が []
の場合、symmlq
は、デフォルトの 1e-6
を使います。
symmlq(A,b,tol,maxit)
は、繰り返しの最大回数を設定します。maxit
が []
の場合、symmlq
は、デフォルトの min(n,20)
を使います。
symmlq(A,b,tol,maxit,M)
と symmlq(A,b,tol,maxit,M1,M2)
は、対称正定前置条件子 M
、または、M = M1*M2
を使って、システム inv(sqrt(M))*A*inv(sqrt(M))*y = inv(sqrt(M))*b
を y
に対して、効率的に解き、x = inv(sqrt(M))*y
を戻します。M
が []
の場合、symmlq
は、前置条件子を適用しません。M
は、M\x
を戻す関数です。
symmlq(A,b,tol,maxit,M1,M2,x0)
は、初期推定を指定するものです。x0
が []
の場合、symmlq
は、デフォルトのすべての要素がゼロのベクトルを使用します。
symmlq(afun,b,tol,maxit,m1fun,m2fun,x0,p1,p2,...)
は、パラメータ p1,p2,...
を関数 afun(x,p1,p2,...)
, m1fun(x,p1,p2,...)
, m2fun(x,p1,p2,...)
に渡します。
[x,flag] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
は、収束に関するフラグも戻します。
フラグ |
収束 |
0 |
symmlq は、maxit 以内の繰り返し回数で、希望するトレランス tol 内に収束します。 |
1 |
symmlq は、maxit の繰り返しを実行しましたが、収束しませんでした。 |
2 |
前置条件子 M は、条件数が良くありません。 |
3 |
symmlq の出力結果に変化が見られません(連続する2回の繰り返しで、変化が認められない)。 |
4 |
|
5 |
flag
が 0
でない場合は常に、戻される解 x
は、すべての繰り返しでの計算の中の最小ノルム残差を戻します。flag
出力が指定されている場合は、メッセージが表示されません。
[x,flag,relres] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
は、相対残差 norm(b-A*x)/norm(b)
も戻します。flag
が0
の場合、relres <= tol
になります。
[x,flag,relres,iter] = symmlq(A,b,tol,maxit,M1,M2,x0,p1,p2,...)
は、x
が計算されたときの繰り返し回数も出力します。ここで、0 <= iter <= maxit
です。
[x,flag,relres,iter,resvec] = symmlq(A,b,tol,maxit,M1,M2,x0,
は、
p1,p2,...)
norm(b-A*x0)
を含んで、各繰り返しで、symmlq
の残差ノルムの推定から構成されるベクトルも出力します。
[x,flag,relres,iter,resvec,resveccg] = symmlq(A,b,tol,maxit,M1,M2,
は、各繰り返しで、共役勾配残差ノルムの推定からなるベクトルも出力します。
x0,p1,p2,...)
例題
n = 100; on = ones(n,1); A = spdiags([-2*on 4*on -2*on],-1:1,n,n); b = sum(A,2); tol = 1e-10; maxit = 50; M1 = spdiags(4*on,0,n,n); x = symmlq(A,b,tol,maxit,M1,[],[]); symmlq converged at iteration 49 to a solution with relative residual 4.3e-015
function y = afun(x,n) y = 4 * x; y(2:n) = y(2:n) - 2 * x(1:n-1); y(1:n-1) = y(1:n-1) - 2 * x(2:n);
x1 = symmlq(@afun,b,tol,maxit,M1,[],[],n);
pcg
でうまく機能しなかった対称な不定行列を使います。
A = diag([20:-1:1,-1:-1:-20]); b = sum(A,2); % 真の解は、すべてが1のベクトルです。 x = pcg(A,b); % 最初の計算でエラーを出力します。 pcg stopped at iteration 1 without converging to the desired tolerance 1e-006 because a scalar quantity became too small or too large to continue computing. The iterate returned (number 0) has relative residual 1
しかし、symmlq
は、対称な不定行列 A
を取り扱うこともできます。
x = symmlq(A,b,1e-6,40); symmlq converged at iteration 39 to a solution with relative residual 1.3e-007
参考
bicg
, bicgstab
, cgs
, lsqr
, gmres
, minres
, pcg
, qmr
参考文献
Barrett, R., M. Berry, T. F. Chan, et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia, 1994.
Paige, C. C. and M. A., "Solution of Sparse Indefinite Systems of Linear Equations." SIAM J. Numer. Anal., Vol.12, 1975, pp. 617-629.
![]() | symbfact | symmmd | ![]() |