无转置拟极小残差法
x = tfqmr (A, b)
x = tfqmr (afun, b)
x = tfqmr (a, b, tol)
x = tfqmr (a, b,托尔,麦克斯特)
x = tfqmr (a, b,托尔,麦克斯特,米)
x = tfqmr (a, b,托尔,麦克斯特,m1, m2, x0)
[x,国旗]= tfqmr (A, B,…)
[x,国旗,relres] = tfqmr (A, b,…)
[x,国旗,relres y] y (A, b,…)
[x,国旗,relres, iter resvec] = tfqmr (A, b,…)
x = tfqmr (A, b)
试图解线性方程组A * x =
为x
.的n
——- - - - - -n
系数矩阵一个
必须是平方,右边的列向量b
一定的长度n
.
x = tfqmr (afun, b)
接受一个函数句柄,afun
,而不是矩阵一个
.这个函数,afun (x)
,接受向量输入x
然后返回矩阵与向量的乘积* x
.在以下所有语法中,都可以替换一个
通过afun
.参数化功能解释如何向函数提供附加参数afun
.
x = tfqmr (a, b, tol)
指定方法的公差。如果托尔
是[]
然后tfqmr
使用默认值1e-6。
x = tfqmr (a, b,托尔,麦克斯特)
指定最大迭代次数。如果麦克斯特
是[]
然后tfqmr
使用默认的,分钟(N, 20)
.
x = tfqmr (a, b,托尔,麦克斯特,米)
和x = tfqmr (a, b,托尔,麦克斯特,m1, m2)
使用预调节器米
或m = m1 *平方米
并有效地求解系统*发票(M) * x = B
为x
.如果米
是[]
那么就没有使用预处理条件。米
可能是一个函数句柄mfun
这样mfun (x)
返回m \ x
.
x = tfqmr (a, b,托尔,麦克斯特,m1, m2, x0)
指定初始猜测。如果x0
是[]
然后tfqmr
使用默认值,一个全零向量。
[x,国旗]= tfqmr (A, B,…)
也返回一个收敛标志:
国旗 |
收敛 |
---|---|
|
|
|
|
|
预调节器 |
|
|
|
在过程中计算的标量之一 |
[x,国旗,relres] = tfqmr (A, b,…)
也返回相对残差规范(b * x) /规范(b)
.如果国旗
是0,那么relres < =托尔
.
[x,国旗,relres y] y (A, b,…)
也返回迭代数x
计算:0 <= iter <= maxit
.
[x,国旗,relres, iter resvec] = tfqmr (A, b,…)
还返回每个迭代的残差规范向量,包括规范(b * x0)
.
这个例子展示了如何使用tfqmr
用矩阵输入和函数输入。
n = 100;= 1 (n, 1);A = spdiags([-2*on 4*on],-1:1,n,n);b =和(2);托尔= 1 e-8;麦克斯特= 15;M1 = spdiags([on/(-2) on],-1:0,n,n);M2 = spdiads ([4*on -on],0:1,n,n); / /打开spdiadsx = tfqmr (A, b,托尔,麦克斯特,M1, M2, []);
你也可以使用矩阵向量积函数作为输入:
函数y = afun(x,n) y = 4 * x;Y (2:n) = Y (2:n) - 2 * x(1:n-1);Y (1:n-1) = Y (1:n-1) - x(2:n);x1 = tfqmr (@ (x) afun (x, n), b,托尔,麦克斯特,M1, M2);
如果applyOp
是否有适合使用的功能qmr
,可与tfqmr
通过将其包装在一个匿名函数中:
x1 = tfqmr (@ (x) applyOp (x,“notransp”),b,托尔,麦克斯特,M1, M2);
这个例子演示了前置条件的使用。
负载一个= west0479
,一个真正的479 × 479非对称稀疏矩阵。
负载west0479;一个= west0479;
定义b
所以真正的解是所有1的向量。
b =全(sum (A, 2));
设置容忍和最大迭代数。
托尔= 1 e-12;麦克斯特= 20;
使用tfqmr
在要求的容忍和迭代次数上找到解决方案。
(x0, fl0 rr0、it0 rv0] = tfqmr (A, b,托尔,麦克斯特);
fl0
是1,因为tfqmr
不符合要求的宽容吗1 e-12
在要求的20次迭代中。第17次迭代是最好的近似解,是所返回的it0 = 17
.MATLAB®将剩余的历史存储在rv0
.
绘制行为tfqmr
.
semilogy(0:麦克斯特,rv0(1:麦克斯特+ 1)/规范(b),“o”);包含(的迭代次数);ylabel (的相对剩余的);
请注意,如bicgstab
,tfqmr
跟踪半迭代。这张图表明解不收敛。你可以使用前置条件来改善结果。
创建前置条件ilu
,因为矩阵一个
非对称。
[L U] = ilu(一、结构(“类型”,“ilutp”,“droptol”, 1 e-5));
有一个主元等于零。考虑降低滴度或考虑使用“udiag”选项。
MATLAB无法构造不完全逻辑单元,因为它会产生一个奇异因子,而奇异因子作为预处理因子是无用的。
如错误消息所示,您可以再次尝试降低容错率。
[L U] = ilu(一、结构(“类型”,“ilutp”,“droptol”, 1 e-6));(x1, fl1 rr1、it1 rv1] = tfqmr (A, b,托尔,麦克斯特,L, U);
fl1
是0,因为tfqmr
驱动相对剩余到4.1410 e - 014
的值(rr1
).相对残余量小于规定的公差1 e-12
在第六次迭代时(的值it1
)时,采用不完全LU因子分解进行预处理,其液滴容限为1 e-6
.输出rv1 (1)
是规范(b)
,和输出rv1 (7)
是规范(b * x2)
.
你可以跟着进度tfqmr
从初始估计值(迭代数0)开始,绘制每次迭代的相对残差。
semilogy (0:0.5: it1 rv1 /规范(b),“o”);包含(的迭代次数);ylabel (的相对剩余的);