MATLAB Function Reference    

spdiags

スパース帯行列、または、スパース対角行列の抽出と作成

表示

詳細

関数 spdiags は、関数 diag を一般化したものです。入力引数の数により、4 種類の演算を行います。

[B,d] = spdiags(A) は、mn列の行列 A からゼロでない対角成分を抽出します。B は、min(m,n)p 列の行列で、その列は、Ap 個の非ゼロの対角要素になっています。d は、整数成分が、A の対角位置を指定する長さ p のベクトルです。

B = spdiags(A,d) は、d で指定した位置の対角成分を抽出します。

A = spdiags(B,d,A) は、d で指定した位置の対角成分を、B の列で置き換えます。出力はスパース行列です。

A = spdiags(B,d,m,n) は、B の列を d で指定した位置の対角成分に配置することで、mn 列のスパース行列を作成します。

注意

B の列が、置き換える対角成分よりも大きければ、spdiags は、B の最後から要素を取り出します。

引数

spdiags は、入力および出力として 3 個の行列を様々な組合わせで扱います。

A
mn 列の行列で、通常(必ずしも必要ではないが)スパースで、p 個の対角成分上に非ゼロ、または、指定した要素をもちます。
B
min(m,n) p 列の行列で、通常(必ずしも必要ではないが)フル行列で、各列は A の対角成分です。
d
長さ p のベクトルで、整数成分は A の対角位置を指定します。

A, B, d は、つぎのような関係があります。

A の範囲外の位置に対応するB の要素は、このループでは定義されません。これらの要素は、B が入力の場合は参照されず、B が、出力の場合はゼロに設定されます。

例題

つぎの例題は、古典的な 2 階の n 点差分演算子を表わす、スパース3重対角行列を作成します。

この結果は、 Wilkinson のテスト行列になります(gallery を参照)。

最後に、これは3重対角になります。

つぎの例は、正方行列でない例題です。

ここで、m = 7, n = 4, p, = 3 です。

ステートメント [B,d] = spdiags(A) produces d = [-3 0 2]' とつぎの行列を作成します。

上記の B d を使い、spdiags(B,d,7,4) で、オリジナルの行列 A を作ることができます。

参考
diag


  spconvert speye