Решение задачи Коши модифицированным методом Эйлера - C#
Формулировка задачи:
Здравствуйте! Помогите, пожалуйста, написать программу на языке программирования C# по задаче Коши модифицированным методом Эйлера. Желательно написать в Windows Form, ну или хотя бы в консольном приложении.
Мне нужно, чтобы шаг считался автоматически, делился на 2.
Условие: (dy/dx)+2*pi*y^2*cos(2*pi*x+(pi/6)=0.
x0=0; y0=1/(sin(pi/6). Предел интегрирования 0.4
в ссылке фото с примерным алгоритмом. Может. найдете какие-нибудь ошибки.. Заранее спасибо!
Решение задачи: «Решение задачи Коши модифицированным методом Эйлера»
textual
Листинг программы
class Program
{
delegate double Foo(double x);
delegate double Foo2(double x, double y);
static double df(double x, double y, double omega, double phi)
{
return -omega * y * y * Math.Cos(omega * x + phi);
}
static double Integral(Foo2 F, double x, double x0, double y0, double eps)
{
int n = 1;
double y_h = double.MaxValue; // Значение с текущим шагом
double y_double_h = 0; // Значение с удвоенным шагом
while (Math.Abs(y_h - y_double_h) > eps) // это условие излишне, см. учебник
{
double h = (x - x0) / n;
double y = y0;
double t = x0;
for (int i = 0; i < n; i++)
{
y += h * F(t + h / 2, y + h * F(t, y) / 2);
t += h;
}
n *= 2;
y_double_h = y_h;
y_h = y;
}
return y_h;
}
static void Main(string[] args)
{
double omega = 2.0 * Math.PI, phi = Math.PI / 6.0;
double x0 = 0, y0 = 1 / Math.Sin(phi);
Foo I = b => Integral((x, y) => df(x, y, omega, phi), b, x0, y0, 1e-5);
Console.WriteLine(I(0.4));
Console.ReadLine();
}
}