Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
Чепилов Дмитрий Гр.6208 Задание #3, Вариант #11
Постановка задачи.
Решить задачу Коши для обыкновенного дифференциального уравнения. Дифференциальное уравнение имеет вид , где производная, а заданная функция. Решить задачу Коши значить найти функцию , удовлетворяющую начальному условию
Заданы следующие уравнение и начальное условие:
Численное решение системы :
Выберем следующие начальные условия , . Теперь вычислим константу :
Отсюда получим, что и тогда
Численное решение системы вычисляется по следующей формуле:
где функция производная из уравнения .
Численное решение системы вычисляется в два этапа по следующим формулам:
где функция производная из уравнения .
Программа написана на языке программирования C# , в среде программирования Microsoft Visual Studio .NET 2005.
using System;
using System.Collections.Generic;
using System.Text;
namespace Lab3_Dif.Yr
{
class Program
{
static float x0 = 2, y0 = 0;
static float Numerical_Solution(float x)
{
return (x * x / 2 - 2) * (float)Math.Log(x);
}
static float F(float x, float y)
{
float temp = x * (float)Math.Log(x);
return temp + y / temp;
}
static float Eiler(int N)
{
float x, y, y_prev=y0, error, max_error=0;
float h=(float) 1/N;
Console.WriteLine();
Console.WriteLine("При N="+N+", шаг h= " + h);
for (int i = 0; i <= N; i++)
{
x = x0 + i * h;
if (i == 0)
{ y = y0; }
else
{ y = y_prev + h * F(x, y_prev); }
error = y - Numerical_Solution(x);
Console.WriteLine(i + " x= " + x + " y(Э)= " + y + " y(точ)= " + Numerical_Solution(x) + " погрешность= " + error);
if (error > max_error)
max_error = error;
y_prev = y;
}
Console.WriteLine("максимальная ошибка = " + max_error);
return max_error;
}
static float Eiler_Coche(int N)
{
float x, yi, // y[i]
yi__, // y[i-1/2]
y_prev = y0, // y[i-1]
error, max_error = 0;
float h = (float)1 / N;
Console.WriteLine();
Console.WriteLine("При N=" + N + ", шаг h= " + h);
for (int i = 0; i <= N; i++)
{
x = x0 + i * h;
if (i == 0)
{ yi = y0; }
else
{
yi__ = y_prev + h/2 * F(x, y_prev);
yi = y_prev + h * F(x-h/2, yi__);
}
error = yi - Numerical_Solution(x);
Console.WriteLine(i + " x= " + x + " y(Э-К)= " + yi + " y(точ)= " + Numerical_Solution(x) + " погрешность= " + error);
if (error > max_error)
max_error = error;
y_prev = yi;
}
Console.WriteLine("максимальная ошибка = " + max_error);
return max_error;
}
static void Main(string[] args)
{
Console.WriteLine("Метод Эйлера :");
Eiler(10);
Eiler(20);
Eiler(40);
Console.WriteLine("\nМетод Эйлера-Коши :");
Eiler_Coche(10);
Eiler_Coche(20);
Eiler_Coche(40);
Console.ReadKey();
}
}
}
Программа выдала следующий результат: