本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。
不完全 LU 分解
ilu(A,setup)
[L,U] = ilu(A,setup)
[L,U,P] = ilu(A,setup)
ilu
生成一个单位下三角矩阵、一个上三角矩阵和一个置换矩阵。
ilu(A,setup)
计算 A
的不完全 LU 分解。setup
是一个最多包含五个设置选项的输入结构体。这些字段必须严格按照下表所示方法命名。您可以在此结构体中包含任意数目的字段,并以任意顺序定义这些字段。忽略任何其他字段。
字段名称 | 说明 |
---|---|
| 分解的类型。
如果未指定 |
| 不完全 LU 分解的调降容差。
abs(U(i,j)) >= droptol*norm(A(:,j)), 但对角线元除外(无论是否满足标准,系统都保留了这些元)。在使用主元调整 abs(L(i,j)) >= droptol*norm(A(:,j))/U(j,j). |
| 修改后的不完全 LU 分解。
|
| 如果 |
| Pivot threshold between |
ilu(A,setup)
返回 L+U-speye(size(A))
,其中 L
为单位下三角矩阵,U
为上三角矩阵。
[L,U] = ilu(A,setup)
分别在 L
和 U
中返回单位下三角矩阵和上三角矩阵。
[L,U,P] = ilu(A,setup)
返回 L
中的单位下三角矩阵、U
中的上三角矩阵和 P
中的置换矩阵。
ilu
仅适用于稀疏方阵。
从一个稀疏矩阵开始,并计算 LU 分解。
A = gallery('neumann', 1600) + speye(1600); setup.type = 'crout'; setup.milu = 'row'; setup.droptol = 0.1; [L,U] = ilu(A,setup); 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); setup.type = 'nofill'; nnz(A) ans = 7840 nnz(lu(A)) ans = 126478 nnz(ilu(A,setup)) ans = 7840
此示例显示 A
具有 7840
个非零值,完全 LU 分解具有 126478
个非零值,不完全 LU 分解(采用 0
填充级别)具有 7840
个非零值,数量与 A
的数量相同。
这些不完全分解可很好地用作通过 BICG(双共轭梯度)、GMRES(广义最小残差法)等迭代方法求解的线性方程组的预条件子。
[1] Saad, Yousef, Iterative Methods for Sparse Linear Systems, PWS Publishing Company, 1996, Chapter 10 - Preconditioning Techniques.