matlab ilu函数,不完全 LU 分解

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',则仅使用 droptol 和 milu 设置选项;所有其他字段都将被忽略。

'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如果 udiag 为 1,上三角因子的对角线上的任何零都将替换为局部调降容差。默认值为 0。

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

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.

扩展功能

分布式数组

使用 Parallel Computing Toolbox™ 在群集的组合内存中对大型数组进行分区。

用法说明和限制:

如果在结构体数组 setup 中包含字段 type,则必须将其设置为 'nofill'。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值