You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ Eigen库中Diagonal对象无法调用inverse()的编译问题及求逆方法

在Eigen中高效求对角矩阵的逆矩阵

你的代码编译失败是因为Eigen::Diagonal是一个轻量级的表达式视图,不是完整的矩阵类型,它并没有提供inverse()成员函数。Eigen针对对角矩阵的逆运算有内置的高效实现,不需要手动写循环,下面是两种简便方法:

方法一:直接对对角视图逐元素求逆并转为对角矩阵

利用cwiseInverse()完成逐元素取倒数,再通过asDiagonal()转为对角矩阵:

Eigen::MatrixXd A = /* 你的矩阵初始化 */;
Eigen::MatrixXd D_inv = A.diagonal().asDiagonal().cwiseInverse();

如果只需要存储逆矩阵的对角元素向量(不需要完整矩阵),可以直接对对角向量调用cwiseInverse():

Eigen::VectorXd diag_inv = A.diagonal().cwiseInverse();

方法二:先提取对角向量,再求逆并转为对角矩阵

这种方式更直观,适合需要单独处理对角元素的场景:

Eigen::MatrixXd A = /* 你的矩阵初始化 */;
Eigen::VectorXd diag_elements = A.diagonal();
Eigen::MatrixXd D_inv = diag_elements.cwiseInverse().asDiagonal();

为什么这些方法高效?

Eigen的cwiseInverse()是专门针对向量、对角结构优化的逐元素操作,不会触发通用矩阵求逆的复杂计算(比如LU分解),完全符合你对高效计算的需求。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:09