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

使用Eigen矩阵库,计算Ax = B (m>n)矩阵的方法

在使用 Eigen 矩阵库求解超定线性方程组Ax=B(其中m>n,即方程个数多于未知数个数)时,通常采用最小二乘法来求解最优解 x。Eigen 提供了多种方法来求解此类问题,最常用的是 SVD 分解(如 BDCSVD)或 QR 分解

推荐方法:使用 SVD 求最小二乘解

最小二乘解的数学公式为:

x=A+B

其中 A+ 是矩阵 A 的伪逆(Moore-Penrose 伪逆),可通过 SVD 计算。

在 Eigen 中推荐使用 BDCSVD(适用于大矩阵)或 JacobiSVD

使用例程如下:

#include <Eigen/Dense>
#include <iostream>

using namespace Eigen;
using namespace std;

int main() {
int m = 6, n = 3;  // m > n: 超定方程组
MatrixXd A(m, n);
VectorXd B(m);

// 示例数据
A << 1, 2, 3,
4, 5, 6,
7, 8, 9,
2, 1, 3,
5, 6, 7,
8, 9, 10;
B << 1, 2, 3, 4, 5, 6;

    // 使用 SVD 求解最小二乘解
VectorXd x = A.bdcSvd(ComputeThinU | ComputeThinV).solve(B);

    cout << "Solution x: " << x.transpose() << endl;
return 0;
}

其他方法(可选):

方法公式Eigen 代码
QR 分解(速度快,稳定性中等)x=A−1_QRBx = A.colPivHouseholderQr().solve(B);
完全正交分解稳定性好x = A.fullPivLu().solve(B);(不推荐用于超定)
正规方程法(不推荐,数值不稳定)x=(A⊤A)−1A⊤Bx = (A.transpose() * A).ldlt().solve(A.transpose() * B);

注意:正规方程法虽然形式简单,但A⊤A 可能病态,导致精度差,不推荐用于实际工程

总结

  • 当 m>n 时,使用 A.bdcSvd().solve(B) 是最稳定、推荐的方法。
  • 避免使用正规方程法,除非矩阵条件数很好。
http://www.dtcms.com/a/411447.html

相关文章:

  • MIT 6.S081 文件系统的基本结构 (Lab10:File system)
  • 跨境电商建站公司北京建设安全网络平台87
  • 【读书笔记】深入理解JVM C1~3
  • Spring Boot携手Leaflet,点亮省级旅游口号WebGIS可视化之路
  • 第一次备考怎么记笔记?三步模板直接用​
  • 网站建设基础筹备宁河做网站公司
  • 中小型网站建设与管理总结免费h5生成网站
  • 有哪些做的好的汽配零配件网站代理网站哪个好
  • 2025GUI项目实践:Unity编辑模式下GUI运行
  • C语言:10行杨辉三角形
  • 软件开发和网站建设哪个好广西建筑培训网
  • GPU微架构演进分析--从SIMT到Scalar-Vector-Tensor计算的混合配比与调度
  • app应用网站源码建设通会员多少钱一个月
  • 分布式 WebSocket 架构设计与实现:跨节点实时通信解决方案
  • 君临天下游戏网站开发者专业的东莞网站排名
  • MHC-Net
  • 分布式专题——23 Kafka日志索引详解
  • 上海殷行建设网站天津宏宇网站建设
  • 作为 PHP 开发者,我第一次用 Go 写了个桌面应用
  • 档案网站的建设方案网站建设需要服务器么
  • Weblogic 任意文件上传漏洞(CVE-2018-2894)
  • C++11部分
  • springboot房地产销售管理系统的设计与实现(代码+数据库+LW)
  • 做寂网站房地产网站做编辑刚刚入行
  • 网站设计哪家比较好wordpress放弃php
  • 百度收录排名好的网站我建设的网站打开很慢
  • Spring为什么推荐使用构造函数进行依赖注入??
  • 【读书笔记】架构整洁之道 P4 组件构建原则
  • (20)ASP.NET Core2.2 EF创建模型(必需属性和可选属性、最大长度、并发标记、阴影属性)
  • 优化软件哪个好优化技术