コード例 #1
0
        public Model()
        {
            wspolczynniki = new Coefficients()
            {
                k1              = 1.0,
                k2              = 1.0,
                l1              = 1.0,
                l2              = 1.0,
                b               = 1.0,
                mass            = 1.0,
                simulation_step = 0.1,
                simulation_time = 100.0,
                amplitude       = 1.0,
                period          = 1.0,
                constant        = 0.0,
                init_x1         = 0.0,
                init_x2         = 0.0
            };

            wspolczynniki.calculate_size();
        }
コード例 #2
0
        public bool Calculate()
        {
            double czas_koncowy = wspolczynniki.simulation_time;   // Koniec zakresu calkowania
            double krok = wspolczynniki.simulation_step;           // Krok calkowania
            double a0, b0, c0, a1, b1, c1, a2, b2, c2, a3, b3, c3; // Wspolczynniki do metody calkowania

            wspolczynniki.calculate_size();
            int    size = wspolczynniki.size;
            double k1 = wspolczynniki.k1;
            double k2 = wspolczynniki.k2;
            double l1 = wspolczynniki.l1;
            double l2 = wspolczynniki.l2;
            double b = wspolczynniki.b;
            double m = wspolczynniki.mass;
            double x1, x2, v;

            wspolrzedne_x1 = new double[size];
            wspolrzedne_x2 = new double[size];
            double[] wspolrzedne_v = new double[size];
            t = new double[size];


            // Warunki poczatkowe

            /*
             * wspolrzedne_x1[0] = wspolczynniki.init_x1;
             * wspolrzedne_x2[0] = wspolczynniki.init_x2;
             * wspolrzedne_v[0] = wspolczynniki.init_v;*/

            wspolrzedne_x1[0] = 0;
            wspolrzedne_x2[0] = 0;
            wspolrzedne_v[0]  = 0;

            // Inicjalizacja wektora X rozwiazania
            for (int i = 0; i < size; i++)
            {
                t[i] = krok * i;
            }
            // Algorytm całkowania
            for (int i = 0; i < size - 1; i++)
            {
                x1 = wspolrzedne_x1[i];
                x2 = wspolrzedne_x2[i];
                v  = wspolrzedne_v[i];

                a0 = krok * x1_prim(t[i], x1, x2, v);
                b0 = krok * x2_prim(t[i], x1, x2, v);
                c0 = krok * v_prim(t[i], x1, x2, v);

                a1 = krok * x1_prim(t[i] + 0.5 * krok, x1 + 0.5 * a0, x2 + 0.5 * b0, v + 0.5 * c0);
                b1 = krok * x2_prim(t[i] + 0.5 * krok, x1 + 0.5 * a0, x2 + 0.5 * b0, v + 0.5 * c0);
                c1 = krok * v_prim(t[i] + 0.5 * krok, x1 + 0.5 * a0, x2 + 0.5 * b0, v + 0.5 * c0);

                a2 = krok * x1_prim(t[i] + 0.5 * krok, x1 + 0.5 * a1, x2 + 0.5 * b1, v + 0.5 * c1);
                b2 = krok * x2_prim(t[i] + 0.5 * krok, x1 + 0.5 * a1, x2 + 0.5 * b1, v + 0.5 * c1);
                c2 = krok * v_prim(t[i] + 0.5 * krok, x1 + 0.5 * a1, x2 + 0.5 * b1, v + 0.5 * c1);

                a3 = krok * x1_prim(t[i] + krok, x1 + a2, x2 + b2, v + c2);
                b3 = krok * x2_prim(t[i] + krok, x1 + a2, x2 + b2, v + c2);
                c3 = krok * v_prim(t[i] + krok, x1 + a2, x2 + b2, v + c2);

                wspolrzedne_x1[i + 1] = wspolrzedne_x1[i] + (1.0 / 6.0) * (a0 + 2 * a1 + 2 * a2 + a3);
                wspolrzedne_x2[i + 1] = wspolrzedne_x2[i] + (1.0 / 6.0) * (b0 + 2 * b1 + 2 * b2 + b3);
                wspolrzedne_v[i + 1]  = wspolrzedne_v[i] + (1.0 / 6.0) * (c0 + 2 * c1 + 2 * c2 + c3);

                if (Double.IsInfinity(wspolrzedne_x1[i + 1]) || Double.IsInfinity(wspolrzedne_x2[i + 1]) ||
                    Double.IsInfinity(wspolrzedne_v[i + 1]) || Double.IsNaN(wspolrzedne_x1[i + 1]) ||
                    Double.IsNaN(wspolrzedne_v[i + 1]) || Double.IsNaN(wspolrzedne_x2[i + 1]))
                {
                    return(false);
                }
            }

            for (int i = 0; i < size; i++)
            {
                wspolrzedne_x1[i] += wspolczynniki.init_x1;
                wspolrzedne_x2[i] += wspolczynniki.init_x2;
            }

            return(true);
        }