第 29 章 · 求解线性方程组
Eigen 最重要的应用之一解 Ax b。本章讲标准解法、各种求解器怎么选以及为什么不要用逆矩阵。29.1 标准解法solve()解 Ax b 的标准写法Eigen::Matrix2d A;A2,1,1,3;Eigen::Vector2db(5,10);Eigen::Vector2d xA.colPivHouseholderQr().solve(b);std::coutx x.transpose()std::endl;// 1 3A.分解方法().solve(b)是标准模式先对 A 做某种分解再用分解结果求解b29.2 验证解的正确性// 验证 A*x 是否等于 bdoubleerror(A*x-b).norm();std::cout残差 errorstd::endl;// 应接近 0残差residual越接近 0解越准确。29.3 几种求解器怎么选不同矩阵性质用不同求解器求解器适用场景速度colPivHouseholderQr()通用首选稳健适合大多数中llt()对称正定矩阵最快ldlt()对称半正定矩阵快partialPivLu()一般方阵快SVDbdcSvd…()、jacobiSvd…()最小二乘方程多、未知少慢但强⚠️SVD 这一行的选项必须写在尖括号里写法见下面 29.3.1别直接写A.bdcSvd().solve(b)。// 对称正定矩阵用 llt() 最快Eigen::Matrix2d S;S2,1,1,3;Eigen::Vector2d x2S.llt().solve(b);怎么记不确定用哪个 →colPivHouseholderQr()最稳确定对称正定 →llt()最快方程比未知数多超定最小二乘→colPivHouseholderQr()够用且快要 SVD 就bdcSvd…()见下29.3.1 SVD 求解器选项写在尖括号里Eigen 5.0 把 SVD 的计算选项算不算 U、V改成了模板参数。官方CHANGELOG.md在[5.0.0] - 2025-09-30一节写得很明白Runtime SVD options for computing thin/full U/V have been deprecated: use compile-time options instead.也就是运行时传选项这条路已被正式废弃。老写法A.bdcSvd().solve(b)能编译通过但一运行就断言崩溃Assertion failed: computeU() computeV() SVDBase::solve(): Both unitaries U and V are required to be computed (thin unitaries suffice)., file .../Eigen/src/SVD/SVDBase.h, line 322正确写法|是按位或把两个选项合起来#includeEigen/Dense#includeiostreamintmain(){// 3 个方程、2 个未知数典型的超定问题Eigen::MatrixXdA(3,2);A1,1,2,3,4,5;Eigen::VectorXdb(3);b1,2,3;Eigen::VectorXd xA.bdcSvdEigen::ComputeFullU|Eigen::ComputeFullV().solve(b);std::coutx x.transpose()std::endl;std::cout残差 (A*x-b).norm()std::endl;return0;}编译运行编译命令见第 22 章x 0.166667 0.5 残差 0.408248残差不为 0 是正常的——超定问题本来就没有精确解最小二乘给出的是误差平方和最小的那个解。两种 SVD 求解器怎么选解法是矩阵的成员函数A.jacobiSvd选项()、A.bdcSvd选项()注意函数名是小写Svd类名才是大写的JacobiSVD。小矩阵用jacobiSvd大矩阵用bdcSvd更快两者的选项都写在尖括号里实测解一样。Eigen::BDCSVDMatrix3d svd(A, 选项)这种把选项写在圆括号里的老构造函数在 Eigen 5.0 已被标记为deprecated能跑但每次编译都出警告。要写类名形式就写Eigen::BDCSVDMatrix3d, Eigen::ComputeThinU | Eigen::ComputeThinV svd(A);只想解方程、不关心 U/V 具体是什么 → 直接用colPivHouseholderQr().solve(b)它就能给最小二乘解上面那段代码换成它输出完全一样x 0.166667 0.5还更快。第 36 章的拟合项目就是这么写的。29.4 为什么不用逆矩阵数学上 x A⁻¹·b 没错但工程上强烈不推荐// ❌ 不推荐慢且数值不稳定Eigen::Vector2d x_badA.inverse()*b;// ✅ 推荐更快更稳定Eigen::Vector2d x_goodA.colPivHouseholderQr().solve(b);原因慢求逆矩阵本身要更多计算再乘 b 是浪费数值不稳定矩阵接近奇异时逆矩阵误差被放大记住这条铁律解方程用.solve()永远不要A.inverse() * b。29.5 检查矩阵是否可解求解前可以检查std::abs求浮点绝对值需要#include cmath#includecmath// std::abs 对 double 版本在这里// 检查行列式是否为 0if(std::abs(A.determinant())1e-12){std::cout矩阵不可逆可能无解或无穷多解std::endl;}或者用分解的info()检查是否成功第 30 章。29.6 实际例子解一个 3 元方程组3x y - z 1 x 4y z 2 2x - y 5z 3#includeEigen/Dense#includeiostreamintmain(){Eigen::Matrix3d A;A3,1,-1,1,4,1,2,-1,5;Eigen::Vector3db(1,2,3);Eigen::Vector3d xA.colPivHouseholderQr().solve(b);std::cout解 x x.transpose()std::endl;std::cout验证 A*x (A*x).transpose()std::endl;std::cout残差 (A*x-b).norm()std::endl;return0;}存成ch29.cpp按附录 C.3 编译运行实际输出解 x 0.405797 0.275362 0.492754 验证 A*x 1 2 3 残差 6.28037e-16三行连起来读就是 Eigen 解方程的标准验收流程先拿解再乘回原式看是否等于 b最后看残差。验证 A*x打印出1 2 3正是原来的 b残差 6.28037e-16就是 0浮点残渣见第 21 章末尾说明说明解是对的。29.7 小结解方程A.分解().solve(b)。通用选colPivHouseholderQr()对称正定选llt()最小二乘选colPivHouseholderQr()或bdcSvdComputeFullU | ComputeFullV()SVD 的选项必须写在尖括号里见 29.3.1。验证(A*x - b).norm()残差接近 0。铁律用.solve()别用.inverse() * b。下一章深入矩阵分解——solve 背后的原理。练习题解方程组3x y 9; x 2y 8验证结果。解一个 3 元方程组打印残差。用llt()解一个对称正定方程组和colPivHouseholderQr()对比结果。分别用.solve()和.inverse()*b解同一方程说明为什么前者更好。构造一个行列式为 0 的矩阵尝试 solve观察结果。

相关新闻

ASCEND:与当地的Gemma一起,将一次小小的散步变成一次真实世界的探险

ASCEND:与当地的Gemma一起,将一次小小的散步变成一次真实世界的探险

这是提交给Hacktoberfest开源人工智能挑战赛:第1周——触摸草地. 附近的公园感觉很普通。给它一扇神秘的门,一个小故事,一个在尽头等待的叶耳伴,同样的散步变成了一场冒险。 这就是背后的想法上升。下一层是你前门外的某个地方。 我建造的…

2026/10/10 9:23:02 阅读更多 →
impeccable不是项目,而是可量化的交付协议

impeccable不是项目,而是可量化的交付协议

项目标题是“impeccable”,这个词本身不是技术项目、工具、教程或实体产品,而是一个英文形容词,意为“无懈可击的”“完美无瑕的”“无可挑剔的”。它常用于评价表现、设计、执行、工艺、服务、代码质量、用户体验甚至演讲台风——但它从不单…

2026/10/10 9:23:02 阅读更多 →
科技成果评价全流程实操指南:从评价逻辑到专家评审的避坑要点

科技成果评价全流程实操指南:从评价逻辑到专家评审的避坑要点

1. 内容整体设计与思路拆解1.1 科技成果评价到底在评什么先聊聊一个我这些年被问得最多的问题:“科技成果评价,不是把材料收上来、组织几个专家开个会、出个鉴定意见就行了吗?”说这话的人,多半是没真正上手操作过评价项目。科技成…

2026/10/10 9:23:02 阅读更多 →

最新新闻

收不到更新弹窗不是 Bug:UpdateReadiness 把通知“吞“了的真相

收不到更新弹窗不是 Bug:UpdateReadiness 把通知“吞“了的真相

收不到更新弹窗不是 Bug:UpdateReadiness 把通知"吞"了的真相 【免费下载链接】tinycast Tinycast — a tiny, fully native macOS launcher, hotkeys, and clipboard history. 项目地址: https://gitcode.com/GitHub_Trending/ti/tinycast 在 mac…

2026/10/10 11:27:37 阅读更多 →
Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经

Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经

Cloudflare 紧急修复 quiche 拥塞漏洞:一个开源库牵动全球 CDN 神经 【免费下载链接】quiche 🥧 Savoury implementation of the QUIC transport protocol and HTTP/3 项目地址: https://gitcode.com/GitHub_Trending/qui/quiche 2026 年 10 月&a…

2026/10/10 11:27:37 阅读更多 →
从技术圈刷屏到财经媒体安利:开源模型的破圈路径复盘

从技术圈刷屏到财经媒体安利:开源模型的破圈路径复盘

从技术圈刷屏到财经媒体安利:开源模型的破圈路径复盘 【免费下载链接】Nex-N2.5-mini 项目地址: https://ai.gitcode.com/hf_mirrors/nex-agi/Nex-N2.5-mini 同一段时间里,一篇题为《30B 级别的模型也这么强?发现一个宝藏级开源模型》…

2026/10/10 11:27:37 阅读更多 →
跨境电商网店管理软件哪个合适?5 家店铺手动切换操作效率低

跨境电商网店管理软件哪个合适?5 家店铺手动切换操作效率低

跨境电商网店管理软件哪个好,先看它能不能解决"多店别一个个登"这件事。手写表格记账号、浏览器逐个切换,短期看是省了软件钱,长期看是把效率和账号安全一起搭进去。 下面把三层成本拆开算,再说清楚挑这类软件该看哪几…

2026/10/10 11:27:37 阅读更多 →
2026 浴室柜赛道:选源头合作工厂,认准这 3 大核心条件

2026 浴室柜赛道:选源头合作工厂,认准这 3 大核心条件

卫浴市场竞争日趋激烈,同质化低价内卷严重,经销商想要突围,需要有原创设计、稳定品控、丰富产品矩阵、交付靠谱的上游工厂品牌。钱乐卫浴,长江卫浴旗下高端浴室柜品牌,正是面向经销商伙伴打造的实力合作品牌。差异化产…

2026/10/10 11:27:36 阅读更多 →
开会听得清楚,整理却要命?支持微信小程序的会议纪要软件横评对比

开会听得清楚,整理却要命?支持微信小程序的会议纪要软件横评对比

你有没有遇到过这样的场景: 一个两小时的跨部门项目会, 你拼命记笔记, 结果只记了个“散会了”? 散会后大家脑子里只剩下“谁说了什么”的模糊印象, 具体待办、关键决策全靠“拍脑袋”回忆。 更别提那些全天评审、职级…

2026/10/10 11:26:36 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →