ЛАБОРАТОРНА РОБОТА 4
ЧИСЕЛЬНЕ РОЗВ’ЯЗАННЯ ЗВИЧАЙНИХ ДИФЕРЕНЦІЙНИХ РІВНЯНЬ
Студента ИТ 14-1 Красовского Абхая
Мета роботи – здобути практичні навички розроблення алгоритмів і програм чисельних методів розв’язання звичайних диференційних рів- нянь першого порядку.
Вариант №9
Метод Эйлера
Блок-схема метода Эйлера
Код:
#include <math.h>
double a,h;
int n,i,j,x_0,y_0;
double X[1000];
double Y[1000];
…
double f(double x,double y)
{
return (x * y * y + x * y) / (1 + x * x);
}
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);// умова Коші
//розрахунок кроку зміни аргументу х
h=(a-x_0)/(n-1);
//Округлення кроку до 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;
//Розрахунок коефіціентів метода Ейлера
for (int i = 0; i < n-1; i++)
{
X[i+1] = X[i] + h;
Y[i + 1] = Y[i] + h * f(X[i],Y[i]);
}
Series^ plot1 = chart1->Series[0];
//Очищення компонента Chart1
plot1->Points->Clear();
//Очищення стовбців таблиці
dataGridView1->Columns->Clear();
//Створення двух стовбців у таблиці
dataGridView1->ColumnCount = 2;
//Створення у таблиці рядків
dataGridView1->Rows->Add(n);
dataGridView1->Columns[0]->Name="X";
dataGridView1->Columns[1]->Name="Y";
for (int j = 0; j < n; j++)
{
//Заповнення таблиці даними
dataGridView1->Rows[j]->Cells[0]->Value=Convert::ToDouble(floor(X[j]*10000)/10000);
dataGridView1->Rows[j]->Cells[1]->Value=Convert::ToDouble(floor(Y[j]*10000)/10000);
//Побудова графіка функції
plot1->Points->AddXY(X[j], Y[j]);
}
}
Результат: