Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

ilu

不完全 LU 分解

语法

ilu(A,setup)
[L,U] = ilu(A,setup)
[L,U,P] = ilu(A,setup)

说明

ilu 生成一个单位下三角矩阵、一个上三角矩阵和一个置换矩阵。

ilu(A,setup) 计算 A 的不完全 LU 分解。setup 是一个最多包含五个设置选项的输入结构体。这些字段必须严格按照下表所示方法命名。您可以在此结构体中包含任意数目的字段,并以任意顺序定义这些字段。忽略任何其他字段。

字段名称

说明

type

分解的类型。type 的值包括:

  • 'nofill'(默认) - 执行具有 0 填充级别的 ILU 分解(称为 ILU(0))。如果将 type 设置为 'nofill',则仅使用 milu 设置选项;所有其他字段都将被忽略。

  • 'crout' - 执行 ILU 分解的 Crout 版本,称为 ILUC。如果将 type 设置为 'crout',则仅使用 droptolmilu 设置选项;所有其他字段都将被忽略。

  • 'ilutp' - 执行带阈值和选择主元的 ILU 分解。

如果未指定 type,则会执行 0 填充级别的 ILU 分解。在将 type 设置为 'ilutp' 的情况下,仅会执行选择主元的分解。

droptol

不完全 LU 分解的调降容差。droptol 是一个非负标量。默认值为 0,这会生成完全的 LU 分解。

U 的非零项满足

  abs(U(i,j)) >= droptol*norm(A(:,j)),

但对角线元除外(无论是否满足标准,系统都保留了这些元)。在使用主元调整 L 的元之前,将根据局部调降容差检验这些元,这同样适用于 L 中的非零值

abs(L(i,j)) >= droptol*norm(A(:,j))/U(j,j).

milu

修改后的不完全 LU 分解。milu 的值包括:

  • 'row' - 生成行总和修正的不完全 LU 分解。新构成的因子列中的条目从上三角因子 U 的对角线中减去,并保留列总和。也即 A*e = L*U*e,其中 e 是由 1 组成的向量。

  • 'col' - 生成列总和修正的不完全 LU 分解。新构成的因子列中的条目从上三角因子 U 的对角线中减去,并保留列总和。即 e'*A = e'*L*U

  • 'off'(默认值)- 不生成修正的不完全 LU 分解。

udiag

如果 udiag1,上三角因子的对角线上的任何零都将替换为局部调降容差。默认值为 0

thresh

Pivot threshold between 0(强制对角线数据透视)和 1 之间的主元阈值(默认值),该阈值始终选择数据透视表中的列的最大量值条目。

ilu(A,setup) 返回 L+U-speye(size(A)),其中 L 为单位下三角矩阵,U 为上三角矩阵。

[L,U] = ilu(A,setup) 分别在 LU 中返回单位下三角矩阵和上三角矩阵。

[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

此示例显示 AL*U(其中 LU 由修正的 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.

扩展功能

另请参阅

| |