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

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

}

Результат:

Через метод половинного деления.

Через метод простых итераций

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