| MATLAB Function Reference |
spdiags
表示
[B,d] = spdiags(A) B = spdiags(A,d) A = spdiags(B,d,A) A = spdiags(B,d,m,n)
詳細
関数 spdiags は、関数 diag を一般化したものです。入力引数の数により、4
種類の演算を行います。
[B,d] = spdiags(A) は、m行n列の行列
A からゼロでない対角成分を抽出します。B は、min(m,n)
行 p 列の行列で、その列は、A の p
個の非ゼロの対角要素になっています。d
は、整数成分が、A の対角位置を指定する長さ p のベクトルです。
B = spdiags(A,d) は、d で指定した位置の対角成分を抽出します。
A = spdiags(B,d,A) は、d
で指定した位置の対角成分を、B の列で置き換えます。出力はスパース行列です。
A = spdiags(B,d,m,n) は、B
の列を d で指定した位置の対角成分に配置することで、m
行 n 列のスパース行列を作成します。
注意
B
の列が、置き換える対角成分よりも大きければ、spdiags は、B
の最後から要素を取り出します。
引数
spdiags は、入力および出力として 3
個の行列を様々な組合わせで扱います。
A |
m 行 n 列の行列で、通常(必ずしも必要ではないが)スパースで、p
個の対角成分上に非ゼロ、または、指定した要素をもちます。 |
B |
min(m,n) 行 p 列の行列で、通常(必ずしも必要ではないが)フル行列で、各列は
A の対角成分です。 |
d |
長さ p のベクトルで、整数成分は A
の対角位置を指定します。 |
for k = 1:p
B(:,k) = diag(A,d(k))
end
A の範囲外の位置に対応するB の要素は、このループでは定義されません。これらの要素は、B
が入力の場合は参照されず、B が、出力の場合はゼロに設定されます。
例題
つぎの例題は、古典的な 2 階の n 点差分演算子を表わす、スパース3重対角行列を作成します。
e = ones(n,1); A = spdiags([e -2*e e], -1:1, n, n)
この結果は、 Wilkinson のテスト行列になります(gallery
を参照)。
A = spdiags(abs(-(n-1)/2:(n-1)/2)',0,A)
B = spdiags(A)
A = [11 0 13 0
0 22 0 24
0 0 33 0
41 0 0 44
0 52 0 0
0 0 63 0
0 0 0 74]
ステートメント [B,d] = spdiags(A)
produces d = [-3 0 2]'
とつぎの行列を作成します。
B = [41 11 0
52 22 0
63 33 13
74 44 24]
上記の B と d を使い、spdiags(B,d,7,4)
で、オリジナルの行列 A を作ることができます。
参考
diag
| spconvert | speye |