Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВычМат / ВычМат(5)

.docx
Скачиваний:
5
Добавлен:
31.05.2018
Размер:
301.43 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)

КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ

ЛАБОРАТОРНАЯ РАБОТА № 6

«Дифференциальные уравнения»

По дисциплине

«Вычислительная математика»

Выполнил:

Студент группы 2161121

Золотых С.В.

Проверил:

Мингалеева Л.Б.

Набережные Челны

2018

Цель

Составить решение дифференциального уравнения первого порядка тремя методами: Эйлера, Эйлера-Коши, Рунге-Кутты. На отрезке , с начальным условием , с шагом .

Используя метод Эйлера с уточнением, составить таблицу приближённых значений дифференциального уравнения, расположенного на отрезке [1,6; 2,6], с начальными данными , с шагом .

Реализация

Все три метода включают в себя один общий метод Эйлера. Решение заключается в нахождении , используя начальные условия и заданный шаг.

Метод Эйлера:

10)

Метод Эйлера-Коши:

  1. ,

,

,

,

,

,

  1. ,

,

,

,

,

,

,

,

,

,

,

.

Метод Рунге-Кутты:

  1. ,

,

,

,

,

,

  1. ,

,

,

,

,

,

,

,

,

,

,

.

Реализация в 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();

}

}

}

Результат

Вывод

Реализованы три метода решения дифференциальных уравнений: Эйлера, Эйлера-Коши и Рунге-Кутты.

Соседние файлы в папке ВычМат