|
opensurgsim
|
Runge Kutta 4 ode solver (See http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods) solves the following \(2^{nd}\) order ode \(M(x(t), v(t)).a(t) = f(t, x(t), v(t))\). More...
#include <OdeSolverRungeKutta4.h>
Classes | |
| struct | RungeKuttaDerivedState |
| Internal structure to hold the 4 temporary evaluations. More... | |
Public Member Functions | |
| OdeSolverRungeKutta4 (OdeEquation *equation) | |
| Constructor. More... | |
| void | solve (double dt, const OdeState ¤tState, OdeState *newState, bool computeCompliance=true) override |
| Solves the equation. More... | |
Public Member Functions inherited from SurgSim::Math::OdeSolver | |
| OdeSolver (OdeEquation *equation) | |
| Constructor. More... | |
| virtual | ~OdeSolver () |
| Virtual destructor. | |
| const std::string | getName () const |
| Gets the solver's name. More... | |
| void | setLinearSolver (std::shared_ptr< LinearSparseSolveAndInverse > linearSolver) |
| Sets the specialized linear solver to use with this Ode solver. More... | |
| std::shared_ptr< LinearSparseSolveAndInverse > | getLinearSolver () const |
| Gets the specialized linear solver used with this Ode solver. More... | |
| void | computeMatrices (double dt, const OdeState &state, bool computeCompliance=true) |
| Computes the system and compliance matrices for a given state. More... | |
| const SparseMatrix & | getSystemMatrix () const |
| Queries the current system matrix. More... | |
| const Matrix & | getComplianceMatrix () const |
Protected Member Functions | |
| void | assembleLinearSystem (double dt, const OdeState &state, const OdeState &newState, bool computeRHS=true) override |
| Assemble the linear system (A.x=b) to be solved for the state and new states (useful for certain ode solver). More... | |
Protected Member Functions inherited from SurgSim::Math::OdeSolver | |
| void | computeComplianceMatrixFromSystemMatrix (const OdeState &state) |
| Helper method computing the compliance matrix from the system matrix and setting the boundary conditions. More... | |
Protected Attributes | |
| RungeKuttaDerivedState | m_k1 |
| RungeKuttaDerivedState | m_k2 |
| RungeKuttaDerivedState | m_k3 |
| RungeKuttaDerivedState | m_k4 |
Protected Attributes inherited from SurgSim::Math::OdeSolver | |
| std::string | m_name |
| Name for this solver. More... | |
| OdeEquation & | m_equation |
| The ode equation (API providing the necessary evaluation methods and the initial state) | |
| std::shared_ptr< LinearSparseSolveAndInverse > | m_linearSolver |
| The specialized linear solver to use when solving the ode equation. | |
| SparseMatrix | m_systemMatrix |
| Linear system matrix (can be M, K, combination of MDK depending on the solver), including boundary conditions. More... | |
| Vector | m_solution |
| Linear system solution and rhs vectors (including boundary conditions) | |
| Vector | m_rhs |
| Matrix | m_complianceMatrix |
| Compliance matrix which is the inverse of the system matrix, including boundary conditions. | |
Runge Kutta 4 ode solver (See http://en.wikipedia.org/wiki/Runge%E2%80%93Kutta_methods) solves the following \(2^{nd}\) order ode \(M(x(t), v(t)).a(t) = f(t, x(t), v(t))\).
This ode is solved as an ode of order 1 by defining the state vector \(y = \left(\begin{array}{c}x\\v\end{array}\right)\):
\[ y' = \left(\begin{array}{c} x' \\ v' \end{array}\right) = \left(\begin{array}{c} v \\ M(x, v)^{-1}.f(t,x, v) \end{array}\right) = f(t, y) \]
After integrating this equation, we get:
\[ y(t+dt) - y(t) = \int_t^{t+dt} f(t,y) dt \]
Runge Kutta 4 evaluates the integral term using 4 dependents evaluations of \(f\) at different times and states:
\[ \begin{array}{l} y(t+dt) = y(t) + \frac{dt}{6} (k_1 + 2k_2 + 2k_3 + k_4) \\ \text{with:} \\ \quad \begin{array}{lllllll} k_1 &=& f(& t &,& y(t) &) \\ k_2 &=& f(& t+\frac{dt}{2} &,& y(t) + \frac{dt}{2} k_1 &) \\ k_3 &=& f(& t+\frac{dt}{2} &,& y(t) + \frac{dt}{2} k_2 &) \\ k_4 &=& f(& t+dt &,& y(t) + dt k_3 &) \end{array} \end{array} \]
|
explicit |
Constructor.
| equation | The ode equation to be solved |
|
overrideprotectedvirtual |
Assemble the linear system (A.x=b) to be solved for the state and new states (useful for certain ode solver).
| dt | The time step used in the system |
| state,newState | The state and newState to be used to evaluate the system |
| computeRHS | True to compute the RHS vector, False otherwise |
Implements SurgSim::Math::OdeSolver.
|
overridevirtual |
Solves the equation.
| dt | The time step | |
| currentState | State at time t | |
| [out] | newState | State at time t+dt |
| computeCompliance | True to explicitly compute the compliance matrix, False otherwise |
Implements SurgSim::Math::OdeSolver.
|
protected |
Runge kutta 4 intermediate system evaluation
1.8.12