ВычМат / ВычМат(5)
.docxМИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»
НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)
КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ
ЛАБОРАТОРНАЯ РАБОТА № 6
«Дифференциальные уравнения»
По дисциплине
«Вычислительная математика»
Выполнил:
Студент группы 2161121
Золотых С.В.
Проверил:
Мингалеева Л.Б.
Набережные Челны
2018
Цель
Составить решение дифференциального уравнения первого порядка тремя методами: Эйлера, Эйлера-Коши, Рунге-Кутты. На отрезке , с начальным условием , с шагом .
Используя метод Эйлера с уточнением, составить таблицу приближённых значений дифференциального уравнения, расположенного на отрезке [1,6; 2,6], с начальными данными , с шагом .
Реализация
Все три метода включают в себя один общий метод Эйлера. Решение заключается в нахождении , используя начальные условия и заданный шаг.
Метод Эйлера:
…
10)
Метод Эйлера-Коши:
-
,
,
,
,
,
,
-
,
,
,
,
,
,
…
,
,
,
,
,
.
Метод Рунге-Кутты:
-
,
,
,
,
,
,
-
,
,
,
,
,
,
…
,
,
,
,
,
.
Реализация в Excel
График, показывающий три решения:
2)
Реализация на C#
using System;
namespace Dif
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
dataGridView1.RowCount = 12;
dataGridView1.ColumnCount = 4;
dataGridView1.Columns[0].Name = "x(i)";
dataGridView1.Columns[1].Name = "y(i)*";
dataGridView1.Columns[2].Name = "y(i)**";
dataGridView1.Columns[3].Name = "y(i)***";
dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font(dataGridView1.ColumnHeadersDefaultCellStyle.Font.FontFamily, 14f, FontStyle.Bold);
label1.Text = " y*- Метод Эйлера \n y** - Метод Эйлера-Коши \n y*** - Метод Рунге-Кутты";
}
double F(double x, double y)
{
double m = 1.5 * x;
return 0.215 * (Math.Pow(x, 2) + Math.Cos(m)) + 1.283 * y;
}
private void button1_Click(object sender, EventArgs e)
{
Eiler();
Eiler_new();
R_K();
}
public void Eiler()
{
double a = 0.2;
double b = 0.25;
double h = 0.1;
double b1 = 1.2;
double n = (b1 - a) / h;
n = 11;
double[] X = new double[11]; double[] Y = new double[11];
X[0] = a; Y[0] = b;
for (int i = 0; i <=n-1; i++)
{
if (i == 0) { X[i] = a; Y[i] = b; }
else
{
X[i] = a + i * h;
Y[i] = Math.Round((Y[i - 1] + h * F(X[i - 1], Y[i - 1])),4);
}
}
for (int i = 0; i <n; i++)
{
dataGridView1.Rows[i].Cells[0].Value = X[i];
}
for (int i = 0; i < n; i++)
{
dataGridView1.Rows[i].Cells[1].Value = Y[i];
}
chart1.Series[0].Points.DataBindXY(X, Y);
}
public void Eiler_new()
{
double a = 0.2;
double b = 0.25;
double h = 0.1;
double n = 11;
double[] X = new double[11]; double[] Y = new double[11];
X[0] = a; Y[0] = b;
for (int i = 0; i <= n - 1; i++)
{
if (i == 0) { X[i] = a; Y[i] = b; }
else
{
X[i] = a + i * h;
Y[i] = Math.Round((Y[i - 1] + h * F((X[i - 1] + h / 2), (Y[i - 1] + h / 2 * F(X[i - 1], Y[i - 1])))),4);
}
}
for (int i = 0; i < n; i++)
{
dataGridView1.Rows[i].Cells[2].Value = Y[i];
}
chart1.Series[0].Points.DataBindXY(X, Y);
}
public void R_K()
{
double a = 0.2;
double b = 0.25;
double h = 0.1;
double n = 11;
double k1 = 0, k2 = 0, k3 = 0, k4 = 0,delY=0;
double[] X = new double[11]; double[] Y = new double[11];
X[0] = a; Y[0] = b;
for (int i = 0; i <= n - 1; i++)
{
if (i == 0) { X[i] = a; Y[i] = b; }
else
{
X[i] = a + i * h;
k1 = F(X[i - 1], Y[i - 1]);
k2 = F((X[i - 1] + h / 2), (Y[i - 1] + (k1 * h) / 2));
k3= F((X[i - 1] + h / 2), (Y[i - 1] + (k2 * h) / 2));
k4= F((X[i - 1] + h), (Y[i - 1] + k3 * h));
delY = (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4);
Y[i] = Math.Round((Y[i - 1] + delY),4);
}
}
for (int i = 0; i < n; i++)
{
dataGridView1.Rows[i].Cells[3].Value = Y[i];
}
chart1.Series[0].Points.DataBindXY(X, Y);
}
private void button2_Click_1(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Результат
Вывод
Реализованы три метода решения дифференциальных уравнений: Эйлера, Эйлера-Коши и Рунге-Кутты.