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