Main Content

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)) を使用します。

100100 列の "矢印の先端の位置を示す" の行列

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 より前に導入