このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
ilu
不完全 LU 分解
構文
ilu(A,options)
[L,U] = ilu(A,options)
[L,U,P] = ilu(A,options)
説明
関数 ilu
は、単位下三角行列、上三角行列、および置換行列を生成します。
ilu(A,options)
は A
の不完全 LU 分解を計算します。options
は最大 5 つの設定オプションをもつ入力構造体です。フィールドの名前は、次の表に示されているとおりに指定しなければなりません。構造体には、これらの任意の数のフィールドを任意の順序で定義できます。余分なフィールドは無視されます。
フィールド名 | 説明 |
---|---|
| 分解のタイプ。
|
| 不完全 LU 分解の棄却許容誤差。
abs(U(i,j)) >= droptol*norm(A(:,j)), ただし、対角要素は例外で、これは、この条件を満たすかどうかに関係なく保持されます。 abs(L(i,j)) >= droptol*norm(A(:,j))/U(j,j). |
| 変更された不完全 LU 分解。
|
|
|
|
|
ilu(A,options)
は、L+U-speye(size(A))
を返します。L
は単位下三角行列で、U
は上三角行列です。
[L,U] = ilu(A,options)
は L
に単位下三角行列、U
に上三角行列を返します。
[L,U,P] = ilu(A,options)
は、L
に単位下三角行列、U
に上三角行列、P
に置換行列を返します。
制限
関数 ilu
は、正方スパース行列にのみ動作します。
例
スパース行列に対して、LU 分解を計算します。
A = gallery('neumann', 1600) + speye(1600); options.type = 'crout'; options.milu = 'row'; options.droptol = 0.1; [L,U] = ilu(A,options); e = ones(size(A,2),1); norm(A*e-L*U*e) ans = 1.4251e-014
これは、A
および L*U
が、L
と U
が変更された Crout ILU
に提供される場合、行和が同じであることを示しています。
スパース行列に対して、LU 分解を計算します。
A = gallery('neumann', 1600) + speye(1600); options.type = 'nofill'; nnz(A) ans = 7840 nnz(lu(A)) ans = 126478 nnz(ilu(A,options)) ans = 7840
これは、A
に 7840
の非ゼロ、不完全 LU 分解に 126478
の非ゼロ、0
レベルの要素を満たす LU 分解に 7840
(A
の場合と同量) の非ゼロがあることを示しています。
ヒント
これらの不完全分解は、BICG (双共役傾斜法)、GMRES (一般化最小残差法) など、大きなスパース線形方程式システムを解くための前提条件として有効なことがあります。
参照
[1] Saad, Yousef, Iterative Methods for Sparse Linear Systems, PWS Publishing Company, 1996, Chapter 10 - Preconditioning Techniques.