主要内容

研究生院理事会

求解线性方程组-共轭梯度平方法

描述

x=研究生院理事会(一个b试图解线性方程组A * x =x使用共轭梯度平方法.当尝试成功时,研究生院理事会显示确认收敛的消息。如果研究生院理事会由于任何原因,在迭代或停止的最大次数之后未能收敛,它将显示包含相对剩余量的诊断消息规范(b * x) /规范(b)以及方法停止时的迭代数。

x=研究生院理事会(一个b托尔指定方法的公差。默认容忍度为1 e-6

x=研究生院理事会(一个b托尔麦克斯特指定要使用的最大迭代次数。研究生院理事会显示诊断消息,如果它未能在内部聚合麦克斯特迭代。

例子

x=研究生院理事会(一个b托尔麦克斯特指定预处理矩阵和计算x通过有效地求解方程组 一个 1 y b y,在那里 y x .采用预调节器矩阵可以提高问题的数值性质和计算效率。

例子

x=研究生院理事会(一个b托尔麦克斯特M1平方米指定预处理矩阵的因子这样M = M1 *平方米

x=研究生院理事会(一个b托尔麦克斯特M1平方米x0指定解向量的初始猜测x.默认是一个零向量。

例子

x国旗研究生院理事会]= (___返回一个标志,该标志指定算法是否成功聚合。当国旗= 0在美国,融合是成功的。您可以将此输出语法与前面的任何输入参数组合一起使用。当你指定国旗输出,研究生院理事会不显示任何诊断消息。

例子

x国旗relres研究生院理事会]= (___也返回相对残差规范(b * x) /规范(b).如果国旗0,然后relres < =托尔

例子

x国旗relresiter研究生院理事会]= (___也返回迭代数iter在这x是计算。

例子

x国旗relresiterresvec研究生院理事会]= (___还返回每个迭代的残差规范向量,包括第一个残差规范(b * x0)

例子

全部折叠

求解一个正方形线性系统研究生院理事会使用默认设置,然后调整解决方案过程中使用的容忍度和迭代次数。

创建一个随机稀疏矩阵一个密度为50%。的右边也创建一个随机向量 斧头 b

rng默认的5 = sprand (600600);A = A'*A + speye(size(A));b =兰德(600 1);

解决 斧头 b 使用研究生院理事会.输出显示包括相对剩余误差的值 b - 斧头 b

研究生院理事会x = (A, b);
CGS在第20次迭代时停止,没有收敛到所需的公差1e-06,因为已经达到了最大的迭代数。返回的迭代(数字20)的相对残差为0.068。

默认情况下研究生院理事会使用20次迭代和一个公差1 e-6,算法在此矩阵的20次迭代中无法收敛。由于残差仍然很大,这是一个很好的指标,说明需要更多的迭代(或预处理矩阵)。您还可以使用更大的容忍度,以使算法更容易收敛。

再用一个公差求解系统1的军医和40迭代。

研究生院理事会x = (A, b, 1的军医,40);
CGS在迭代40时停止,没有收敛到期望的公差0.0001,因为已经达到了最大的迭代数。返回的迭代(数字40)相对剩余0.0024。

即使有更宽松的容忍度和更多的迭代研究生院理事会不收敛。当迭代算法以这种方式停止时,这是一个很好的指示,预处理矩阵是需要的。

的不完全Cholesky因子分解一个,并使用l因子作为对的前置条件输入研究生院理事会

L = ichol(一个);x =研究生院理事会(A, b, 1的军医,40岁,左);
CGS在迭代14收敛到一个相对残差为1.4e-05的解。

使用预调节器改善了问题的数值性质,足以研究生院理事会能够收敛。

检查使用预处理矩阵的效果研究生院理事会解一个线性方程组。

负载west0479,一个真正的479 × 479非对称稀疏矩阵。

负载west0479一个= west0479;

定义b所以真正的解是 斧头 b 是所有1的向量。

b =和(2);

设置容忍和最大迭代数。

托尔= 1 e-12;麦克斯特= 20;

使用研究生院理事会在要求的容忍和迭代次数上找到解决方案。指定5个输出以返回关于解决方案过程的信息:

  • x计算的解是A * x =

  • fl0是一个指示算法是否收敛的标志。

  • rr0是计算结果的相对残差吗x

  • it0迭代数是什么时候x是计算。

  • rv0是矢量的残史为 b - 斧头

[x, fl0 rr0, it0 rv0] =研究生院理事会(A, b,托尔,麦克斯特);fl0
fl0 = 1
rr0
rr0 = 1
it0
it0 = 0

fl01因为研究生院理事会不符合要求的宽容吗1 e-12在要求的20次迭代中。事实上,行为研究生院理事会是如此的可怜,以至于最初的猜测x0 = 0(大小(2),1)是最佳的解决方案,并返回,如所示it0 = 0

为了提高收敛速度,您可以指定预处理矩阵。自一个非对称,使用ilu生成预处理因子 l U .指定一个删除容错性以忽略值小于的非对角项1 e-6.解预处理系统 一个 - 1 x b 通过指定lU作为输入,研究生院理事会

设置=结构(“类型”“ilutp”“droptol”1 e-6);[L U] = ilu(一个,设置);(x1, fl1 rr1、it1 rv1] =研究生院理事会(A, b,托尔,麦克斯特,L, U);fl1
fl1 = 0
rr1
rr1 = 4.3850 e-14
it1
it1 = 3

an的使用ilu预处理剂产生的相对残余量小于规定的公差1 e-12在第三次迭代中。输出rv1 (1)规范(b),和输出rv1(结束)规范(b * x1)

你可以跟着进度研究生院理事会通过绘制每次迭代的相对残差。用一条线标出每个解决方案的剩余历史,以表示指定的公差。

semilogy(0:长度(rv0) 1, rv0 /规范(b),“o”)举行semilogy(0:长度(rv1) 1, rv1 /规范(b),“o”) yline(托尔,“r——”);传奇(“没有预调节器”ILU预处理的“宽容”“位置”“东”)包含(的迭代次数) ylabel (的相对剩余的

检查供应的效果研究生院理事会对解的初步猜测。

创建一个三对角稀疏矩阵。用每一行的和作为右边的向量 斧头 b 所以期望的解 x 是1的向量。

n = 900;e =的(n - 1);A = spdiads ([e 2*e],-1:1,n,n);b =和(2);

使用研究生院理事会来解决 斧头 b 两次:一次使用默认的初始猜测,另一次使用解决方案的良好初始猜测。对两个解决方案使用200次迭代和默认容忍度。金宝搏官方网站指定第二个解决方案中的初始猜测为一个所有元素等于的向量0.99

麦克斯特= 200;x1 =研究生院理事会(A, b,[],麦克斯特);
CGS在迭代17收敛到一个相对残差为8.8e-07的解。
x0 = 0.99 * e;x2 =研究生院理事会(A, b,[],麦克斯特[],[],x0);
CGS在迭代4收敛到一个相对残差8e-07的解。

在这种情况下,提供初始猜测是可行的研究生院理事会更快地收敛。

返回中间结果

您还可以通过调用初始猜测来获得中间结果研究生院理事会在一个循环。每次对求解器的调用都执行一些迭代并存储计算出的解决方案。然后使用该解决方案作为下一批迭代的初始向量。

例如,这段代码执行4次100次迭代,并在每次通过For循环后存储解决方案向量:

x0 = 0(大小(2),1);托尔= 1 e-8;麦克斯特= 100;k = 1:4 [x,国旗,relres] =研究生院理事会(A, b,托尔,麦克斯特[],[],x0);X = X (:, k);R (k) = relres;x0 = x;结束

X (:, k)求解向量是在迭代时计算的吗kfor循环,和R (k)是该解的相对残差。

通过提供求解线性系统研究生院理事会用一个函数句柄计算* x代替系数矩阵一个

生成的威尔金森测试矩阵之一画廊是一个21乘21的三对角矩阵。预览矩阵。

一个=画廊(“wilk”, 21)
一个=21日×2110 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 8 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0121000000 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 ⋮

威尔金森矩阵有一个特殊的结构,所以你可以表示这个操作* x用一个函数句柄。当一个乘以一个向量,结果向量中的大部分元素都是零。结果中的非零元素对应于的非零三对角元素一个.而且,只有主对角线有不等于1的非零值。

表达式 斧头 就变成:

斧头 10 1 0 0 0 1 9 1 0 0 0 1 8 1 0 0 1 7 1 0 0 1 6 1 0 0 1 5 1 0 0 1 4 1 0 0 1 3. 0 0 0 1 0 0 0 1 10 x 1 x 2 x 3. x 4 x 5 x 21 10 x 1 + x 2 x 1 + 9 x 2 + x 3. x 2 + 8 x 3. + x 4 x 19 + 9 x 20. + x 21 x 20. + 10 x 21

得到的向量可以写成三个向量的和:

斧头 0 + 10 x 1 + x 2 x 1 + 9 x 2 + x 3. x 2 + 8 x 3. + x 4 x 19 + 9 x 20. + x 21 x 20. + 10 x 21 + 0 0 x 1 x 20. + 10 x 1 9 x 2 10 x 21 + x 2 x 21 0

在MATLAB®中,编写一个函数,创建这些向量并将它们相加,从而得到的值* x

函数Y = afun(x) Y = [0;x (1:20)] +...[(10: 1:0) ';(1:10) ']。* x +...[x (21);0);结束

(这个函数在示例的末尾被保存为一个本地函数。)

现在,解线性方程组 斧头 b 通过提供研究生院理事会用函数句柄计算* x.使用公差1 e-12和50迭代。

1 b = 1(21日);托尔= 1 e-12;麦克斯特= 50;x1 =研究生院理事会(@afun, b,托尔,麦克斯特)
CGS在迭代11收敛到一个相对残差1.3e-14的解。
x1 =21日×10.0910 0.0899 0.0999 0.1109 0.1241 0.1443 0.1544 0.2383 0.1309 0.5000⋮

检查afun (x1)产生一个向量1。

afun (x1)
ans =21日×11.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000 1.0000⋮

本地函数

函数Y = afun(x) Y = [0;x (1:20)] +...[(10: 1:0) ';(1:10) ']。* x +...[x (21);0);结束

输入参数

全部折叠

系数矩阵,指定为方阵或函数句柄。这个矩阵是线性方程组中的系数矩阵A * x =.一般来说,一个是一个大型稀疏矩阵或返回大型稀疏矩阵和列向量的乘积的函数句柄。

指定一个作为函数句柄

您可以选择将系数矩阵指定为函数句柄而不是矩阵。该函数处理返回矩阵-向量乘积,而不是形成整个系数矩阵,使计算效率更高。下载188bet金宝搏

要使用函数句柄,请使用函数签名函数y = afun(x)参数化功能解释如何向函数提供附加参数afun,如果必要的。函数调用afun (x)的值必须返回* x

数据类型:|function_handle
复数的支持:金宝app是的

线性方程的右边,用列向量表示。的长度b必须等于大小(1)

数据类型:
复数的支持:金宝app是的

方法公差,指定为正标量。使用此输入可以在计算中权衡准确性和运行时间。研究生院理事会必须满足允许的迭代数量内的容忍度才能成功。更小的值托尔意味着要使计算成功,答案必须更精确。

数据类型:

最大迭代次数,指定为正标量整数。增加…的价值麦克斯特允许更多的迭代研究生院理事会为了满足公差托尔.一般来说,较小的值托尔意味着需要更多的迭代才能成功完成计算。

前置矩阵,作为矩阵或函数句柄的单独参数指定。你可以指定一个预处理矩阵或者它的矩阵因子M = M1 *平方米改进线性系统的数值方面,使它更容易研究生院理事会快速收敛。您可以使用不完全矩阵分解函数iluichol生成预处理矩阵。你也可以用平衡分解前要改进矩阵系数的条件数。有关预处理程序的更多信息,请参见线性系统的迭代方法

研究生院理事会将未指定的预处理程序视为恒等矩阵。

指定作为函数句柄

您可以选择指定其中任何一个M1,或平方米作为函数处理而不是矩阵。函数句柄执行矩阵-向量运算,而不是形成整个预处理矩阵,使计算效率更高。

要使用函数句柄,请使用函数签名函数y = mfun(x)参数化功能解释如何向函数提供附加参数mfun,如果必要的。函数调用mfun (x)的值必须返回M \ xM1、M2 \ (x)

数据类型:|function_handle
复数的支持:金宝app是的

初始猜测,指定为长度等于的列向量大小(2).如果你能提供研究生院理事会有一个更合理的初步猜测x0与默认的零向量相比,可以节省计算时间,加快算法的收敛速度。

数据类型:
复数的支持:金宝app是的

输出参数

全部折叠

线性系统解,作为列向量返回。这个输出给出了线性系统的近似解A * x =.如果计算成功(国旗= 0),然后relres小于或等于托尔

当计算不成功时(国旗~ = 0),解决方案x返回的研究生院理事会是在所有迭代中计算的残差范数最小的那个。

收敛标志,作为该表中的标量值之一返回。收敛标志表明计算是否成功,并区分几种不同形式的失败。

标志值

收敛

0

成功——研究生院理事会收敛于所需的公差托尔麦克斯特迭代。

1

失败- - - - - -研究生院理事会迭代麦克斯特迭代但不收敛。

2

故障-预处理矩阵M = M1 *平方米是病态的。

3.

失败- - - - - -研究生院理事会停滞后,两个连续的迭代是相同的。

4

失败-由。计算的标量之一研究生院理事会算法变得太小或太大,无法继续计算。

作为标量返回的相对剩余误差。相对剩余误差relres =规范(b * x) /规范(b)说明了答案有多准确。如果计算收敛到公差托尔麦克斯特迭代,然后relres < =托尔

数据类型:

迭代数,作为标量返回。此输出指示计算出的答案所处的迭代数x计算了。

数据类型:

残余误差,作为向量返回。剩余误差规范(b * x)揭示了对于给定的值,算法接近收敛的程度x.元素的数量resvec等于迭代的次数。您可以检查内容resvec来帮助决定是否更改托尔麦克斯特

数据类型:

更多关于

全部折叠

共轭梯度平方法

共轭梯度平方(CGS)算法是对双共轭梯度(BiCG)算法的改进。代替使用残差和它的共轭,CGS算法避免使用转置系数矩阵的平方残差[1]。

CGS在与BiCG相同的计算代价下获得更快的收敛速度,但会有不规则的收敛行为,特别是当初始猜测接近解时[1]

提示

  • 大多数迭代方法的收敛取决于系数矩阵的条件数,气孔导度(A).您可以使用平衡改善条件的数量一个,就其本身而言,这使得大多数迭代求解器更容易收敛。然而,使用平衡当你随后分解平衡矩阵时,也会导致更好质量的预处理矩阵B = R * P * * C

  • 您可以使用矩阵重新排序函数,例如解剖symrcm当对系数矩阵因式分解时,对系数矩阵的行和列进行排列,并使非零的数目最小化,以生成预处理因子。这可以减少后续求解预处理线性系统所需的内存和时间。

参考文献

[1]巴雷特,R., M.贝瑞,T. F. Chan等人,求解线性系统的模板:迭代方法的构建块, SIAM,费城,1994年。

Peter [2] Sonneveld,“CGS:非对称线性系统的快速lanczos型求解器”暹罗j .科学。Stat。第一版。, 1989年1月,第10卷第1期,第36-52页。

扩展功能

之前介绍过的R2006a