主要内容

ichol

不完整的Cholesky分解

语法

l = iChol(a)
L = ichol(选项)

描述

L = ichol (一个执行不完整的Cholesky分解一个补零。

L = ichol (一个选项执行不完整的Cholesky分解一个使用结构指定的选项选项

默认情况下,ichol参考下三角形一个产生较低的三角形因子。

输入参数

一个

稀疏矩阵

选项

多达五个字段的结构:

字段名 总结 描述
类型 类型的分解

表示不完整的巧克力味道的味道。此字段的有效值是'nofill'“信息与通信技术”.这'nofill'变体执行不完整的Cholesky与零填充集成电路(0)).这“信息与通信技术”变体执行不完整的Cholesky,阈值下降(ICT)。默认值为'nofill'

droptol. 类型为时的下降公差“信息与通信技术”

在执行ICT时,用作滴差的非负标量。除了从不掉落的对角线元素外,在大小上小于局部掉落公差的元素从结果因子中掉落。步骤的局部滴度公差j因式分解的规范((结束,j), 1) * droptol“droptol”忽略if.“类型”'nofill'.默认值为0

michol 是否执行修改后的incomplete Cholesky

表明是否修改了不完整的Cholesky(MIC)进行。这个领域可能是“上”或者“关闭”.在执行MIC时,对角线将对删除的元素进行补偿,以加强关系* e = L * L‘* e在哪里E = e =(大小(a,2),1).默认值为“关闭”

diagcomp 用指定的系数执行补偿不完整的尖头

真正的非负标量用作全局对角线α形成不完整的乔里斯基因子。也就是说,不是表演不完整的乔里斯基一个的分解A + alpha *诊断(DIAG(A))就形成了。默认值为0

形状 确定引用和返回哪个三角形

有效的值“上”“低”.如果“上”时,只有上三角形的一个参考和R被构造成了一个近似r'* r.如果“低”指定,只有下三角形一个参考和l被构造成了一个近似二'.默认值为“低”

例子

全部折叠

此示例生成不完整的Cholesky分解。

从对称正定矩阵开始,一个

N = 100;一个= delsq (numgrid (“年代”, N));

一个是一个带有狄利克雷边界条件的100 × 100方形网格上的二维五点离散负拉普拉斯矩阵。的大小一个98 * 98 = 9604(由于电网的边界用于施加Dirichlet条件,而不是10000。

无填充不完全乔里斯基分解是一种只包含同位置的非零的分解一个包含非零。这种分解方法计算起来非常便宜。尽管该产品二'是非常不同的一个,产品二'将匹配一个按照它的模式,直到四舍五入。

L = ichol(一个);规范(L * L ','fro')。/规范(,'fro'
ans = 0.0916
规范(A - (L * L ')。* spones (A),'fro')。/规范(,'fro'
ans = 4.9606e-17

ichol也可用于生成阈值下降的不完全Cholesky分解。随着滴差的减小,因素趋于更致密和产品二'往往是更好的近似一个.以下绘图显示不完全分解的相对误差绘制抗降耐公差以及不完全因素的密度与完整尖端密度的比率。

n =大小(1);ntols = 20;droptol = logspace (8,0, ntols);全国抵抗运动= 0(1、ntols);新西兰= 0(1、ntols);nzComplete = nnz(胆固醇(,“低”));L = ichol(A,struct(“类型”“信息与通信技术”“droptol”droptol (k)));新西兰(k) = nnz (L);全国抵抗运动(k) =规范(L * L ','fro')。/规范(,'fro');结束图重对数(droptol全国抵抗运动,'行宽',2)标题('放弃容忍Vs rang(a-l * l',''fro'')./ norm(a,''fro'')'

图中包含一个坐标轴。标题为Drop tolerance vs norm(A-L*L','fro')./norm(A,'fro')的轴包含一个line类型的对象。

图semilogx (droptol nz. / nzComplete,'行宽',2)标题(“滴度与填充比ichol/chol”

图中包含一个坐标轴。具有标题降差与填充比iChol / Chol的轴包含类型线的物体。

相对误差通常与滴差公差相同,尽管这不能保证。

这个例子展示了如何使用不完整的choolesky分解作为预调节器来提高收敛性。

建立一个对称正定矩阵,一个

N = 100;一个= delsq (numgrid (“年代”, N));

创建一个不完整的乔尔斯基分解作为预处理pcg.用常数向量作为右手边。作为基准,执行pcg没有预处理者。

b =α(大小(a,1),1);tol = 1e-6;maxit = 100;[X0,FL0,RR0,IT0,RV0] = PCG(A,B,TOL,MAXIT);

注意fl0 = 1这表明pcg在最大允许的迭代中没有将相对剩余驱动到所要求的公差。试着用无填充的不完全乔里斯基分解作为预处理。

l1 = ichol(a);[X1,FL1,RR1,IT1,RV1] = PCG(A,B,TOL,MAXIT,L1,L1');

fl1 = 0,这表明pcg收敛到要求的公差,并在59次迭代中这样做(值it1).由于这个矩阵是一个离散的拉普拉斯矩阵,但是,使用改进的不完全Cholesky可以创建一个更好的预调节器。一个改进的不完全Cholesky分解构造了一个近似分解,它保留了算子对常量向量的作用。也就是说,常态(A * E-L *(L'* E))将近似为零E = e =(大小(a,2),1)虽然常态(a-l * l','fro')/ norm(a,'fro')不接近于零。没有必要为该语法指定类型,因为nofill是默认设置,但这是一种良好的实践。

options.type =.'nofill';选项。michol =“上”;l2 = ichol(a,选项);E = e =(大小(a,2),1);常态(A * E-L2 *(L2'* E)))
ans = 3.7983 e-14
[X2,FL2,RR2,IT2,RV2] = PCG(A,B,TOL,MAXIT,L2,L2');

pcg收敛(fl2 = 0.)但只有38次迭代。绘制所有三个收敛历史表明融合。

半径(0:maxit,RV0。/ rang(b),“b”。);持有semilogy (0: it1 rv1. /规范(b),“r”。);semilogy (0: it2 rv2. /规范(b),'k。');传奇(“没有预调节器”“集成电路(0)”“麦克风(0)”);

图中包含一个坐标轴。轴线包含3个线型对象。这些对象表示No Preconditioner, IC(0), MIC(0)。

从图中可以看出,改进后的不完全choolesky预调节器可以产生更快的收敛速度。

您还可以尝试阈值下降的不完整Cholesky分解。下图显示了的收敛性pcg带有各种下降公差的预调节器。

3 = ichol(A, struct()“类型”“信息与通信技术”“droptol”,1E-1));[X3,FL3,RR3,IT3,RV3] = PCG(A,B,TOL,MAXIT,L3,L3');l4 = iChol(a,struct(“类型”“信息与通信技术”“droptol”, 1依照));[x4, fl4 rr4、it4 rv4] = pcg (A, b,托尔,麦克斯特、L4、L4的);L5 = ichol(A, struct())“类型”“信息与通信技术”“droptol”1 e - 3));[X5,FL5,RR5,IT5,RV5] = PCG(A,B,TOL,MAXIT,L5,L5');图半音(0:MAXIT,RV0。/ NORM(B),“b -”“线宽”2);持有semilogy (0: it3 rv3. /规范(b),'B-。'“线宽”2);半径(0:IT4,RV4。/ Quid(B),'B--'“线宽”2);semilogy (0: it5 rv5. /规范(b),”乙:““线宽”2);传奇(“没有预调节器”“ICT (1 e 1)”“ICT(1依照)”......“ICT (1 e - 3)”'地点'“东南”);

图中包含一个坐标轴。轴包含4个类型的4个物体。这些对象代表无预处理器,ICT(1E-1),ICT(1E-2),ICT(1E-3)。

注意具有降低容差的不完整的妖精预处理器1E-2表示为ICT(1E-2)

与零填充不完全尖头一样,阈值下降分解可以受益于修改(即options.michol ='上'),因为矩阵是由椭圆偏微分方程得到的。与麦克风(0),基于修改的阈值的丢弃不完整的Cholesky将保留预处理器对恒定向量的动作,即常态(A * E-L *(L'* E))将近似为零。

这个例子说明了使用的使用diagcomp选择ichol

不完全存在正定矩阵的不完整尖锐症状并不总是存在。以下代码构造了随机对称的正定矩阵,并尝试解决线性系统使用pcg

s = RNG(“默认”);a = sprandsym(1000,1e-2,1e-4,1);RNG;b =完整(总和(a,2));[X0,FL0,RR0,IT0,RV0] = PCG(A,B,1E-6,100);

由于没有达到融合,尝试构建一个不完整的妖精的预处理器。

L = ichol(结构体(“类型”“信息与通信技术”“droptol”1 e - 3));
使用ichol时遇到的非正枢轴误差。

如果ichol如上所述,您可以使用diagcomp选项来构造移位的不完全乔里斯基分解。也就是说,不要建造l这样二'接近一个ichol对角补偿结构l这样二'接近M = A + α *diag(diag(A))没有明确的形成.由于对角线主导矩阵总是存在不完整的因子,α能找到吗对角占主导地位。

alpha = max(sum(abs(a),2)./ diag(a)) -  2
alpha = 62.9341.
l1 = iChol(a,struct(“类型”“信息与通信技术”“droptol”,1e-3,“diagcomp”,α));[X1,FL1,RR1,IT1,RV1] = PCG(A,B,1E-6,100,L1,L1');

这里,pcg在期望的迭代次数内仍然不能收敛到期望的容忍,但是如下图所示,收敛是更好的pcg有这个前置条件比没有前置条件。选择一个更小的α可能有帮助。通过一些实验,我们可以满足适当的价值α

α= 1;L2 = ichol(A, struct()“类型”“信息与通信技术”“droptol”,1e-3,“diagcomp”,α));[X2,FL2,RR2,IT2,RV2] = PCG(A,B,1E-6,100,L2,L2');

现在,pcg收敛,并绘制出每个预调节器的收敛历史。

半径(0:100,RV0。/ NORM(B),“b”。);持有;semilogy (0:100 rv1. /规范(b),“r”。);semilogy (0: it2 rv2. /规范(b),'k。');传奇(“没有预调节器”“α\ \大约63”“\α= 1。”);包含('迭代号');ylabel(的相对剩余的);

图中包含一个坐标轴。轴线包含3个线型对象。这些对象表示没有预处理器,\ alpha \约63,\ alpha = .1。

提示

  • 由这个程序给出的因子可以作为用迭代方法求解的线性方程组的先决条件pcg或者min

  • ichol仅适用于稀疏方阵

参考文献

[1] Saad,Yousef。“预处理技术。”稀疏线性系统的迭代方法.出版公司,1996。

[2] Manteuffel, T.A.《正定线性系统的不完全分解技术》数学。计算。34岁,473 - 497年,1980年。

扩展能力

另请参阅

|||