matlab的共轭梯度法
通过matlab编程,实现共轭梯度法算法
·
共轭梯度法属于求解线性方程组的一种迭代法,其计算速度不算很快,但是在一些复杂的问题下,也有比较好的下效果,因为科研需要,根据理论编写了一下共轭梯度法的程序,特此分享:
1、原理步骤如下:
2、 编程的流程如下:
3、程序如下:
function [x] = CG_solver(A,b,x0,kmax)
%使用共轭梯度法求解 A · X = b线性方程组
% A方程组系数矩阵 b系数项 X0是迭代的初值(0向量就可以) kmax最多迭代次数
% wrote by Han JIale in 2022.07.04
xk=x0;
%附上初值
r0=b-A*xk;
k=0;
rk=r0;
rk_1=rk;
rk_2=rk_1;
pk_1=r0;
while sqrt(sum(rk.^2))>=10^(-5) && (k<kmax) %停机准则,可以修改
k=k+1;
rk_2=rk_1;
rk_1=rk;
pk_2=pk_1;
xk_1=xk;
if k==1
pk_1=r0;
else
betek_2=(rk_1'*rk_1)/(rk_2'*rk_2);
pk_1=rk_1+betek_2*pk_2;
end
alphak_1=(rk_1'*rk_1)/(pk_1'*A*pk_1);
xk=xk_1+alphak_1*pk_1;
rk=rk-alphak_1*A*pk_1;
end
x=xk;
end

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)