Показать сообщение отдельно

  #1069  
Старый 01.02.2009, 17:57
eLWAux
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме:
5111568

Репутация: 2399


Отправить сообщение для eLWAux с помощью ICQ
По умолчанию

метод Рунге-Кутта 4 порядка:

Код:
using System;
using System.Collections.Generic;
using System.Text;

namespace ZI_22_KMDI_6
{
    class RyngeRytta4
    {
        const int n = 2; // Порядок системи
        const double h = 0.1; // Крок
        double x, a = 0, b = 1; // Проміжок
        global double[] y = new double[n]; //если небольшой масив
        global double[] f = new double[n]; //тогда можна без global

        void dy() // Праві частини рівнянь
        {
            f[0] = y[1];
            f[1] = (8 * y[1] - 5 * y[0] - 4 * Math.Exp(x) * Math.Sin(x / 2)) / 4;
        }
        public void Calculate()
        {
            double[] K1 = new double[n];
            double[] K2 = new double[n];
            double[] K3 = new double[n];
            double[] K4 = new double[n];
            double[] z = new double[n];

            // Початкові значення
            y[0] = 1; y[1] = 1;
            x = a;

            do
            {
                dy();
                for (int i = 0; i < n; i++)
                {
                    K1[i] = f[i];
                    z[i] = y[i];
                    y[i] = z[i] + 0.5 * h * K1[i];
                }
                x = x + 0.5 * h;
                dy();
                for (int i = 0; i < n; i++)
                {
                    K2[i] = f[i];
                    y[i] = z[i] + 0.5 * h * K2[i];
                }
                dy();
                for (int i = 0; i < n; i++)
                {
                    K3[i] = f[i];
                    y[i] = z[i] + 0.5 * h * K3[i];
                }
                x = x + 0.5 * h;
                dy();
                for (int i = 0; i < n; i++)
                {
                    K4[i] = f[i];
                    y[i] = z[i] + h * (K1[i] + K4[i] + 2 * (K2[i] + K3[i])) / 6;
                }
                Console.WriteLine("x = " + x + "; y = " + y[0] + "; y' = " + y[1]);
            }
            while (x < b);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            RyngeRytta4 Lab6 = new RyngeRytta4();
            Lab6.Calculate();
            Console.Read();
        }
    }
}

Последний раз редактировалось eLWAux; 01.02.2009 в 18:33..
 
Ответить с цитированием