• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

用Matlab实现CGNR算法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

在利用Matlab对大型稀疏矩阵的方程组的求解--实现的原理可以参考东北大学博士论文《大型线性方程组的迭代解法》(作者 邵新慧)P18,关于CGNR的描述

其matlab的代码如下:

%目标:求解Ax=b
%采用的方法:CGNR---参考文献-大型线性方程组的迭代解法
function y=CGNR(A,b)
TOF=0.0001;
for i=1:length(b)
    x(i,1)=1;
end
%x(:,1)=[1 2 5];
k=1;
r(:,1)=b-A*x(:,1);
while(norm(r(:,k),2)>TOF)
    k=k+1;
    if(k==2)
        p(:,2)=A\'*r(:,1);
    else
        beta(:,k)=(A\'*r(:,k-1))\'*(A\'*r(:,k-1))/((A\'*r(:,k-2))\'*(A\'*r(:,k-2)));
        p(:,k)=A\'*r(:,k-1)+beta(:,k)*p(:,k-1);
    end
    alpha(:,k)=(A\'*r(:,k-1))\'*(A\'*r(:,k-1))/((A\'*p(:,k))\'*(A\'*p(:,k)));
    x(:,k)=x(:,k-1)+alpha(:,k)*p(:,k);
    r(:,k)=r(:,k-1)-alpha(:,k)*A*p(:,k);
end
  y=x(:,k);
%disp(y)

在matlab命令窗口,输入测试算例:

>> A=[1 2 3;2 5 2;3 1 5];
>> b=[14 18 20]\'
>> CGNR(A,b)

结果为 1.0001 2.0000 2.9999


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap