public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector k1 = differentialEquasions(state, input, time); Vector k2 = differentialEquasions(state + halfStep * k1, input, time + halfStep); return(state + dt * k2); }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector diffs = differentialEquasions(state, input, time); Vector prediction = state + dt * diffs; return(state + halfStep * (diffs + differentialEquasions(prediction, input, time + dt))); // trapezoidal rule }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector k1 = differentialEquasions(state, input, time); Vector k2 = differentialEquasions(state + oneThirdStep * k1, input, time + oneThirdStep); Vector k3 = differentialEquasions(state + (-oneThirdStep * k1 + dt * k2), input, time + 2d * oneThirdStep); Vector k4 = differentialEquasions(state + dt * (k1 - k2 + k3), input, time + dt); return(state + oneEightStep * (k1 + 3f * k2 + 3f * k3 + k4)); }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector k1 = differentialEquasions(state, input, time); Vector k2 = differentialEquasions(state + halfStep * k1, input, time + halfStep); Vector k3 = differentialEquasions(state + halfStep * k2, input, time + halfStep); Vector k4 = differentialEquasions(state + dt * k3, input, time + dt); Vector diff = oneSixStep * (k1 + 2d * k2 + 2d * k3 + k4); return(state + diff); }
public Launcher(DifferentialEquations differentialEquations, ExactSolution exactSolution, params ISolver[] solvers) { this.differentialEquations = differentialEquations; this.exactSolution = exactSolution; wrappers = new SolverWrapper[solvers.Length]; for (int i = 0; i < wrappers.Length; i++) { wrappers[i] = new SolverWrapper(solvers[i], differentialEquations); } }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector k1 = dt * differentialEquasions(state, input, time); Vector k2 = dt * differentialEquasions(state + a2[0] * k1, input, time + c[0] * dt); Vector k3 = dt * differentialEquasions(state + a3[0] * k1 + a3[1] * k2, input, time + c[1] * dt); Vector k4 = dt * differentialEquasions(state + a4[0] * k1 + a4[1] * k2 + a4[2] * k3, input, time + c[2] * dt); Vector k5 = dt * differentialEquasions(state + a5[0] * k1 + a5[1] * k2 + a5[2] * k3 + a5[3] * k4, input, time + c[3] * dt); Vector k6 = dt * differentialEquasions(state + a6[0] * k1 + a6[1] * k2 + a6[2] * k3 + a6[3] * k4 + a6[4] * k5, input, time + c[4] * dt); Vector k7 = dt * differentialEquasions(state + a7[0] * k1 + a7[1] * k2 + a7[2] * k3 + a7[3] * k4 + a7[4] * k5 + a7[5] * k6, input, time + c[5] * dt); //return state + b1[0] * k1 + b1[1] * k2 + b1[2] * k3 + b1[3] * k4 + b1[4] * k5 + b1[5] * k6 + b1[6] * k7; return(state + b2[0] * k1 + b2[1] * k2 + b2[2] * k3 + b2[3] * k4 + b2[4] * k5 + b2[5] * k6 + b2[6] * k7); }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { diffs.Push(differentialEquasions(state, input, time)); if (diffs.Count() < order) { return(starter.Solve(differentialEquasions, state, input, time, dt)); } else { Vector sum = new Vector(state.Rows, 0d); for (int i = 0; i < order; i++) { sum += coeffs[i] * diffs[i]; } Vector ds = dt * sum; return(state + ds); } }
static void Main(string[] args) { DifferentialEquations differentialEquation = (state, input, time) => (time * state); // y' = t * y ExactSolution exactSolution = (time) => (Math.Exp(0.5 * time * time + 1)); Launcher launcher = new Launcher(differentialEquation, exactSolution, new SolverEuler(), new SolverEulerTrapezoidal(), new SolverHeun(), new SolverMidpoint(), new SolverRK4(), new SolverRK4Enhanced(), new SolverDormandPrince(), new SolverAdamsBashforth(5), new SolverAdamsMoulton(5)); launcher.Test(2d, 0.001d); Console.ReadKey(); }
public SolverWrapper(ISolver solver, DifferentialEquations differentialEquations) { this.Solver = solver; this.differentialEquations = differentialEquations; Data = new List <DataSample>(); }
public Vector Solve(DifferentialEquations differentialEquasions, Vector state, double input, double time, double dt) { Vector differentials = differentialEquasions(state, input, time); return(state + dt * differentials); }