概述
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'。
最后
以上就是从容鸡翅为你收集整理的matlab ilu函数,不完全 LU 分解的全部内容,希望文章能够帮你解决matlab ilu函数,不完全 LU 分解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复