Eigen::MatrixXd 类型定义的替换

Substitutions for Eigen::MatrixXd typedefs

用具有 long double 个元素的向量和矩阵替换所有 Eigen::MatrixXdEigen::VectorXd 的最简单方法是什么?

我代码中的每个基本浮点变量都是 long double 类型。此外,每次我使用矩阵或向量时,我都会使用以下类型定义。

typedef Eigen::VectorXd Vec;
typedef Eigen::MatrixXd Mat;

将这些 typedef 转换成什么最好?如果我让它们保持原样会怎样?

根据Eigen自己的定义自己的typedef即可global matrix typedefs.

如果您使用 Eigen::MatrixXd 并用 long double 类型的元素填充它,这些值将缩小以适应矩阵的 double 元素,这会导致损失精度,或者在最坏的情况下,溢出错误。但是,在许多体系结构中,双精度浮点运算是以 80 位扩展精度完成的,因此结果可能相同。你肯定不应该依赖这个!有关更多信息,请参见 long double vs double.

#include <Eigen/Core>

typedef Eigen::Matrix< long double, Eigen::Dynamic, 1              > Vec;
typedef Eigen::Matrix< long double, Eigen::Dynamic, Eigen::Dynamic > Mat;

int main()
{
  long double ld = 2;

  Mat m(1,1);
  m(0,0) = ld;
}