共轭梯度法求解线性方程组Ax=b(附代码)

共轭梯度法求解线性方程组:Ax=b

数值分析老师给的作业,写出来代码平时分满分。简单勿喷,hhhh

原理

CG求解线性方程组的原理大家翻一翻数值分析的课本即可,此处不哔哔直接上matlab代码

代码

%qjyang
clc
clear;
A = [10 1 2 3 4
    4 9 -3 1 -3
    2 -1 7 3 -5
    3 2 3 12 -2
    4 -3 -5 -1 15];%求解线性方程组Ax=b
b=[12 -27 14 17 12]';
x0=ones(5,1);%给定的初始点
max_n=400;%最大迭代次数
fprintf('数值分析-CG法求解线性方程组:');
x=x0;
lon=1e-4;%求解精度值
r=b-A*x;%r0
d=r;%d0=r0=b-Ax
%循环结构
for k=0:max_n
    alpha=(r'*r)/(d'*A*d);
    xx=x+alpha*d;
    rr=b-A*xx;
    if (norm(rr,2)/norm(b,2))<= lon
        fprintf('\n 满足条件的解:');
        n = k+1;
        x=xx;
        r=rr;
        fprintf('\n x%d = ',k+1);
        fprintf('   %10.4f',x);
        fprintf('\n r%d = ',k+1);
        fprintf('   %10.4f',r);
        fprintf('\n');
        fprintf('迭代次数:\n  %d',n);
        fprintf('\n方程的解:\n');
        fprintf('%10.4f',x);
        return
    end
    beta=(rr'*rr)/(r'*r);
    d=rr+beta*d;
    x=xx;
    r=rr;
    fprintf('\n x%d = ',k+1);
    fprintf('   %10.4f',x);%连续打印所有求解值直到满足精度为止
end
%循环结构

代码运行结果

数值分析-CG法求解线性方程组:
 x1 =        0.2605      -2.2351       1.7395       0.9076       1.1849
 x2 =        0.2781      -2.3507       1.9072       1.3397       0.9460
 x3 =        0.2741      -2.3303       1.7348       1.5023       0.9852
 x4 =        0.2284      -2.3847       1.5846       1.5107       0.9084
 x5 =        0.4896      -2.7493       1.2607       1.5399       0.5980
 x6 =        0.5301      -2.7901       1.2230       1.5403       0.6113
 x7 =        0.5287      -2.7954       1.2246       1.5460       0.6110
 x8 =        0.5261      -2.7954       1.2239       1.5466       0.6113
 x9 =        0.5251      -2.7937       1.2238       1.5474       0.6122
 x10 =        0.5251      -2.7921       1.2251       1.5473       0.6131
 x11 =        0.5246      -2.7911       1.2273       1.5460       0.6140
 x12 =        0.5239      -2.7911       1.2279       1.5462       0.6144
 x13 =        0.5232      -2.7904       1.2283       1.5466       0.6149
 x14 =        0.5231      -2.7897       1.2286       1.5466       0.6152
 满足条件的解:
 x15 =        0.5230      -2.7894       1.2287       1.5463       0.6153
 r15 =        0.0012      -0.0016       0.0012      -0.0017      -0.0007
迭代次数:
  15
方程的解(满足精度条件):
    0.5230   -2.7894    1.2287    1.5463    0.6153

芜湖!下班淦饭!

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨杨杨杨杨齐家

孩子想喝冰红茶/(ㄒoㄒ)/~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值