ichol

不完全Cholesky分解

句法

L = ichol(A)
L = ichol(A,OPTS)

描述

L = ichol (一个进行的不完全Cholesky分解一个与填零。

L = ichol (一个OPTS进行的不完全Cholesky分解一个由指定的选项OPTS

默认,ichol引用的下三角一个并产生下三角因素。

输入参数

一个

稀疏矩阵

OPTS

结构多达5个字段:

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

表示不完全乔莱斯基的味道要执行的。该字段的有效值是'NOFILL''ICT'。该'NOFILL'变体执行不完全的Cholesky零填充IC(0))。该'ICT'变体执行不完全的Cholesky与阈滴(ICT)。默认值是'NOFILL'

droptol 落忍当类型为'ICT'

执行信息和通信技术时,用作落允差的非负标量。那些在量值上小于局部降容差的元件将从结果因子中去掉,但对角元件从不去掉。步进局部降容差Ĵ的因式分解范数(第(j:端,j)中,1)* droptol'droptol'如果被忽略'类型''NOFILL'。默认值是0

michol 指示是否执行不完全改性的Cholesky

指示是否修改不完全的Cholesky(MIC)被执行。该字段可能'上'要么“关”。在进行MIC,对角进行补偿下降元素强制执行的关系A * E = L * L'* E哪里E =酮(尺寸(A,2),1)。默认值是“关”

diagcomp 执行不完全补偿的Cholesky与指定的系数

作为一个全球性的倾斜移动实时非负标α在形成不完全的Cholesky因素。也就是说,不是在执行未完成乔莱斯基,一个,的因式分解A +阿尔法* DIAG(DIAG(A))形成了。默认值是0

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

有效值“上”'降低'。如果“上”,只有?的上三角形一个被引用和[R被构造成使得一个由近似R'* R。如果'降低'被指定时,只的下三角一个被引用和大号被构造成使得一个由近似二'。默认值是'降低'

例子

全部收缩

本实施例中生成的不完全Cholesky分解。

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

N = 100;A = delsq(numgrid('S',N));

一个是上的100由-100正方形格子狄利克雷边界条件二维,五点离散拉普拉斯阴性。的大小一个98 * 98 = 9604(未10000为网格的边界来强加狄利克雷条件)。

无填充不完全Cholesky因式分解是包含在相同的位置,因为只有一个非零元素因式分解一个包含非零。这因式分解非常便宜来计算。虽然产品二'通常是从非常不同一个,产品二'将匹配一个其图案多达四舍五入。

L = ichol(A);范数(A-L * L”,“回回”)./范数(A,“回回”
ANS = 0.0916
范数(A-(L * L')。* spones(A),“回回”)./范数(A,“回回”
ANS = 4.9606e-17

ichol也可用于生成阈值下降的不完全Cholesky因子分解。随着滴度公差的降低,该因素往往会变得更致密,产品也会变得更致密二'往往是更好的逼近一个。下面的图显示作图下降公差以及不完全因子的密度与完整的Cholesky因数的密度之比不完全分解的相对误差。

N =尺寸(A,1);ntols = 20;droptol = LOGSPACE(-8,0,ntols);NRM =零(1,ntols);NZ =零(1,ntols);nzComplete = NNZ(CHOL(A,'降低'));对于1:ntols L = ichol(A,struct('类型''ICT''droptol',droptol(K)));NZ(K)= NNZ(L);NRM(k)的范数=(A-L * L”,“回回”)./范数(A,“回回”);结束图重对数(droptol全国抵抗运动,'行宽',2)标题('删除公差VS范数(A-L * L' ' '' 来回 '')./范数(A '' 来回 '')'

图semilogx(droptol,NZ。/ nzComplete,'行宽',2)标题(“滴差vs填充比ichol/chol”

的相对误差通常是相同的顺序下降公差上,尽管这不能保证。

这个例子说明了如何使用不完全Cholesky分解为预处理器,以提高收敛。

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

N = 100;A = delsq(numgrid('S',N));

创建一个不完全的Cholesky分解为预处理器PCG。使用常数向量的右手边。作为一个基准,执行PCG没有一个预处理器。

B =酮(尺寸(A,1),1);TOL = 1E-6;麦克斯特= 100;[X0,FL0,RR0,IT0,RV0] = PCG(A,B,TOL,麦克斯特);

注意FL0 = 1这表明PCG没有开车的相对残留在允许的最大迭代所要求的公差。尝试无填充不完全Cholesky分解为一个预处理。

L1 = ichol(A);[X1,FL1,RR1,IT1,RV1] = PCG(A,B,TOL,麦克斯特,L1,L1' );

FL1 = 0,表明PCG在59次迭代中收敛到所请求的公差(值IT1)。由于这个矩阵是离散拉普拉斯,然而,使用修改不完全的Cholesky可以创造更好的预处理器。一种改进的不完全Cholesky因式分解构造一个近似因式分解仍然能保持恒定向量操作者的动作。那是,范数(A * E-L *(L'* e))的大约等于零E =酮(尺寸(A,2),1)即使范数(A-L * L”, '来回')/常态(A, '来回')不接近于零。这是没有必要为这个语法,因为指定类型NOFILL是默认的,但它是很好的做法。

opts.type ='NOFILL';opts.michol ='上';L2 = ichol(A,OPTS);E =酮(尺寸(A,2),1);范数(A * E-L2 *(L2' * e))的
ANS = 3.7983e-14
[X2,FL2,RR2,IT2,RV2] = PCG(A,B,TOL,麦克斯特,L2,L2' );

PCG收敛(FL2 = 0),但在仅38次迭代。绘制所有三个收敛历史表明收敛。

semilogy(0:麦克斯特,RV0 /范数(b)中,'B'。);保持semilogy(0:IT1,RV1 /范数(b)中,'R'。);semilogy (0: it2 rv2. /规范(b),数 'k'。);传说(“不预调节器”'IC(0)''MIC(0)');

该图显示,修改后的不完全的Cholesky预调节器产生更快的收敛。

您还可以尝试降低阈值的不完全Cholesky分解。的收敛性PCG与各种降公差构造预处理器。

3 . c)【句意】'类型''ICT''droptol',1E-1));[X3的,FL3,RR3,IT3,RV3] = PCG(A,B,TOL,麦克斯特,L3,L3' );L4 = ichol(A,结构('类型''ICT''droptol',1E-2));[X4的,FL4,RR4,IT4,RV4] = PCG(A,B,TOL,麦克斯特,L4,L4' );L5 = ichol(A,结构('类型''ICT''droptol',1E-3));[X5,FL5,RR5,IT5,RV5] = PCG(A,B,TOL,麦克斯特,L5,L5' );图semilogy(0:麦克斯特,RV0 /范数(b)中,“b -”“线宽”2);保持semilogy(0:IT3,RV3 /范数(b)中,'B-'。“线宽”2);semilogy(0:IT4,RV4 /范数(b)中,'b--'“线宽”2);semilogy(0:IT5,RV5 /范数(b)中,'B:'“线宽”2);传说(“不预调节器”'ICT(1E-1)''ICT(1E-2)'...“ICT (1 e - 3)”'位置''东南');

注意与落忍构成不完全的Cholesky预处理器1E-2表示为ICT(1E-2)

由于与填零不完全Cholesky分解,阈值滴因式分解可以从改性中获益(即opts.michol = '上')因为矩阵产生从椭圆偏微分方程。与MIC(0)基于丢弃不完整的Cholesky改性阈值将保持恒定上矢量预处理器的作用,即范数(A * E-L *(L'* e))的将接近于零。

本实施例说明使用的diagcomp的选择ichol

不完全正定矩阵的Cholesky分解并不总是存在。下面的代码构造一个随机对称正定矩阵并试图使用求解线性系统PCG

S = RNG(“默认”);A = sprandsym(1000,1e-2,1e-4,1);RNG(S);B =全(总和(A,2));[X0,FL0,RR0,IT0,RV0] = PCG(A,B,1E-6100);

由于收敛没有达到,试图建立一个不完整的乔莱斯基预处理器。

L = ichol(A,结构('类型''ICT''droptol',1E-3));
错误使用ichol遇到非正支点。

如果ichol发生故障如上,你可以使用diagcomp构造移位不完全Cholesky分解的选项。也就是说,不去构造大号这样二'近似的一个ichol用对角补偿构造大号这样二'近似的M = A +阿尔法* DIAG(DIAG(A))没有形成明确中号。由于不完整的因式分解总是存在对角占优矩阵,α可以发现,使中号对角占优。

阿尔法= MAX(总和(ABS(A),2)./ DIAG(A)) -  2-
阿尔法= 62.9341
L1 = ichol(A,结构('类型''ICT''droptol',1E-3,“diagcomp”,α));[X1,FL1,RR1,IT1,RV1] = PCG(A,B,1E-6100,L1,L1' );

这里,PCG仍未收敛到迭代所需数量的范围内所需的能力,但是,如下所示的情节,融合是更好地为PCG与此预处理器比没有预处理器。选择较小的α可能会有帮助。对于一些实验,我们可以解决上一个合适的值α

α= 1;2 . c)【句意】'类型''ICT''droptol',1E-3,“diagcomp”,α));[X2,FL2,RR2,IT2,RV2] = PCG(A,B,1E-6100,L2,L2' );

现在,PCG收敛和曲线可以显示每个预条件收敛历史。

semilogy(0:100,RV0 /范数(b)中,。'B'。);保持;semilogy(0:100,RV1 /范数(b)中,。'R'。);semilogy (0: it2 rv2. /规范(b),数 'k'。);传说(“不预调节器”'\阿尔法\约63'“\阿尔法= 0.1”);xlabel(“迭代次数”);ylabel(“相对残余”);

提示

  • 作为用于线性方程组的系统中的预处理器被迭代方法,例如通过求解该例程给出的因子可能是有用PCG要么MINRES法

  • ichol仅适用于稀疏方阵

参考文献

[1]萨阿德优素福。“预处理技术。”迭代法稀疏线性。PWS出版公司,1996。

[2]曼陀菲尔,T.A.“一个不完全分解技术来正定线性系统。”数学。COMPUT。34岁,473 - 497年,1980年。

也可以看看

|||