ichol

不完全Cholesky分解

句法

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

描述

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

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

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

输入参数

一个

稀疏矩阵

OPTS

多达五个领域的结构:

字段名称 摘要 描述
类型 分解的类型

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

droptol 落忍当类型为'ICT'

执行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,'降低'));对于K = 1:ntols L = ichol(A,结构('类型''ICT''droptol',droptol(K)));NZ(K)= NNZ(L);NRM(k)的范数=(A-L * L”,“回回”)./范数(A,“回回”);结束图双对数(droptol,NRM,'行宽',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与各种降公差构造预处理器。

L3 = ichol(A,结构('类型''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(1E-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与此预处理器比没有预处理器。选择较小的α可能会有帮助。对于一些实验,我们可以解决上一个合适的值α

阿尔法= 0.1;L2 = ichol(A,结构('类型''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。

也可以看看

|||