共轭梯度法求解线性方程组

1.1算法原理及程序框图

当线性方程组Ax= b的系数矩阵A是对称正定矩阵时,可以采用共轭梯度法对该方程组进行求解,可以证明,式(1)所示的n元二次函数

                                       (1)      

取得极小值点x*是方程Ax= b的解。共轭梯度法是把求解线性方程组的问题转化为求解一个与之等价的二次函数极小值的问题。从任意给定的初始点出发,沿一组关于矩阵A的共轭方向进行线性搜索,在无舍入误差的假定下,最多迭代n次(其中n为矩阵A的阶数),就可求得二次函数的极小点,也就求得线性方程组Ax= b的解。其迭代格式为:

                                        (2)     

经过一系列的证明和简化,最终可得共轭梯度法的计算过程如下:

(1) 给定初始计算向量x(0)即精度ε>0;

(2) 计算r(0)= b-Ax(0),取d(0) =r(0)

(3) for k =0 to n-1 do

(i);

(ii);

(iii);

(iv)

(v);

(vi);

End do

计算程序如下:

1.2程序使用说明

共轭梯度法求解线性方程组的matlab已提交,该程序可以求解系数矩阵为对称正定矩阵的线性方程组。直接双击打开程序软件即可,在程序中根据问题需要更改系数矩阵A和矩阵b(直接输入矩阵或者用简单命令生成矩阵)。根据计算需要修改计算精度eps,点击运行即可得到结果。

1.3算例计算

选择课本第113页计算习题3.2计算。例题要求在N=100,N=200,N=400下的计算结果,以N=200为例先将N=100和N=400注释掉,通过diag()命令生成矩阵A和b,运行计算结果。当n=100,n=200,n=400时分别需要迭代的次数是50次,100次,200次,x的各元素为1。

% ** 文件名:Conjugate Gradient.m
% 
% ** 日 期:2016.12.14
% 
% ** 描 述:共轭梯度法解线性方程组(Conjugate Gradient method)
% 
% ** 函数:113页计算实习3.2  
% 
% ** 参考教材:《数值分析》李乃成,梅立泉,科学出版社
%
clear;
clc;
%%
%获得需要的N阶矩阵A
N=100; %解向量的维数
%N=200;
%N=400;
a0=eye(N);%a0为n阶的单位阵
a1=eye(N-1);%a1为n-1阶的单位阵
a11=diag(a1);%a11是a1的单位阵的元素
a12=diag(a11,1);%a12是一个把a11的值放到其对角阵上一层的 矩阵
A=a12'+a12+(-2)*a0;%A是对角线及其对角线上下(第n-1,n+1条对角线)有元素的矩阵
%%
%获得矩阵b
b=zeros(N,1);
b(1)=-1;
b(N)=-1;
b;
%%  
fprintf('库函数计算结果:');
x=inv(A)*b      %库函数计算结果
x=zeros(N,1);%迭代近似向量
eps=0.0000001;%精度
r=b-A*x;
d=r;
for k=0:N-1
    fprintf('第%d次迭代:',k+1);
    a=(norm(r)^2)/(d'*A*d)
    x=x+a*d;
    rr=b-A*x;    %rr=r(k+1)
    if (norm(rr)<=eps)||(k==N-1)
        break;
    end
    B=(norm(rr)^2)/(norm(r)^2);
    d=rr+B*d;
    r=rr;
end
x
    
%由上述结果可知方程组由共轭梯度法求解所得的解与计算机直接计算所得的解相同,
%故所得的的解释可靠的。
%当n=100,n=200,n=400时分别需要迭代的次数是50次,100次,200次



  • 7
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值