00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
#include "MidpointSolver.h"
00013
#include <OpenCAL/ODESource.h>
00014
using namespace OpenCAL;
00015
00016
using namespace std;
00017
00018
00019
00020
00021
00022
00023 MidpointSolver::MidpointSolver()
00024 {
00025 }
00026
00027 MidpointSolver::~MidpointSolver()
00028 {
00029 }
00030
00031
00032
00033
00034
00035
00041 void MidpointSolver::solve(
float stepSize,
ODESource *source)
00042 {
00043 source->
fillState();
00044 source->
fillDerivative();
00045
00046
PhaseSpace &state = *(source->
getState());
00047
PhaseSpace &deriv = *(source->
getDerivative());
00048
00049
00050
PhaseSpace x0 = state;
00051
00052
00053 state.
add(deriv, stepSize * 0.5f);
00054
00055
00056 source->
fromState();
00057 source->
fillDerivative();
00058
00059
00060 state = x0;
00061 state.
add(deriv, stepSize);
00062
00063 source->
fromState();
00064 }