文档

tfqmr

无转置拟极小残差法

语法

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 = Bx.如果[]那么就没有使用预处理条件。可能是一个函数句柄mfun这样mfun (x)返回m \ x

x = tfqmr (a, b,托尔,麦克斯特,m1, m2, x0)指定初始猜测。如果x0[]然后tfqmr使用默认值,一个全零向量。

[x,国旗]= tfqmr (A, B,…)也返回一个收敛标志:

国旗

收敛

0

tfqmr收敛于所需的公差托尔麦克斯特迭代。

1

tfqmr迭代麦克斯特时代却并不会聚。

2

预调节器坏脾气的。

3.

tfqmr停滞不前。(两个连续的迭代都是相同的。)

4

在过程中计算的标量之一tfqmr变得太小或太大,无法继续计算。

[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

这个例子展示了如何使用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);

使用tfqmr和预处理因子

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

负载一个= 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 (的相对剩余的);

请注意,如bicgstabtfqmr跟踪半迭代。这张图表明解不收敛。你可以使用前置条件来改善结果。

创建前置条件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 (的相对剩余的);

这个话题有用吗?