ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.06.2019
Просмотров: 95
Скачиваний: 1
ЛАБОРАТОРНА РОБОТА 5
ІНТЕРПОЛЮВАННЯ ФУНКЦІЙ
Студента ИТ 14-1 Красовского Абхая
Мета роботи – здобути практичних навичок розроблення алгоритмів і програм, які здійснюють лінійне інтерполювання поліномами Лагранжа.
Вариант №9
Блок-схема метода
Код:
#include<math.h>
double x,x1,Result;
int m,i,j;
double X[50];
double Y[50];
// Задана функція
double f (double x)
{
return 2 + cos(x);
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if (textBox1->Text!="")
{
m = Convert::ToInt32(textBox1->Text);
//Очищення стовбців компоненту DataGridView1, якщо вони не пусті
dataGridView1->Columns->Clear();
//У компоненті DataGridView1 встановлення m стовбців
dataGridView1->ColumnCount = m;
//У компоненті DataGridView1 встановити 2 рядки
dataGridView1->RowCount = 2;
for (int i = 0; i < m; i++)
//Підпис стовбців «Координати n-ої точки»
dataGridView1->Columns[i]->Name="координати "+Convert::ToString(i+1)+" точки";
}
else
//Якщо не ввели кількість точок, то з’являється окно повідомлення про помилку
MessageBox::Show("Заповніть, будь-ласка,дані","Помилка вве-дення даних",MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
for (i = 0; i < m; i++)
//зчитування даних з таблиці у масиви
{
X[i] = Convert::ToDouble(this->dataGridView1->Rows[0]->Cells[i]->Value);
Y[i] = f(X[i]);
this->dataGridView1->Rows[1]->Cells[i]->Value = Convert::ToString(Y[i]);
}
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e)
{
Series^ plot1 = chart1->Series[0];
Series^ plot2 = chart1->Series[1];
Series^ plot3 = chart1->Series[2];
//Очищення компоненту Chart1
plot1->Points->Clear();
plot2->Points->Clear();
plot3->Points->Clear();
for(int i = 0; i < m; i++)
{
plot1->Points->AddXY(X[i],Y[i]);
plot2->Points->AddXY(X[i],Y[i]);
}
x1 = X[0];
while (x1 <= X[m-1])
{
plot3->Points->AddXY(x1,f(x1));
x1 += 0.01;
}
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)
{
x = Convert::ToDouble(textBox2->Text);
// лінійна інтерполяція
for(int i = 0; i < m; i++)
if (x >= X[i] && x <= X[i+1]) Result = Y[i]*((x - X[i+1]) / (X[i] - X[i+1])) + Y[i+1] * ((x - X[i]) / (X[i+1] - X[i]));
else if (x > X[m-1]) textBox2->Text = "Невірне значення Х";
else
{
textBox3->Text=Convert::ToString (Result);
textBox4->Text=Convert::ToString ((fabs(Result - f(x)) / f(x) * 100));
}
}
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e)
{
Application::Exit();
}
Результат: