将 cmath 函数与 get_continuous_state_vector() 的元素一起使用时没有匹配函数

No matching function when using cmath functions with elements of get_continuous_state_vector()

在我的 DoCalcTimeDerivative 中,我需要将 cos 作为状态向量元素之一。

我用下面的代码来做这个

Vector4<T> x = context.get_continuous_state_vector().CopyToVector();
T c0 = std::cos(x[0]);

但是,我收到以下错误

error: no matching function for call to ‘cos(Eigen::DenseCoeffsBase<Eigen::Matrix<Eigen::AutoDiffScalar<Eigen::Matrix<double, -1, 1> >, 4, 1, 0, 4, 1>, 1>::Scalar&)’

我也试过使用

const systems::VectorBase<T>& x = context.get_continuous_state_vector();
T c0 = std::cos(x[0]);

这同样给出了以下错误

error: no matching function for call to ‘cos(const Eigen::AutoDiffScalar<Eigen::Matrix<double, -1, 1> >&)’

这很奇怪,因为我在示例中看到 std::cosstd::sin,但我似乎无法弄清楚为什么它在示例中有效,但在我的示例中却无效。

试试这个:

using std::cos;
Vector4<T> x = context.get_continuous_state_vector().CopyToVector();
T c0 = cos(x[0]);