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 | ![]() |