- •Міністерство освіти і науки, молоді та спорту України Технічний коледж національного університету водного господарства та природокористування Лабораторна робота № 17
- •17.1. Мета роботи
- •17.2. Теоретичні відомості
- •1. Метод половинного ділення. Б лок схема методу половинного ділення
- •2. Метод простих ітерацій.
- •3. Метод хорд.
- •Блок-схема методу хорд
- •4. Метод дотичних.
- •Блок-схема методу дотичних
- •17.3. Програма роботи
- •17.4. Завдання
- •17.5. Контрольні питання
- •Якими методами можна визначити інтервал, в якому містяться корені нелінійного рівняння?
Міністерство освіти і науки, молоді та спорту України Технічний коледж національного університету водного господарства та природокористування Лабораторна робота № 17
з курсу “Основи програмування та програмного забезпечення”
Рівне 2012
Лабораторна робота № 17 “Розв’язування нелінійного рівняння” з курсу “Основи програмування та програмного забезпечення”
Упорядники: Пастушенко В.Й., Шатний С.В.
Робота 17. Роз’язування нелінійного рівняння.
17.1. Мета роботи
Навчитися знаходити корені нелінійного рівняння.
17.2. Теоретичні відомості
Нехай потрібно знайти корінь нелінійного рівняння 3х-exp(x)=0. Спочатку знайдемо інтервал області визначення, в якому знаходиться корінь, чи один з коренів. Для цього слід провести табулювання функції y=3х-exp(x).
//Програма табулювання функції
#include<stdio.h>
#include<conio.h>
#include<math.h>
float F(float x)
{return 3xexp(x);}
main( )
{ clrscr( );
float x;
for(x=-2;x<=2;x+=0.5)
printf(“\n x=%4.1f y=%4.1f”,x,F(x));
getch( );
}
Таблиця результатів табулювання функції y=3x-exp(x) |
|
x=-2.0 |
y=-6.1 |
x=-1.5 |
y=-4.7 |
x=-1.0 |
y=-3.4 |
x=-0.5 |
y=-2.1 |
x= 0.0 |
y=-1.0 |
x= 0.5 |
y=-0.1 |
x= 1.0 |
y= 0.3 |
x= 1.5 |
y= 0.0 |
x= 2.0 |
y=-1.4 |
Як видно із таблиці, корінь рівняння знаходиться на інтервалі [-2.0; 2.0]. Визначити корінь рівняння можна і графічним способом, побудувавши графік функції.
Уточнюють корені рівняння за допомогою методів:
половинного ділення;
простих ітерацій;
хорд;
дотичних.
1. Метод половинного ділення. Б лок схема методу половинного ділення
//Реалізація методу половинного ділення
#include<stdio.h>
#include<conio.h>
#include<math.h>
float F(float x)
{return 3x-exp(x);}
main( )
{ clrscr( );
float a=-1, b=1, x0, x1, eps=1e-4;
int k=0;
A: x0=(a+b)/2;
if(fabs(a-b)>eps)
{ if (F(a)*F(x0)>0) a=x0;
else b=x0;
k++; goto A;
}
printf(“\nx0=%.7fF(x0)=%.7f k=%d eps=%.e”,x0,F(x0),k,eps);
getch( );
}
Результати виконання програми:
-
№ п/п
х
k
1
0.61904
15
10-4
2
0.619060
18
10-5
3
0.6190610
21
10-6
2. Метод простих ітерацій.
Перетворимо рівняння f(x)=0 до виду x=(x). Оскільки довільний перехід не завжди забезпечує збіжність методу, то використаємо методику, що гарантує відповідне перетворення рівняння до виду x=(x).
В цьому випадку функцію подають у вигляді . В такому представленні невідомим є лише число k. Його значення знаходять із співвідношення |k|Q/2, де . Знайдемо похідну заданої функції і її максимальне значення на інтервалі [-1.0;1.0]. Похідна заданої функції f(x)=3-ex. Тоді . Оскільки функція монотонно зростає на цьому інтервалі, то достатньо знайти її значення на кінцях інтервалу і вибрати найбільше. Таким чином . Значення k згідно вищенаведеного співвідношення |k|Q/2=2.63/2 вибираємо рівним k=2 (k має додатній знак, оскільки похідна f(x)>0 на вибраному інтервалі).
Тепер функцію (х) можна записати таким чином .
Знайдемо значення q:
Таким чином, знайдене представлення функції (х) дозволяє забезпечити збіжність послідовності наближених розв’язків даного рівняння до точного цим методом.
Б лок-схема методу простих ітерацій
//Реалізація методу простих ітерацій
#include<stdio.h>
#include<conio.h>
#include<math.h>
float Fi(float x)
{return x-0.5(3x-exp(x));}
main( )
{ clrscr( );
float a=-1, b=1, x0=(a+b)/2, x1, q=0.86, eps=1e-6;
int k=0;
A: x1=Fi(x0);
if(fabs(x0-x1)>eps(1-q)/q)
{x0=x1; k++; goto A;}
printf(“\n x1=%.7f k=%d eps=%.ef”,x1,k,eps);
getch( );
}
Результати виконання програми:
-
№ п/п
х
k
1
0.61905
11
10-4
2
0.619060
14
10-5
3
0.6190612
17
10-6