ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.06.2019

Просмотров: 114

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ЛАБОРАТОРНА РОБОТА 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]);

}

}




Результат:






Смотрите также файлы