28 template <
typename Real,
typename TVector,
typename TMatrix>
35 std::function<TVector(Real, TVector
const&)>
const& F,
36 std::function<TMatrix(Real, TVector
const&)>
const& DF);
40 virtual void Update(Real tIn, TVector
const& xIn, Real& tOut,
48 template <
typename Real,
typename TVector,
typename TMatrix>
53 template <
typename Real,
typename TVector,
typename TMatrix>
55 std::function<TVector(Real, TVector
const&)>
const& F,
56 std::function<TMatrix(Real, TVector
const&)>
const& DF)
63 template <
typename Real,
typename TVector,
typename TMatrix>
65 TVector
const& xIn, Real& tOut, TVector& xOut)
67 TVector fVector = this->
mFunction(tIn, xIn);
69 TMatrix dgMatrix = TMatrix::Identity() - this->
mTDelta * dfMatrix;
70 TMatrix dgInverse =
Inverse(dgMatrix);
71 fVector = dgInverse * fVector;
73 xOut = xIn + this->mTDelta * fVector;
OdeImplicitEuler(Real tDelta, std::function< TVector(Real, TVector const &)> const &F, std::function< TMatrix(Real, TVector const &)> const &DF)
std::function< TVector(Real, TVector const &)> mFunction
std::function< TMatrix(Real, TVector const &)> mDerivativeFunction
virtual void Update(Real tIn, TVector const &xIn, Real &tOut, TVector &xOut)
virtual ~OdeImplicitEuler()
Quaternion< Real > Inverse(Quaternion< Real > const &d)