如何使用Boost单位进行数值微分? 我想在C++中进行数值微分。为了类型安全,我想使用boost::units来避免混合单位,但也可以使用boost::units::absolute来避免混合相对单位和绝对单位

如何使用Boost单位进行数值微分? 我想在C++中进行数值微分。为了类型安全,我想使用boost::units来避免混合单位,但也可以使用boost::units::absolute来避免混合相对单位和绝对单位,c++,differentiation,boost-units,C++,Differentiation,Boost Units,一个最简单的例子是计算速度,作为位置变化除以时间变化的函数:v=dx/dt,可以近似为(x1-x0)/(t1-t0) 在本例中,v有一个绝对单位(速度)、dx和dt相对单位(距离/持续时间) 而boost::units只要我们在任何地方取相对单位,就可以得到正确的单位 static_assert(std::is_same<boost::units::divide_typeof_helper< boost::units::s

一个最简单的例子是计算速度,作为位置变化除以时间变化的函数:
v=dx/dt
,可以近似为
(x1-x0)/(t1-t0)

在本例中,
v
有一个绝对单位(速度)、
dx
dt
相对单位(距离/持续时间)

boost::units
只要我们在任何地方取相对单位,就可以得到正确的单位

static_assert(std::is_same<boost::units::divide_typeof_helper<
                               boost::units::si::length, 
                               boost::units::si::time>::type, 
                           boost::units::si::velocity>::value);
我是否做了一个错误的假设,即除以两个相对单位的结果应该总是得到一个绝对单位?或者这是在执行来自

说明

表示绝对单位(点而不是向量)的包装器


时空事件是点(如果不被视为半径向量),它们的差异是向量。速度也是一个矢量。因此,你的假设似乎确实是错误的。

速度不能再是绝对的(=速度空间中的位置)或相对的(=速度空间中的向量)?根据我的理解,绝对速度表示粒子的速度,相对速度表示两个绝对速度之间的差,例如,用于计算(绝对)加速度。@user2968115当然可以,正如位置可以视为半径向量,因此是相对的。我不希望通用维度分析库支持这种微妙的重新解释。记住两个长度的比率(弧长和半径)是如何突然得到角度的尺寸的。在这种情况下,您还需要手动更改维度。
static_assert(std::is_same<boost::units::divide_typeof_helper<
                               boost::units::si::length, 
                               boost::units::si::time>::type, 
                           boost::units::absolute<boost::units::si::velocity>>::value);