示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#5
0
        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);
            }
        }
示例#6
0
        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);
     }
 }
示例#8
0
        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);
        }