文档

研究生院理事会

共轭梯度平方法

语法

研究生院理事会x = (A, b)
研究生院理事会(A, b, tol)
研究生院理事会(A, b,托尔,麦克斯特)
研究生院理事会(A, b,托尔,麦克斯特米)
研究生院理事会(A, b,托尔,麦克斯特,M1, M2)
研究生院理事会(A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗]=研究生院理事会(A, b,…)
[x,国旗,relres] =研究生院理事会(A, b,…)
[x,国旗,relres, iter] =研究生院理事会(A, b,…)
[x,国旗,relres, iter resvec] =研究生院理事会(A, b,…)

描述

研究生院理事会x = (A, b)试图解线性方程组A * x =x.的n——- - - - - -n系数矩阵一个必须是方形的,并且应该是大而稀疏的。列向量b一定的长度n.您可以指定一个作为函数句柄,afun,这样afun (x)返回* x

参数化功能解释如何向函数提供附加参数afun,以及预处理函数mfun如有必要,请描述如下。

如果研究生院理事会收敛时,将显示具有此效果的消息。如果研究生院理事会未能在最大迭代次数后收敛或因任何原因停止,将打印一个警告消息,显示相对残留规范(b * x) /规范(b)以及方法停止或失败的迭代次数。

研究生院理事会(A, b, tol)指定方法的公差,托尔.如果托尔[],然后研究生院理事会使用默认的,1 e-6

研究生院理事会(A, b,托尔,麦克斯特)指定最大迭代次数,麦克斯特.如果麦克斯特[]然后研究生院理事会使用默认的,分钟(n, 20)

研究生院理事会(A, b,托尔,麦克斯特米)研究生院理事会(A, b,托尔,麦克斯特,M1, M2)使用预调节器M = M1 *平方米并有效地解决了该系统发票(M) * * x =发票(M) * bx.如果[]然后研究生院理事会适用于没有预调节器。可以是函数句柄吗mfun这样mfun (x)返回M \ x

研究生院理事会(A, b,托尔,麦克斯特,M1, M2, x0)指定初始猜测x0.如果x0[],然后研究生院理事会使用默认的全零向量。

[x,国旗]=研究生院理事会(A, b,…)返回一个解决方案x还有一面旗子,用来描述研究生院理事会

国旗

收敛

0

研究生院理事会收敛到期望的公差托尔麦克斯特迭代。

1

研究生院理事会迭代麦克斯特时代却没有收敛。

2

预调节器坏脾气的。

3.

研究生院理事会停滞不前。(两个连续的迭代是相同的。)

4

期间计算的标量之一研究生院理事会变得太小或太大而无法继续计算。

每当国旗不是0,解决方案x返回的是在所有迭代中计算的最小范数残差。如果没有显示任何消息国旗输出指定。

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

[x,国旗,relres, iter] =研究生院理事会(A, b,…)也返回其所在的迭代数x计算,0 <= iter <= maxit

[x,国旗,relres, iter resvec] =研究生院理事会(A, b,…)在每次迭代时,还返回一个剩余规范向量,包括规范(b * x0)

例子

使用cgs与矩阵输入

一个=画廊(wilk, 21);b =和(2);托尔= 1 e-12;麦克斯特= 15;M1 = diag([10:-1:1 1:1 10]);x =研究生院理事会(A, b,托尔,麦克斯特,M1);

显示的消息

CGS在迭代13时收敛到一个相对残差为2.4e-016的解。

使用带有函数句柄的cgs

这个例子代替了矩阵一个在前面的例子中,有一个矩阵向量乘积函数的句柄afun,和前置词M1使用反解函数的句柄mfun.该文件中包含该示例run_cgs

  • 调用研究生院理事会使用函数句柄@afun作为第一个论点。

  • 包含afun作为一个嵌套函数,以便所有的变量run_cgs可用于afunmyfun

下面显示的代码run_cgs

函数x1 = run_cgs n = 21;b = afun ((n, 1));托尔= 1 e-12;麦克斯特= 15;x1 =研究生院理事会(@afun, b,托尔,麦克斯特@mfun);函数y = afun(x) y = [0;x (1: n - 1) +…(((n - 1) / 2: 1:0) ';(1: (n - 1) / 2)”)。* x +……[x (2: n); 0]; end function y = mfun(r) y = r ./ [((n-1)/2:-1:1)'; 1; (1:(n-1)/2)']; end end

当你进入

x1 = run_cgs

MATLAB®软件的回报

CGS在迭代13时收敛到一个相对残差为2.4e-016的解。

使用cgs和预处理器。

这个例子演示了前置条件的使用。

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

负载west0479;一个= west0479;

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

b =全(sum (A, 2));

设置容忍和最大迭代次数。

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

使用研究生院理事会在要求的容忍度和迭代次数下找到解决方案。

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

fl0是1,因为研究生院理事会不符合要求的公差1 e-12在要求的20次迭代中。其实,这种行为研究生院理事会是如此的可怜,以至于最初的猜测(x0 = 0(大小(2),1)是最好的解决方案吗it0 = 0.MATLAB将剩余历史存储在其中rv0

绘制研究生院理事会

semilogy(0:麦克斯特,rv0 /规范(b),“o”);包含(的迭代次数);ylabel (的相对剩余的);

该图表明解不收敛。您可以使用前置条件来改善结果。

创建一个前置条件ilu,因为一个非对称。

[L U] = ilu(一、结构(“类型”“ilutp”“droptol”, 1 e-5));
有一个主元等于零。考虑降低滴差或考虑使用“udiag”选项。

MATLAB不能构造不完整的逻辑单元,因为它会导致奇异因子,作为预处理是无用的。

正如错误消息所指示的那样,您可以使用降低的丢包容忍度再次尝试。

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

fl1是0,因为研究生院理事会驱动相对残差到4.3851 e - 014的值(rr1).相对残留小于规定的公差1 e-12在第三次迭代时(值it1),以不完全LU分解为先决条件,滴差为1 e-6.输出rv1 (1)规范(b)和输出rv1 (14)规范(b * x2)

你可以跟着进度研究生院理事会通过绘制从初始估计(迭代数0)开始的每个迭代的相对残差。

semilogy (0: it1 rv1 /规范(b),“o”);包含(的迭代次数);ylabel (的相对剩余的);

参考文献

[1] Barrett, R., M. Berry, t.f. Chan, et al.,线性系统解的模板:迭代方法的构建块, SIAM,费城,1994。

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

之前介绍过的R2006a

这个话题有用吗?