
01.02.2009, 17:57
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
метод Рунге-Кутта 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..
|
|
|