我正在做大量的科学编程,并在 Boost.Units 方面取得了非常好的经验,它为数量提供了编译时维度分析(即用单位标记数量,从而通过经典物理维度分析捕获许多错误)和使用 Eigen 2 用于线性代数。
但是,Eigen 没有单位的概念,虽然您可以在矩阵中为 Eigen 设置标量,但它期望两个量的乘积产生相同的类型,这对于单位来说显然是不正确的。例如,像这样的代码:
using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity< si::length >, 2, 1 > meter_vector;
quantity< si::area > norm = meter_vector.squaredNorm();
不起作用,即使它在逻辑上是正确的。
有没有支持单位的矩阵库?我知道这在过去是出了名的难以实现,而 C++11decltype
将使这变得更容易,但使用 C++03 和模板专业化肯定是可能的。