2支棒棒糖 发表于 2018-8-16 11:00:32

[Matlab数据分析]迭代法解线性方程组

求解线性方程组的非线性迭代方法包括预条件法与共轭梯度法等。
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)
=cgs(A,b,...)
=cgs(A,b,...)
=cgs(A,b,...)
=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=';
tol=1e-12;maxit=15;
M1=diag();
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.62222.预条件共轭梯度法

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)
=pcg(A,b,...)
=pcg(A,b,...)
=pcg(A,b,...)
=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=';
tol=1e-12;maxit=15;
M1=diag();
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
页: [1]
查看完整版本: [Matlab数据分析]迭代法解线性方程组