Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка по лабораторным.doc
Скачиваний:
20
Добавлен:
10.02.2016
Размер:
1.44 Mб
Скачать

Лабораторна робота №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

Програма мовою ТС являє собою текстовий файл чи групу об’єднаних текстових файлів, що мають розширення *.с, названих вихідним чивихідними, структурованих таким способом:

  1. Підключення заголовних файлів, що містять прототипи стандартних функцій, які використовуються в даному файлі (директива include).

  2. Оголошення public (загальних чи глобальних) змінних.Рublic-змінні – змінні загальні і доступні всім функціям у даному файлі і вкладених файлах; оголошуються за правилами оголошення змінних.

  3. Опис заголовків допоміжних функцій, що знаходяться в даному файлі.

  4. Головна функція (main).

  5. Заголовки і тіла допоміжних функцій, описаних на стадії 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();