colperm
非ゼロ要素数に基づくスパース列置換
構文
j = colperm(S)
説明
j = colperm(S)
は、非ゼロ要素の数が増えていく順序で S(:,j)
の列が並ぶ置換ベクトル j
を作成します。これは LU 分解の事前並べ替えとして有効で、この場合には lu(S(:,j))
を使用します。
S
が対称の場合、j
=
colperm(S)
は、非ゼロ要素の数が増えていく順序で S(j,j)
の行と列が両方とも並ぶようにする置換ベクトル j
を作成します。S
が正定値の場合、これはコレスキー分解の事前並べ替えとして有効です。この場合は chol(S(j,j))
を使用します。
例
100
行 100
列の "矢印の先端の位置を示す" の行列
n = 100; A = [ones(1,n); ones(n-1,1) speye(n-1,n-1)]
は、1 行目と 1 列目のすべての要素が非ゼロです。その LU 分解 lu(A)
では、ほぼすべての要素が非ゼロになります。ステートメント
j = colperm(A)
は、j
=
[2:n
1]
を返します。これにより、A(j,j)
では 1 行目が一番下、1 列目が右端の列に送られ、lu(A(j,j))
は A
自体と同じ非ゼロ構造をもつことになります。
これに対して、バッキー ボール (Bucky ball、C60 構造分子) を例に取ると、
B = bucky
では各行および各列に正確に 3 個ずつの非ゼロ要素があるため、j = colperm(B)
は恒等置換となり、以降の分解で要素の充填を減らすことには役立ちません。
アルゴリズム
このアルゴリズムには、各列における非ゼロ要素数の並べ替えが含まれます。
拡張機能
バージョン履歴
R2006a より前に導入