当前位置: 首页 > news >正文

共轭梯度法 (CG) 解线性方程组

求解线性方程组: A x = b Ax = b Ax=b其中 A ∈ S + + m ⊂ R m × m A\in S^m_{++} \subset \R^{m\times m} AS++mRm×m b ∈ R m b \in \R^m bRm

共轭梯度法的matlab实现:

function [x] = CG(A,b)

x = 0;   // 迭代初值
r = b;   // 初始残差
i_max = 50;  // 最大迭代次数
yita = 1e-6; // 残差限度

i = 0;
while sqrt(r'*r)> yita && i<i_max
    i = i+1;
    if i == 1
        p = r;
    else
        beta = r'*r/(r_before'*r_before);
        p = r + beta*p;
    end
    alpha = r'*r/(p'*A*p);
    x = x + alpha*p;
    r_before = r;
    r = r - alpha*A*p;
end

短短几行,效果奇佳。

测试:

A = rand(20,20);
A = A*A';

xs = randn(20,1);

b = A*xs;

norm(xs - CG(A,b))

输出:

ans =

   1.8305e-08

需要注意的是,方阵 A 必须是对称正定的,否则无法得到正确结果例如:

A = rand(20,19);
A = A*A';  % 此时 A 的秩为 19, 非满秩,半正定!

xs = randn(20,1);

b = A*xs;

norm(xs - CG(A,b))

误差就很大了!

ans =

    0.3442

相关文章:

  • 线性规划求解——交替方向乘子法(ADMM)
  • 必须掌握的八个【cmd 命令行】
  • 线性规划求解——DRS算法
  • 数据库并发处理
  • 线性规划求解——增广拉格朗日函数法
  • 让远程终端连接不再限制
  • 矩阵的 Hadamard 积
  • 验证码识别技术
  • 线性规划求解——半光滑牛顿法
  • About Bind in Prototype JavaScript Language.
  • 五子棋 AI 的贪心策略
  • 无信息搜索之迭代加深(iterative deepening)
  • 历史时刻
  • 自动求导
  • Adobe Acrobat 8 Professional(PDFMaker文件遗失的解决方法)
  • [译]CSS 居中(Center)方法大合集
  • 【RocksDB】TransactionDB源码分析
  • CSS 专业技巧
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MobX
  • MYSQL 的 IF 函数
  • node学习系列之简单文件上传
  • Object.assign方法不能实现深复制
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 对JS继承的一点思考
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 使用parted解决大于2T的磁盘分区
  • 手写一个CommonJS打包工具(一)
  • 无服务器化是企业 IT 架构的未来吗?
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #### go map 底层结构 ####
  • #DBA杂记1
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (C#)一个最简单的链表类
  • (pojstep1.1.2)2654(直叙式模拟)
  • (搬运以学习)flask 上下文的实现
  • (九)One-Wire总线-DS18B20
  • (十)c52学习之旅-定时器实验
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .Net Winform开发笔记(一)
  • .net 后台导出excel ,word
  • .Net 中Partitioner static与dynamic的性能对比
  • .net中我喜欢的两种验证码
  • .sys文件乱码_python vscode输出乱码
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • []C/C++读取串口接收到的数据程序
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#]手把手教你打造Socket的TCP通讯连接(一)
  • [CVPR 2023:3D Gaussian Splatting:实时的神经场渲染]
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [Django 0-1] Core.Checks 模块
  • [GDOUCTF 2023]<ez_ze> SSTI 过滤数字 大括号{等