51.symmlq函数

在MATLAB中,提供了symmlq函数实现对称的LQ方法。函数的语法格式为:

x=symmlq(A,b):针对x对线性方程组A∗x=b求解。n×n系数矩阵A必须是对称的,但无须是正定的。此外,它还应是大型稀疏矩阵。列向量b必须具有长度n。可以将A指定为函数句柄afun,这样afun(x)将返回A∗x。

如果symmlq收敛,则会显示一条有关该结果的消息。如果symmlq无法在达到最大迭代次数后收敛或出于任何原因暂停,则会输出一条显示相对残差norm(b-A∗x)/norm(b)以及该方法停止或失败时所达到的迭代数的警告消息。

symmlq(A,b,tol):指定该方法的容差。如果tol为[],symmlq使用默认值1e-6。

symmlq(A,b,tol,maxit):指定最大迭代次数。如果maxit为[],symmlq使用默认值min(n,20)。

symmlq(A,b,tol,maxit,M)和symmlq(A,b,tol,maxit,M1,M2):使用对称正定预设子条件M或M=M1∗M2,并高效求解关于y的方程组inv(sqrt(M))∗A∗inv(sqrt(M))∗y=inv(sqrt(M))∗b,然后返回x=in(sqrt(M))∗y。如果M为[],symmlq不会应用预设子条件。M可以是函数句柄mfun,这样,mfun(x)返回M\x。

symmlq(A,b,tol,maxit,M1,M2,x0):指定初始估计值。如果x0为[],symmlq使用默认值(即全部为零的向量)。

[x,flag]=symmlq(A,b,…):也返回一个收敛标志,其取值见表1-4。

表1-4 flag取值

如果flag不为0,返回的解x具有在所有迭代中最小的范数残差。如果指定flag输出,则不会显示消息。

[x,flag,relres]=symmlq(A,b,…):还返回相对残差norm(b-A∗x)/norm(b)。如果flag=0,则relres≤tol。

[x,flag,relres,iter]=symmlq(A,b,…):还返回计算x时所达到的迭代数,其中0≤iter≤maxit。

[x,flag,relres,iter,resvec]=symmlq(A,b,…):还返回每次迭代中的symmlq残差范数估计值的向量(包括norm(b-A∗x0))。

[x,flag,relres,iter,resvec,resveccg]=symmlq(A,b,…):还返回每次迭代中的共轭梯度残差范数的估计值向量。

【例1-52】本示例演示如何使用带有矩阵输入的symmlq。

运行程序,输出如下:

     symmlq converged at iteration 49 to a solution with relative
     residual 4.3e-015
     symmlq在解的迭代49处收敛,并且相对残差为4.3e-15。