Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
Інститут післядипломної освіти
ЗВІТ
Про виконання лабораторної роботи №1
«Чисельні методи розв’язування нелінійних рівнянь»
з дисципліни «Чисельні методи»
Мета роботи: Ознайомлення на практиці з методами відокремлення дійсних ізольованих коренів нелінійних рівнянь та ітераційними методами їх уточнення.
Теоретичні відомості
Процес розв’язання нелінійних рівнянь вигляду (4.1) або (4.2) на ЕОМ розбивається на два етапи:
1. відокремлення коренів;
2. уточнення коренів.
Графічний метод. Будують графік функції для рівняння виду або представляють рівняння у вигляді та будують графіки функцій та . Значення дійсних коренів рівняння є абсцисами точок перетину графіка функції з віссю або абсцисами точок перетину графіків функцій та . Відрізки, в яких знаходиться тільки по одному кореню, легко знаходяться наближено.
Метод половинного ділення
/
/
/
Хід роботи
1. Відокремлення коренів здійснюемо графічним методом:
будуємо графік функції у=
після аналізу графіку функції робимо висновок, що розвязок функції знаходиться на проміжку від 0 до 1.
/
2. Здійснюємо уточнення коренів методом половинного ділення:
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
double a, b, E, y, xo;
double f (double x);
double f (double x)
{y=x*x*x+0.3*x*x+x-1.2;
return y;}
void main()
{
cout<<"vvedit a "; cin>>a; // введення проміжку , що містить розвязок рівняння
cout<<"vvedit b"; cin>>b;
while(abs(a-b)>0.001) // задается точність
{
if(f(a)*f(b)>0)
cout<<"zminit a ta b"; // якщо на проміжку від а до б знак функц. не змін
else // то цей пром. не містить розв.
{
xo=(a+b)/2.0; //знаходимо середину відрізка
if(f(xo)==0) cout<<"rozvjazok rivnyannya "<<(a+b)/2.0;
else
{if(f(a)*f(xo)<0) b=xo; else a=xo;} //беремо той відрізок, на якому змін.
} //знак функції
}
cout<<(a+b)/2.0; //цикл завершився- вивід розвязку
_getch();
}
3. Результати роботи програми:
/
4. Уточнення коренів методом хорд.
#include <iostream>
#include <conio.h>
#include <stdio.h>
using namespace std;
double a, b, E, y, xo;
double f (double x);
double f (double x)
{y=x*x*x+0.3*x*x+x-1.2;
return y;}
void main()
{
cout<<"vvedit a "; cin>>a; // введення проміжку , що містить розвязок рівняння
cout<<"vvedit b"; cin>>b;
E=1;
if(f(a)*f(b)>0)
cout<<"zminit a ta b"; // якщо на проміжку від а до б знак функц. не змін
else // то цей пром. не містить розв.
{
while(E) // задается точність
{
xo=a-(f(a)*(b-a)/(f(b)-f(a))); //Знайдемо значення xo, для якого y=0
if(abs(a-xo)>0.001) E=1; else E=0; // перевіряємо точність
a=xo;
}
}
cout<<xo; //цикл завершився- вивід розвязку
_getch();
}
5. Результати роботи програми.
/
Висновки
В ході даної лабораторної роботи на практиці розглядалися методи розв’язування нелінійних рівнянь, а саме : графічним методом здійснене відокремлення коренів, після чого уточнення коренів методом бісекцій та хорд.