18 const Eigen::Ref<const Eigen::VectorXd> &,
19 const Eigen::Ref<const Eigen::VectorXd> &,
20 Eigen::Ref<Eigen::VectorXd>)>;
23 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
27 const Eigen::Ref<const Eigen::VectorXd> & x,
28 const Eigen::Ref<const Eigen::VectorXd> & u,
30 Eigen::Ref<Eigen::VectorXd> ret) = 0;
37 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
41 const Eigen::Ref<const Eigen::VectorXd> & x,
42 const Eigen::Ref<const Eigen::VectorXd> & u,
44 Eigen::Ref<Eigen::VectorXd> ret)
override
46 Eigen::VectorXd dotx(x.size());
47 state_eq(t, x, u, dotx);
56 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
60 const Eigen::Ref<const Eigen::VectorXd> & x,
61 const Eigen::Ref<const Eigen::VectorXd> & u,
63 Eigen::Ref<Eigen::VectorXd> ret)
override
65 double dt_half = dt / 2;
66 Eigen::VectorXd k1(x.size()), k2(x.size()), k3(x.size()), k4(x.size());
67 state_eq(t, x, u, k1);
68 state_eq(t + dt_half, x + dt_half * k1, u, k2);
69 state_eq(t + dt_half, x + dt_half * k2, u, k3);
70 state_eq(t + dt, x + dt * k3, u, k4);
71 ret = x + (dt / 6) * (k1 + 2 * k2 + 2 * k3 + k4);