Добавил:
abhai2013@gmail.com Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
8
Добавлен:
30.06.2018
Размер:
87.74 Кб
Скачать

ЛАБОРАТОРНА РОБОТА 4

РОЗВ’ЯЗАННЯ СИСТЕМ ДИФЕРЕНЦІЙНИХ РІВНЯНЬ

Студента ИТ 14-1 Красовского Абхая

Мета роботи– здобути практичні навички розроблення алгоритмів і программ чисельних методів розв’язання систем диференційних рівнянь.

Вариант №11

Задача Коші для системи двох диференційних рівнянь:

Настроений метод Эйлера

Код:

#include <math.h>

double a, h;

int n, i, j, x_0, y_0, t_0, xpr, ypr;

double X[1000];

double Y[1000];

double T[1000];

double f1(double t, double x, double y) { return (y + 2 * t + 1); }

double f2(double t, double x, double y) { return x + y + t; }

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

Application::Exit(); }

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

a = Convert::ToDouble(textBox3->Text);// кінець інтервалу

n = Convert::ToInt32(textBox6->Text);// кількість точок

x_0 = Convert::ToInt32(textBox1->Text);// умова Коші

y_0 = Convert::ToInt32(textBox2->Text);// умова Коші

t_0 = Convert::ToInt32(textBox4->Text);// умова Кошi

//розрахунок кроку зміни аргументу х

h = (a - t_0) / n;

//Округлення кроку до 4 знаків після коми

textBox5->Text = Convert::ToString (floor(h*10000)/10000);

X[0] = x_0;

for (int i = 0; i < n; i++) {

X[i + 1] = X[i] + h;

if (X[i] == a) break;

}

Y[0] = y_0;

T[0] = t_0;

//Розрахунок коефіціентів метода Ейлера

for (int i = 0; i < n-1; i++)

{

T[i+1] = X[i] + h;

xpr = X[i] + h * f1(T[i], X[i], Y[i]);

ypr = Y[i] + h * f2(T[i], X[i], Y[i]);

X[i+1] = X[i] + h / 2 * (f1(T[i], X[i], Y[i]) + f1(T[i] + h, xpr, ypr));

Y[i+1] = Y[i] + h / 2 * (f2(T[i], X[i], Y[i]) + f2(T[i] + h, xpr, ypr));

}

Series^ plot1 = chart1->Series[0];

//Очищення компонента Chart1

plot1->Points->Clear();

//Очищення стовбців таблиці

dataGridView1->Columns->Clear();

//Створення двух стовбців у таблиці

dataGridView1->ColumnCount = 3;

//Створення у таблиці рядків

dataGridView1->Rows->Add(n);

dataGridView1->Columns[0]->Name="T";

dataGridView1->Columns[1]->Name="X";

dataGridView1->Columns[2]->Name="Y";

for (int j = 0; j < n; j++)

{

//Заповнення таблиці даними

dataGridView1->Rows[j]->Cells[0]->Value=Convert::ToDouble(floor(T[j]*10000)/10000);

dataGridView1->Rows[j]->Cells[1]->Value=Convert::ToDouble(floor(X[j]*10000)/10000);

dataGridView1->Rows[j]->Cells[2]->Value=Convert::ToDouble(floor(Y[j]*10000)/10000);

//Побудова графіка функції

plot1->Points->AddXY(X[j], Y[j]); } }

Результат:

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