45.bicgstabl函数
在MATLAB中,提供了bicgstabl函数实现双共轭梯度稳定法。函数的语法格式为:
x=bicgstabl(A,b):针对x对线性方程组A∗x=b求解。n×n系数矩阵A必须是方阵,并且右侧列向量b的长度必须为n。
x=bicgstabl(afun,b):接收函数句柄afun而不是矩阵A。afun(x)接收向量输入x,并返回矩阵与向量积A∗x。在以下所有语法中,可以使用afun替换A。
x=bicgstabl(A,b,tol):指定该方法的容差。如果tol为[],bicgstabl使用默认值1e-6。
x=bicgstabl(A,b,tol,maxit):指定最大迭代次数。如果maxit为[],bicgstabl使用默认值min(N,20)。
x=bicgstabl(A,b,tol,maxit,M)和x=bicgstabl(A,b,tol,maxit,M1,M2):使用预设子条件M或M=M1∗M2,并高效求解方程组A∗inv(M)∗x=b。如果M为[],则不会应用预设子条件。M可以是返回M\x的函数句柄。
x=bicgstabl(A,b,tol,maxit,M1,M2,x0):指定初始估计值。如果x0为[],bicgstabl使用默认值(即全部为零的向量)。
[x,flag]=bicgstabl(A,b,…):也返回一个收敛flag,其取值及值的含义与表1-1相同。
[x,flag,relres]=bicgstabl(A,b,…):如果flag为0,relres≤tol,还返回相对残差norm(b-A∗x)/norm(b)。
[x,flag,relres,iter]=bicgstabl(A,b,…):还返回计算x时所达到的迭代次数,其中0≤iter≤maxit。iter可以为k/4,其中k是某个整数,指示迭代执行到指定的1/4时收敛。
[x,flag,relres,iter,resvec]=bicgstabl(A,b,…):还返回每次迭代执行到1/4时的残差范数的向量(包括norm(b-A∗x0))。
【例1-47】使用带有输入或函数的bicgstabl。
运行程序,输出如下:
bicgstabl在解的迭代6.3处收敛,并且相对残差为1.4e-16。