- •Тема I. Методи рішення нелінійних рівнянь 5
- •Тема iІ. Чисельне рішення систем лінійних алгебраїчних рівнянь 18
- •Тема III. Методи чисельного інтегрування 34
- •Тема IV. Методи чисельного інтегрування звичайних диференційних рівнянь 44
- •Тема I. Методи рішення нелінійних рівнянь Лабораторна робота №1. Уточнення коренів нелінійного рівняння методом ділення відрізка наполовину
- •Лабораторна робота №2. Уточнення коренів нелінійного рівняння методом Ньютона (дотичних)
- •Лабораторна робота №3. Уточнення коренів нелінійного рівняння методом хорд (січних)
- •Лабораторна робота №4. Уточнення коренів нелінійного рівняння методом ітерацій (метод послідовних приближень)
- •Структура програми на мові програмування Turbo c
- •Порядок виконання лабораторних робіт №№ 1–4
- •Індивідуальні завдання
- •Контрольні запитання
- •Тема iІ. Чисельне рішення систем лінійних алгебраїчних рівнянь Лабораторна робота №5. Рішення систем лінійних алгебраїчних рівнянь методом Гауса
- •Лабораторна робота №6. Рішення систем лінійних алгебраїчних рівнянь методом Зейделя
- •Порядок виконання лабораторних робіт №№ 5, 6
- •Опис програмного комплексуgz.Exe
- •Індивідуальні завдання
- •Контрольні запитання
- •Тема III. Методи чисельного інтегрування Лабораторна робота №7. Обчислення визначеного інтеграла методом трапецій
- •Лабораторна робота №8. Обчислення визначеного інтеграла методом Сімпсона
- •Порядок виконання лабораторних робіт №№ 7, 8
- •Індивідуальні завдання
- •Варіанти індивідуальних завдань
- •Контрольні запитання
- •Тема IV. Методи чисельного інтегрування звичайних диференційних рівнянь Лабораторна робота №9. Чисельне інтегрування звичайних диференційних рівнянь методом Ейлера
- •Рішення рівняння (4.8) методом Ейлерa
- •Лабораторна робота №10. Чисельне інтегрування звичайних диференційних рівнянь модифікованим методом Ейлера
- •Рішення рівняння (4.8) модифікованим методом Ейлера
- •Лабораторна робота №11. Чисельне інтегрування звичайних диференційних рівнянь методом Ейлера-Коши
- •Рішення рівняння (4.8) методом Ейлера-Коши
- •Лабораторна робота №12. Чисельне інтегрування звичайних диференційних рівнянь методом прогнозу та корекції
- •Порядок виконання лабораторних робіт №№ 10 – 12
- •Індивідуальні завдання
- •Варіанти індивідуальних завдань
- •Контрольні запитання
- •Перелік рекомендованої літератури
Лабораторна робота №4. Уточнення коренів нелінійного рівняння методом ітерацій (метод послідовних приближень)
1. Мета роботи
Вивчення методу рішення нелінійних рівнянь. Складання програми на мові програмування Turbo C.
2. Теоретичні відомості
Одним з найбільш розповсюджених методів уточнення коренів рівняння при рішенні завдання хімічної технології являється ітераційний метод чи метод послідовних приближень.
Метод простої ітерації використовується для рішення нелінійного рівняння з виділеним лінійним членом вигляду
x= (x), (1.4)
та полягає у побудуванні послідовності х, починаючи з деякого заданого початкового значеннях, за правилом
xn+1= (xn), n = 0,1,2,3.... (1.5)
Якщо (x)– неперервна функція, аxn – послідовність, що сходиться, то значення
являється рішенням рівняння (1.4)
Побудування декількох послідовних приближень по (1.5) приведено на рис. 1.7.
Рис.1.7. Графічна інтерпретація методу ітерацій
Перетворення рівняння з метою виділення лінійного члена можна провести різними шляхами.
Наприклад, якщо f(x)=x2–c=0, то можна:
а) додати до правої чи лівої частини х: x=x2+x–c
б) поділити усе вираженнянах: х=с/хі т.п.
Умови збіжності.Якщо |'(x)|<1, то процес сходиться, якщо ж |'(x)|>1 –розходиться. Нерівністьтреба виконувати для усіхх, обчислених у ході рішення завдань.
Збіжність методу ітерацій залежить від вибору вигляду рівняння з виділеним лінійним членом. При невдалому виборі можна отримати процес, що не збігається.
ПРИКЛАД: Для визначення оптимальної концентрації компоненту у реакторі необхідно вирішити рівняння: x3+x=1000. З дослідних даних маємо, що шукана величина знаходиться у межах [9;10]. Уточнити корінь рівняння з точністю=10–4.
Вихідне рівняння можна записати у вигляді:
x3=1000–x (a)
чи
x=(1000–x)1/3(б).
Розглянемоотримане рівняння. Рівняння(а)не підходить, тобто |'(x)|=|–2x 3|> 1. Для рівняння(б)
'(x) =< 1
Обчислюємо послідовні приближення хnпо формулі
yn = 1000 – xn; xn+1= (yn) 1/3 (n=0,1,2,3...).
Знайдені значення (обчисленні з одним запасним знаком) наведені у таблиці
n |
хn |
yn |
0 |
10 |
990 |
1 |
9,96655 |
990,03345 |
2 |
9,96666 |
990,03334 |
3 |
9,96667 |
|
Виходячи з того, що |x3–x2|<, можна прийняти х = 9,96667.
Структура програми на мові програмування Turbo c
Програма мовою ТС являє собою текстовий файл чи групу об’єднаних текстових файлів, що мають розширення *.с, названих вихідним чивихідними, структурованих таким способом:
Підключення заголовних файлів, що містять прототипи стандартних функцій, які використовуються в даному файлі (директива include).
Оголошення public (загальних чи глобальних) змінних.Рublic-змінні – змінні загальні і доступні всім функціям у даному файлі і вкладених файлах; оголошуються за правилами оголошення змінних.
Опис заголовків допоміжних функцій, що знаходяться в даному файлі.
Головна функція (main).
Заголовки і тіла допоміжних функцій, описаних на стадії 3.
Функціяв мові Turbo C– це елементарна частина програми, відособлене об'єднання команд, що мають визначену структуру і конкретні ознаки. Функція має окремий власний заголовок і виконує яку-небудь задану нею дію. Функція грає ту ж роль, що і підпрограми або процедури в інших мовах програмування. Функція може приймати зовнішні змінні, що іменуютьсяпараметрами (аргументами), у будь-якій кількості і завжди повертає не більш одного значення.
Заголовок функціїстворюється за наступними правилами: починається типом змінної, котра повертається функцією, потім йде назва (ім'я) функції й у круглих дужках () опис типу та імені всіх переданих у функцію змінних через кому. Наприклад:
int abs (int x);
Функція absвикористовується для розрахунку модуля (абсолютного значення) числа. У даному прикладі у функцію передається цілочислова зміннах, при цьому функція повертає цілочисловий модуль цієї змінної.
Тіло функції, як і програма, являє собою послідовність операторів, яку заключають у фігурні дужки. До речі, головна програма – це тіло функціїmain. В тілі будь-якої функції використовується операторreturn, який повертає значення функції. По цьому оператору завершується робота функції.
Як приклад, розглянемо програму для розрахунку знака числа.
# include <stdio.h> |
/* підключення заголовного файлу, що містить прототипи стандартних функцій вводу–виводу scanf та printf */ |
int sign (float x) |
/* оголошення заголовку допоміжної функції sign (знак числа): в функцію передається не цілочислова змінна х, функція повертає цілочислове значення */ |
{ if (x>0) return 1; if (x<0) return –1; return 0; } |
/* тіло функції sign (знак числа): в залежності від аргументу х, оператор return повертає 1, –1 або 0 */ |
void main (void) |
/* головна функція main */ |
{ float x; int s; |
/* оголошення не цілочислової змінної х, та цілочислової s */ |
printf (“\nвведи x=”); |
/* вивід на екран повідомлення введи x=*/ |
scanf (“%f”, &x); |
/* ввід з клавіатури значення х */ |
s=sign(x); |
/* використання функції sign (знак числа): змінній s присвоюється знак введеної змінної х */ |
printf (“\nзнак змінної x=%d”, s); } |
/* вивід на екран повідомлення і значення змінної s */ |
Приклад програми, що реалізує метод ділення відрізка наполовину
/* метод ділення відрізка наполовину*/
#include <stdio.h>
#include <conio.h>
#include <math.h>
float f(float x)
{ return (5*pow(x,4)+3*pow(x,2)–11*x–5); }
void main(void)
{
float a, b, x, fa, fb, fx, e=0.001;
clrscr ();
printf ("\n уведіть границі інтервалу [a,b], на якому шукається корінь рівняння ");
printf ("\n a="); scanf ("%f", &a); printf (" b="); scanf ("%f", &b);
fa=f(a); fb=f(b);
if (fa*fb<0)
{ do
{ x=(a+b)/2; fx=f(x);
if (fa*fx<0){b=x;}
else { if (fx==0) {goto m1;}
else {a=x;}
}
} while (fabs(a-b)>2*e);
m1: printf ("\n значення кореня на інтервалі [a,b] x=%f", x);
printf ("\n значення функції при x=%f \n f(x)=%f", x, fx);
}
else {printf ("\n на інтервалі [a,b] немає коренів");}
getch();