研究生院理事会
共轭梯度平方方法
语法
研究生院理事会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) * b
为x
。如果米
是[]
然后研究生院理事会
适用于没有预调节器。米
可以是一个函数处理mfun
这样mfun (x)
返回M \ x
。
研究生院理事会(A, b,托尔,麦克斯特,M1, M2, x0)
指定初始猜测x0
。如果x0
是[]
,然后研究生院理事会
使用默认值,一个零向量。
[x,国旗]=研究生院理事会(A, b,…)
返回一个解决方案x
和一个描述的收敛的标记研究生院理事会
。
国旗 |
收敛 |
---|---|
|
|
|
|
|
预调节器 |
|
|
|
一个标量计算期间 |
每当国旗
不是0
,解决方案x
返回的是剩余所有迭代计算以最小的标准。如果显示没有消息国旗
输出指定。
[x,国旗,relres] =研究生院理事会(A, b,…)
还返回相对剩余规范(b * x) /规范(b)
。如果国旗
是0
,然后relres < =托尔
。
[x,国旗,relres, iter] =研究生院理事会(A, b,…)
还返回的迭代次数x
计算,0 < = iter < =麦克斯特
。
[x,国旗,relres, iter resvec] =研究生院理事会(A, b,…)
还返回一个向量的残留标准在每个迭代中,包括规范(b * x0)
。
例子
用cg矩阵输入
一个=画廊(wilk, 21);b =和(2);托尔= 1 e-12;麦克斯特= 15;M1 =诊断接头(1 1:10][10:1:1);x =研究生院理事会(A, b,托尔,麦克斯特,M1);
显示的消息
cgs聚集在迭代13与相对剩余2.4 e - 016的解决方案。
使用cg和一个处理函数
这个例子中取代了矩阵一个
在前面的示例矩阵向量乘积函数的句柄afun
,预调节器M1
backsolve函数的句柄mfun
。中包含的示例文件run_cgs
那
调用
研究生院理事会
函数处理@afun
作为第一个参数。包含
afun
嵌套函数,这样所有的变量run_cgs
可用于afun
和myfun
。
以下显示的代码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.4 e - 016的解决方案。
使用cg预调节器。
这个例子演示了使用预调节器。
负载west0479
,一个真正的479 - 479年-非对称稀疏矩阵。
负载west0479;一个= west0479;
定义b
这真正的解决方案是一个向量的。
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));
错误使用ilu主等于零。考虑减少下公差或考虑使用“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]巴雷特,R。,米。Berry, T. F. Chan, et al., Templates for the Solution of Linear Systems: Building Blocks for Iterative Methods, SIAM, Philadelphia, 1994.
[2]Sonneveld,彼得,”研究生院理事会:快速Lanczos-type求解非对称线性系统,“暹j .科学。Stat。第一版。,January 1989, Vol. 10, No. 1, pp. 36–52.