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 是一個最多包含五個設置選項的輸入結構體。這些字段必須嚴格按照下表所示方法命名。您可以在此結構體中包含任意數(shù)目的字段,并以任意順序定義這些字段。忽略任何其他字段。
字段名稱說明type分解的類型。type 的值包括:
'nofill'(默認) - 執(zhí)行具有 0 填充級別的 ILU 分解(稱為 ILU(0))。如果將 type 設置為 'nofill',則僅使用 milu 設置選項;所有其他字段都將被忽略。
'crout' - 執(zhí)行 ILU 分解的 Crout 版本,稱為 ILUC。如果將 type 設置為 'crout',則僅使用 droptol 和 milu 設置選項;所有其他字段都將被忽略。
'ilutp' - 執(zhí)行帶閾值和選擇主元的 ILU 分解。
如果未指定 type,則會執(zhí)行 0 填充級別的 ILU 分解。在將 type 設置為 'ilutp' 的情況下,僅會執(zhí)行選擇主元的分解。
droptol不完全 LU 分解的調降容差。droptol 是一個非負標量。默認值為 0,這會生成完全的 LU 分解。
U 的非零項滿足
abs(U(i,j)) >= droptol*norm(A(:,j)),
但對角線元除外(無論是否滿足標準,系統(tǒng)都保留了這些元)。在使用主元調整 L 的元之前,將根據(jù)局部調降容差檢驗這些元,這同樣適用于 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(強制對角線數(shù)據(jù)透視)和 1 之間的主元閾值(默認值),該閾值始終選擇數(shù)據(jù)透視表中的列的最大量值條目。
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 個非零值,數(shù)量與 A 的數(shù)量相同。
提示
這些不完全分解可很好地用作通過 BICG(雙共軛梯度)、GMRES(廣義最小殘差法)等迭代方法求解的線性方程組的預條件子。
參考
[1] Saad, Yousef, Iterative Methods
for Sparse Linear Systems, PWS Publishing
Company, 1996, Chapter 10 - Preconditioning
Techniques.
擴展功能
分布式數(shù)組
使用 Parallel Computing Toolbox? 在群集的組合內存中對大型數(shù)組進行分區(qū)。
用法說明和限制:
如果在結構體數(shù)組 setup 中包含字段 type,則必須將其設置為 'nofill'。
總結
以上是生活随笔為你收集整理的matlab ilu函数,不完全 LU 分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: proxy chains 配置
- 下一篇: 撕开帝国裂缝的互联网+饮料公司——元气森