Приложение в
Код
для задания 3
using
System;
class
Program
{
static
void
Main(string[]
args)
{
double
x0 = 0;
double
y0 = 1;
double
h = 0.1;
int
n = 20;
double[]
eulerResults = new
double[n +
1];
double[]
rk2Results = new
double[n +
1];
double[]
rk4Results = new
double[n +
1];
eulerResults[0]
= y0;
rk2Results[0]
= y0;
rk4Results[0]
= y0;
for
(int i = 1;
i <= n; i++)
{
double
x = x0 + (i - 1) * h;
eulerResults[i]
= eulerResults[i - 1] + h * F(x, eulerResults[i - 1]);
}
for
(int i = 1;
i <= n; i++)
{
double
x = x0 + (i - 1) * h;
double
k1 = F(x, rk2Results[i - 1]);
double
k2 = F(x + h, rk2Results[i - 1] + h * k1);
rk2Results[i]
= rk2Results[i - 1] + (h / 2) * (k1 + k2);
}
for
(int i = 1;
i <= n; i++)
{
double
x = x0 + (i - 1) * h;
double
k1 = F(x, rk4Results[i - 1]);
double
k2 = F(x + h / 2, rk4Results[i - 1] + (h / 2) * k1);
double
k3 = F(x + h / 2, rk4Results[i - 1] + (h / 2) * k2);
double
k4 = F(x + h, rk4Results[i - 1] + h * k3);
rk4Results[i]
= rk4Results[i - 1] + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4);
}
Console.WriteLine("Метод
Эйлера:");
PrintResults(eulerResults,
h);
Console.WriteLine("Метод
Рунге-Кутта 2-го порядка:");
PrintResults(rk2Results,
h);
Console.WriteLine("Метод
Рунге-Кутта 4-го порядка:");
PrintResults(rk4Results,
h);
}
static
double
F(double x,
double y)
{
return
3 * x * y;
}
static
void
PrintResults(double[]
results, double
h)
{
for
(int i = 0;
i < results.Length; i++)
{
double
x = i * h;
Console.WriteLine($"x
= {x:F1},
y = {Math.Round(results[i],2)}");
}
}
}
Томск
2024