ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 14.06.2019
Просмотров: 117
Скачиваний: 1
ЛАБОРАТОРНА РОБОТА 1
РОЗВ’ЯЗАННЯ НЕЛІНІЙНИХ
РІВНЯНЬ f (x) 0
Студента ИТ 14-1 Красовского Абхая
Мета роботи – здобути практичні навички розроблення алгоритмів
і програм чисельних методів розв’язання нелінійних рівнянь f (x) 0 .
Вариант №9
Б лок-схема метода А Блок-схема метода Д
Код:
double f (double x)
{
return 2 - x;
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if((textBox1->Text!="")&&(textBox2->Text!="")&&(textBox3->Text!="")&&((xn>=xk)||(eps<(xk-xn))))
{
xn = Convert::ToDouble(textBox1->Text);
xk = Convert::ToDouble(textBox2->Text);
eps = Convert::ToDouble(textBox3->Text);}
else
{
MessageBox::Show( "Дані заповнені невірно", "Помилка введення даних",MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
textBox1->Text= "";
textBox2->Text = "";
textBox3->Text="";}
}
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e)
{
Series^ plot1 = chart1->Series[0];
//Очищення графіка функції
plot1->Points->Clear();
//Побудова графіка функції на проміжку
x=xn;
while (x<=xk)
{
y=f(x);
plot1->Points->AddXY(x, y);
x=x+eps;
}
}
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e)
{
y11=f(xn);;y22=f(xk);
if (y11*y22<0)
{
n=0; x=xn;
do
{
y=f(x);
x1 = (xn + xk ) / 2;
y111=f(x1); n++;
if ((y*y111)<=0) xk=x1;
else xn=x1;
}
while( fabs(xk-xn)>eps);
}
else
{
MessageBox::Show( "Будь-ласка, змініть інтервал пошуку, немає коренів", "Помилка введення даних", MessageBoxButtons::OK, MessageBoxIcon::Exclamation);
//Очищення компонентів для нового введення даних
textBox1->Text= "";
textBox2->Text = "";
textBox3->Text="";
}
label9->Text = Convert::ToString (x1);
label10->Text = Convert::ToString (n);
}
private: System::Void button3_Click_1(System::Object^ sender, System::EventArgs^ e)
{
Application::Exit();
}
private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) {
}
private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e)
{
int i = 0, c = -1;
double x = 0, xNext = f(x);
i++;
while (!(abs( xNext - x ) < eps ) )
{
x = xNext;
xNext += c * f(x);
i++;
}
label9->Text = Convert::ToString (xNext);
label10->Text = Convert::ToString (i);
}
Результат:
Через метод половинного деления.
Через метод простых итераций