双共轭梯度稳定(l)的方法
x = bicgstabl (A, b)
x = bicgstabl (afun, b)
x = bicgstabl (A, b, tol)
x = bicgstabl (A, b,托尔,麦克斯特)
x = bicgstabl (A, b,托尔,麦克斯特,米)
x = bicgstabl (A, b,托尔,麦克斯特,M1, M2)
x = bicgstabl (A, b,托尔,麦克斯特,M1, M2, x0)
[x,国旗]= bicgstabl (A, b,…)
[x,国旗,relres] = bicgstabl (A, b,…)
[x,国旗,relres, iter] = bicgstabl (A, b,…)
[x,国旗,relres, iter resvec] = bicgstabl (A, b,…)
x = bicgstabl (A, b)
试图解决线性方程组A * x =
为x
。的n
——- - - - - -n
系数矩阵一个
必须广场和右边列向量b
一定的长度n
。
x = bicgstabl (afun, b)
接受一个函数处理afun
而矩阵的一个
。afun (x)
接受一个向量输入x
并返回的乘积* x
。在所有的语法后,你可以替换一个
通过afun
。
x = bicgstabl (A, b, tol)
指定的公差的方法。如果托尔
[],那么bicgstabl
使用默认1 e-6。
x = bicgstabl (A, b,托尔,麦克斯特)
指定的最大迭代数。如果麦克斯特
[],那么bicgstabl
使用默认的,分钟(N, 20)
。
x = bicgstabl (A, b,托尔,麦克斯特,米)
和x = bicgstabl (A, b,托尔,麦克斯特,M1, M2)
使用预调节器米
或M = M1 *平方米
和有效地解决系统*发票(M) * x = b
对x。米
[]然后预调节器不适用。米
可能是一个函数处理返回M \ x
。
x = bicgstabl (A, b,托尔,麦克斯特,M1, M2, x0)
指定初始猜测。如果x0
[],那么bicgstabl
使用默认的所有零向量。
[x,国旗]= bicgstabl (A, b,…)
还返回一个收敛国旗
:
国旗 |
收敛 |
---|---|
|
bicgstabl 聚集到所需的公差托尔 在麦克斯特 迭代。 |
|
bicgstabl 迭代麦克斯特 次但没有收敛。 |
|
预调节器米 坏脾气的。 |
|
|
|
一个标量计算期间 |
[x,国旗,relres] = bicgstabl (A, b,…)
还返回相对剩余规范(b * x) /规范(b)
。如果国旗
是0
,relres < =托尔
。
[x,国旗,relres, iter] = bicgstabl (A, b,…)
还返回的迭代次数x
计算,0 < = iter < =麦克斯特
。iter
可以k / 4
在哪里k
是一个整数,表示在给定的季度迭代收敛。
[x,国旗,relres, iter resvec] = bicgstabl (A, b,…)
还返回一个向量的残留标准在每个季度迭代,包括规范(b * x0)
。
你可以通过直接输入bicgstabl
:
n = 21;一个=画廊(wilk, n);b =和(2);托尔= 1 e-12;麦克斯特= 15;M =诊断接头(1 1:10][10:1:1);x = bicgstabl (A, b,托尔,麦克斯特,米);
你也可以用一个矩阵向量乘积函数:
函数y = afun (x, n) y = 0;x (1: n - 1)] + [((n - 1) / 2: 1:0) ';(1:(n - 1) / 2)”)。* x + [x (2: n);0);
和一个预调节器backsolve功能:
函数y = mfun y = r (r, n)。/ (((n - 1) / 2: 1:1);1;(1:(n - 1) / 2) ');
作为输入,bicgstabl
:
x1 = bicgstabl (@ (x) afun (x, n), b,托尔,麦克斯特,@ (x) mfun (x, n));
这个例子演示了使用预调节器。
负载west0479
,一个真正的479 - 479年-非对称稀疏矩阵。
负载west0479;一个= west0479;
定义b
这真正的解决方案是一个向量的。
b =全(sum (A, 2));
宽容和最大迭代数。
托尔= 1 e-12;麦克斯特= 20;
使用bicgstabl
找到一个解决方案在请求的宽容和迭代次数。
(x0, fl0 rr0、it0 rv0] = bicgstabl (A, b,托尔,麦克斯特);
fl0
是1,因为bicgstabl
不收敛到所请求的宽容1 e-12
在要求20迭代。事实上,的行为bicgstabl
很可怜的,最初的猜测(x0 = 0(大小(2),1)
)是最好的解决方案和返回的it0 = 0
。MATLAB®存储剩余历史rv0
。
情节的行为bicgstabl
。
semilogy(0:0.25:麦克斯特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] = bicgstabl (A, b,托尔,麦克斯特,L, U);
fl1
是0,因为bicgstabl
驱动器的相对剩余1.0257 e - 015
的值(rr1
)。相对残差小于规定的公差1 e-12
在第六次迭代(的价值it1
)当预处理算子的不完全LU分解与宽容的下降1 e-6
。输出rv1 (1)
是规范(b)
,输出rv1 (9)
是规范(b * x2)
自bicgstabl
使用季度迭代。
你可以遵循的进步bicgstabl
通过绘制相对残差在每个迭代中从最初的估计(迭代数0)。
semilogy (0:0.25: it1 rv1 /规范(b),“o”);甘氨胆酸h =;h。XTick = 0:0.25: it1;包含(的迭代次数);ylabel (的相对剩余的);