|
求解线性方程组的非线性迭代方法包括预条件法与共轭梯度法等。
1.共轭梯度法
MATLAB提供了cgs函数对方程组进行共轭梯度法求解,该函数的调用格式如下:
- x=cgs(A,b)
- cgs(A,b,tol)
- cgs(A,b,tol,maxit)
- cgs(A,b,tol,maxit,M)
- cgs(A,b,tol,maxit,M1,M2)
- cgs(A,b,tol,maxit,M1,M2,x0)
- [x,flag]=cgs(A,b,...)
- [x,flag,relres]=cgs(A,b,...)
- [x,flag,relres,iter]=cgs(A,b,...)
- [x,flag,relres,iter,resvec]=cgs(A,b,...)
复制代码 其中,A为系数矩阵(必须为方阵);b为方程右项常数向量;tol为误差,默认为1e-6;maxit为最大迭代次数,默认为20;M或M=M1*M2用来进行inv(M)*A*x= inv(M)*b替代,称为预条件,默认为[];x0为初始值,默认为零向量;x为返回的解向量;flag为收敛判定标识;iter为迭代次数;resvec为残余向量。
例10-4,使用共轭梯度法求解方程组。
在命令行窗口输入:
- A=magic(3);
- b=[71011]';
- tol=1e-12;maxit=15;
- M1=diag([111]);
- x=cgs(A,b,tol,maxit,M1)
复制代码 输出结果如下:
- cgs converged at iteration 3 to a solution with relative residual 4.7e-14.
- x = 0.2889
- 0.9556
- 0.6222
复制代码 2.预条件共轭梯度法
MATLAB提供了pcg函数对方程组进行预条件共轭梯度法求解,该函数的调用格式如下:
- x=pcg(A,b)
- pcg(A,b,tol)
- pcg(A,b,tol,maxit)
- pcg(A,b,tol,maxit,M)
- pcg(A,b,tol,maxit,M1,M2)
- pcg(A,b,tol,maxit,M1,M2,x0)
- [x,flag]=pcg(A,b,...)
- [x,flag,relres]=pcg(A,b,...)
- [x,flag,relres,iter]=pcg(A,b,...)
- [x,flag,relres,iter,resvec]=pcg(A,b,...)
复制代码 其中,A为系数矩阵(必须为方阵);b为方程右项常数向量;tol为误差,默认为1e-6;maxit为最大迭代次数,默认为20;M或M=M1*M2用来进行inv(M)*A*x= inv(M)*b替代,称为预条件,默认为[];x0为初始值,默认为零向量;x为返回的解向量;flag为收敛判定标识;iter为迭代次数;resvec为残余向量。
例10-5,使用预条件共轭梯度法求解方程组示例。
在命令行窗口输入:
- A=hilb(3);
- b=[71011]';
- tol=1e-12;maxit=15;
- M1=diag([111]);
- x=pcg(A,b,tol,maxit,M1)
复制代码 输出结果如下:- pcg converged at iteration 3 to a solution with relative residual 2.4e-13.
- x = 33.0000
- -312.0000
- 390.0000
复制代码
|
|