Алгоритм обчислення кореня рівняння методом ітерацій

Основні методи розв’язування нелінійних рівнянь. Геометрична інтерпретація варіантів розв’язку рівняння методом ітерацій. Опис алгоритму розв’язування рівняння методом ітерацій. Стандартні процедури та функції. Аналіз результатів роботи програми.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 25.05.2017
Размер файла 711,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

32

Размещено на http://www.allbest.ru/

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТРАНСПОРТНИЙ УНІВЕРСИТЕТ

НАДВІРНЯНСЬКИЙ КОЛЕДЖ НТУ

КУРСОВИЙ ПРОЕКТ

з дисципліни “Алгоритмізація та програмування”

на тему: "Алгоритм обчислення кореня рівняння методом ітерацій"

Зміст

  • Вступ
  • 1. Методи розв'язування нелінійних рівнянь
  • 1.1 Постановка задачі
  • 1.2 Методи визначання проміжків ізоляції
  • 1.3 Уточнення наближеного розв'язку рівняння методом дихотомії
  • 1.4 Уточнення наближеного розв'язку рівняння методом Ньютона
  • 1.5 Уточнення наближеного розв'язку рівняння методом хорд
  • 1.6 Уточнення наближеного розв'язку рівняння методом ітерацій
  • 1.6.1 Формула обчислення розв'язку рівняння
  • 1.6.2 Геометрична інтерпретація варіантів розв'язку рівняння методом ітерацій
  • 2. Опис програми
  • 2.1 Опис алгоритму розв'язування рівняння методом ітерацій
  • 2.2 Опис програми і підпрограм
  • 2.3 Опис стандартних процедур і функцій
  • 3. Результат роботи
  • 3.1 Аналіз результатів роботи програми
  • 3.2 Опис інтерфейсу користувача
  • 3.3 Вимоги до апаратного забезпечення
  • Висновки
  • Перелік використаних джерел
  • Додаток А

Вступ

Чисельні методи дозволяють розв'язувати задачу шляхом арифметичних операцій над числами з потрібною точністю. Розв'язок в такому разі подають теж у вигляді чисел. Є задачі, де без досить складних чисельних методів не можна віднайти відповіді.

Сучасні чисельні методи й потужні комп'ютери надають можливість розв'язувати такі задачі, про які раніше й не мріяли: це задачі економіки, зв'язку, транспорту, керування складними технологічними процесами.

Метою даного курсового проекту є:

- дослідити методи розв'язання нелінійних рівнянь з однією змінною;

- побудувати алгоритм уточнення кореня рівняння методом ітерацій;

- розробити програму на мові С++ для вирішення даної задачі;

- проаналізувати результати обчислень.

Програма повинна працювати в консольному режимі і виконувати ряд однотипних задач з довільною точністю.

ітерація нелінійне рівняння алгоритм

1. Методи розв'язування нелінійних рівнянь

1.1 Постановка задачі

Розглянемо рівняння

f (x) =0 (1.1)

Якщо f (x) - алгебраїчний багаточлен, то рівняння (1.1) називають алгебраїчним; якщо f (x) містить якісь спеціальні математичні функції (наприклад, cosx, sinx, lgx,ex тощо), то рівняння називають трансцендентним. Приміром, рівняннях 5+ 3x4 - 5x2+ 2x - 1=0 є алгебраїчне, а рівняння sinx3+x2+5x+2=0 - трансцендентне. Значення змінних оі (деі=1,2,.), за яких виконується рівняння f (оі) = 0, називаються нулями функції f (x), чи розв'язками рівняння (1.1). Рівняння (1.1) може мати чи то один, чи кілька розв'язків або не мати жодного. На графіку функції розв'язок відображується як точка перетинання функції f (x) та осіх (абсцис). На рис. 1.1, а зображено функцію, яка має три розв'язки, на рис. 1.1, б - функцію з одним розв'язком на проміжку [б,в].

Рисунок 1.1 - Геометрична інтерпретація розв'язків рівнянь на проміжку [б,в]: а - рівняння з кількома розв'язками; б - рівняння з одним розв'язком на проміжку

Проміжок [б,в], на якому є один і лише один розв'язок о рівняння (1.1), називають проміжком ізоляції, а сам розв'язок називають ізольованим на заданому проміжку.

У більшості випадків для розв'язків рівнянь не має аналітичних формул. Тому виникає потреба у застосовуванні наближених методів розв'язування рівнянь, які здебільшого складаються з двох етапів:

1) визначення проміжків ізоляції з метою обчислення наближених значень розв'язків рівняння;

2) уточнення наближеного значення розв'язку до заданого степеню точності (за заданого значення похибки).

1.2 Методи визначання проміжків ізоляції

Для визначання проміжків ізоляції використовується теорема, відома з курсу математики.

Теорема. Якщо функція f (x) є неперервною на проміжку [б,b] і на його кінцях набуває значення протилежних знаків, тобто f (б) Чf (b) <0, то всередині цього проміжку існує хоча б один розв'язок рівняння f (x) =0. Якщо, окрім цього, перша похідна f' (x) на цьому проміжку зберігає знак, то цей розв'язок буде єдиний (див. рис. 1.1 б).

На підставі цієї теореми зрозуміло, що для визначення всіх проміжків ізоляції достатньо побудувати графік функції або обчислити таблицю її значень. На рис.1.2 наведено приклад обчислення таблиці значень та побудови графіка функції x3-5x+ 1 =0 у математичному пакеті Mathcad.

Рисунок 4.2 - Визначення проміжків ізоляції у вікні Mathcad:

а - таблиця проміжків ізоляції; б - графік значень функції

За результатами обчислення таблиці значень та графіка видно, що функція f (x) =x3-5x+1 має протилежні знаки на кінцях трьох проміжків:

о1О [-3,-2], о2О [0,1], о3О [2,3].

Перша похідна f' (x) =3x2-5має однакові знаки на цих проміжках, тобто на кожному з них є лише один розв'язок рівняння. В якості початкового значення розв'язку може бути обрана будь-яка точка на проміжку ізоляції.

Для визначення проміжків ізоляції можна також замість рівняння f (x) =0 використовувати рівнозначне йому рівняння j (х) =y (х), де j (х) та y (х) - простіші за f (x) функції. У цьому разі розв'язком рівняння є абсциса точки перетинання графіків функцій y1 =j (х) та y2=y (х). Наприклад, рівняння хln (х) - 1=0 зручно замінити нарівно значне рівнянням ln (х) = 1/x.

Побудувавши графіки двох функцій - y1= ln (х) іy2=1/x,-визначимо проміжок ізоляції [1,e] та наближене значення розв'язку x?1.7 (рис.1.3).

Рисунок 1.3 - Визначення проміжку ізоляції з використанням графіків функцій рівнозначного рівняння

1.3 Уточнення наближеного розв'язку рівняння методом дихотомії

Розглянемо рівняння f (x) =0. Нехай функція f (x) є неперервною на проміжку [a,b] і f (a) ?f (b) <0. Звідси випливає, що розв'язок о рівняння (4.1) перебуває на заданому проміжку, тобто о О [a,b].

Для обчислення наближеного значення розв'язку рівняння виконаємо такі дії. Поділимо відрізок [a, b] навпіл на два відрізки. Якщо в точці ділення значення функції дорівнює нулю, тобто , то віднайдено точне значення розв'язку рівняння . Зазвичай ця умова не виконується, тобто , тому далі ми обираємо ту з половин відрізку [a, b], на кінцях якої функція f (x) має протилежні знаки.

Обраний відрізок позначимо [a1,b1], знову поділимо навпіл і виконаємо дії, аналогічні до попередніх. Унаслідок виконання таких кроків матимемо послідовність вкладених відрізків

[a,b] Й [a1,b1] Й [a2,b2] Й.--Й [an,bn], (1.2)

Таких що f (an) f (bn) <0. Отже, n-е наближення розв'язку хn рівняння (1.1) перебуває на проміжку [an,bn]. Оскільки довжина n-го відрізку dn дорівнює

При n>? послідовність a1,a2,…,an є монотонно неспадною, а послідовність b1,b2,…,bn - монотоннонезростаючою, то ці послідовності мають спільну границю:

(1.3)

Нескладно переконатися, що ця границя є розв'язком рівняння (1.1). Дійсно, з огляду на те, що f (x) є неперервною, віднаходимо

І звідси f (о) =0. Якщо процес ділення навпіл зупинити на n-му кроці, то за наближене значення розв'язку рівняння можна обрати значення

(1.4)

Вочевидь (рис. 4.4), що абсолютна похибка

. (1.5)

1.4 Уточнення наближеного розв'язку рівняння методом Ньютона

Нехай функція f (x) задовольняє на відрізку [а,b] таким умовам:

1) рівняння f (x) =0 має єдиний розв'язок x;

2) функції f' (x) та f'' (x) є неперервні і зберігають знаки.

З першої умови випливає, що f (a) та f (b) мають протилежні знаки, а друга умова означає, що функція f (x) на відрізку [а,b] чи то лише зростає (f' (x) >0), чи лише спадає (f' (x) <0) і при цьому її графік є чи то увігнутим (f'' (x) >0), чи опуклим (f'' (x) <0). Тут можливі лише два випадки:

1) f (b) Чf'' (b) >0,f (a) Чf'' (a) >0.

У першому випадку графік функції y = f (x) має вигляд такий, як на рис. 1.5, а, а у другому - як на рис. 1.5, б. У першому випадку за початкове (нульове) наближення візьмемо точку х0=b і віднайдемо точку В= f (b). Далі проведемо з точки В дотичну до графіка f (x), точку перетинання якої з віссю абсцис позначимо x1. Це буде перше наближення. Відновлюючи з точки х1 перпендикуляр до перетинання з функцією f (x), віднайдемо точку В1. З цієї точки знов проведемо дотичну до функції f (x), віднайдемо точку її перетинання з віссю абсцис - x2, яка стане другим наближенням до розв'язку рівняння. Продовжуючи цей процес, обчислимо послідовність точок х3, х4,…, хn, яка наближається до розв'язку x рівняння (1.1).

Рисунок 1.5 - Геометрична інтерпретація пошуку розв'язку рівняння методом Ньютона: а - для увігнутої функції; б - для опуклої функції

Для віднаходження значення x1 складемо рівняння дотичної до графіка f (x) в точці B:

.

Враховуючи,що b= x0, обчислимо:

(1.6)

Для обчисленняx 2 у співвідношенні (1.6) слід замінити x0 на x1, аx1 - на x2, що утворить формулу для другого наближеного значення:

Продовжуючи цей процес для xn, обчислимо

, n= (1,2,3,…) (1.7)

Границя послідовності x0, x1, …,xn, …, через її монотонність та обмеженість, існує й дорівнює розв'язкові рівнянняf (x) =0.

1) Вочевидь, що, якщо f (a) ?f" (a) >0, то слід покласти x0=a, і тоді формула (1.7) для обчислення xn залишається чинною.

2) Якщо застосувати метод Ньютона для кінця відрізка [a,b], на якому функція та її друга похідна мають протилежні знаки, то, замість наближення до розв'язку x, станеться віддалення від нього.

1.5 Уточнення наближеного розв'язку рівняння методом хорд

Нехай функція f (x) на відрізку [а,b] задовольняє таким умовам:

1) Рівняння f (x) = 0 має єдиний розв'язок, точне значення якого позначимо через x;

2) f (x) є неперервною на [а,b];

3) f" (х) зберігає знак на проміжку ізоляції.

Якщо f" (х) >0 на відрізку [a,b], то графік кривої y = f (x) буде опуклим у низі можливі два випадки обчислень розв'язку.

1-й випадок: f (a) >0 (рис. 1.6). У цьому разі за початкове (нульове) наближення візьмемо точку x0 =b. Далі, сполучуючи точки A та B хордою, дістанемо точку x1. Це і буде перше наближення. Точка х1 є абсцисою точки B1 графіка функції y=f (x). Сполучуючи А та В1 хордою, здобудемо друге наближення x2. Продовжуючи цей процес, обчислимо послідовність точок x3,x4,…,xn, яка наближається до розв'язку рівняння f (x) = 0.

Для віднайдення x1 cкладемо рівняння хорди АВ:

(1.8)

Точка x1 є точкою перетинання хорди із віссю абсцис. Отже, покладемо в рівнянні (1.8) b= x0,x = x1 і дістанемо

(1.9)

Рисунок 1.6 - Геометрична інтерпретація пошуку розв'язку рівняння методом хорд у разіf (a) >0

Для обчислення наближення х2 треба у співвідношенні (1.9) замінити змінну x0 на х1, а змінну х1 - на х2:

Продовжуючи цей процес, дістанемо формулу

(1.10)

Послідовність чисел x0,x1,…,xn, є монотонно спадаючою й обмеженою знизу (хn>x), тобто при f (x) =0 значення xn є наближеним розв'язком рівняння.

2-й випадок: f (a) <0 (рис. 1.7). У цьому разі нерухомим є правий кінець відрізка [a,b], і, за аналогією з випадком 1 для послідовних наближень, які утворюють зростаючу послідовність, здобудемо формулу

(1.11)

Рисунок 1.7 - Геометрична інтерпретація пошуку розв'язку рівняння методом хорд у разі f (a) <0

Якщо f" (х) <0 на відрізку [a,b], то слід змінити знак функції на протилежний, тобто розглядати функцію - f (х).

1.6 Уточнення наближеного розв'язку рівняння методом ітерацій

1.6.1 Формула обчислення розв'язку рівняння

Метод ітерацій - один з найбільш важливих і глибоких методів чисельного аналізу через його можливість застосування ґрунтовної ідеї цього методу до різноманітних обчислювальних задач. Розглянемо рівняння f (x) =0.

Нехай функція f (x) є неперервною на проміжку [a,b] і f (a) ?f (b) <0. Перетворимо її до вигляду

х = j (x). (1.12)

При цьому вважатимемо, що j (x) є неперервною на проміжку [a,b].

Зауваження. Перетворення рівняння (1.1) до вигляду (1.12) можна здійснити у кілька способів. Наприклад, якщо задано рівняння

x3 +2x-5=0, (1.13)

то рівнозначним до нього буде

(1.14)

Можна виокремити х3 з рівняння (1.13):

x3 =5-2x. (1.15)

З рівняння (1.15) можна ще здобути рівнянь, тотожних до рівняння (1.14):

,

.

Побудуємо послідовність чисел х0, х1, …, хn, члени якої утворюються в такий спосіб. У якості x0 оберемо початкове (нульове) наближення розв'язку рівняння (1.12) - будь-яке значення з відрізка [a, b] - і підставимо його замість змінної х у праву частину цього рівняння. Обчислене значення позначимо х1, тобто

Далі аналогічно обчислимо

, ,…

й у загальному випадку

. (1.16)

Нескладно переконатися в тому, що, якщо побудована в такий спосіб послідовність (1.16) має границю

(1.17)

То ця границя буде розв'язком рівняння (1.1). Дійсно, переходячи у співвідношенні (1.16) до границі за і враховуючи, що j (х) є неперервною, дістаємо

(1.18)

Звідси, відповідно до виразу (5.9), матимемо

x=j(x),

Тобто x є розв'язком рівняння (1.1), який може бути обчислено за формулою (1.16) з яким завгодно степенем точності.

1.6.2 Геометрична інтерпретація варіантів розв'язку рівняння методом ітерацій

Вочевидь, що розв'язок x рівняннях = j (x) є абсцисою точки М, яка є точкою перетинання графіків двох функцій (рис. 5.1):

Рисунок 1.8 - Геометрична інтерпретація методу ітерацій

Тут можливі два випадки:

1) 0<j? (x) <1;

2) 1<j? (x) <0.

Розглянемо спочатку випадок, коли j (x) зростає (j? (x) >0), але повільніше за x (тобто j? (x) <1, рис. 1.8). За нульове наближення х0 оберемо яку-небудь точку з околу розв'язку x, де має місце 0<j? (x) <1. Точку x1= j (x0) побудувати можна на осі абсцис у такий спосіб. З точки A0, яка лежить на кривій y2= j (x) і має абсцису х0, проводимо горизонтальну пряму до перетинання з прямою y1=x у точці B1. Абсциса цієї точки дорівнює x1, оскільки трикутник 0В1х1 - рівнобедрений. Точку x2 можна побудувати, провівши через точку В1 вертикальну лінію до перетинання з кривою y2= j (x) у точці A1. Ордината цієї точки дорівнює j (x1). У зв'язку з тим, що x2= j (x1), то, проводячи з точки A1 горизонтальну лінію до перетинання з прямою y1=x, матимемо точку, абсциса якої до рівню є x2. Продовжуючи цей процес, здобуватимемо точки х3, х4 і т.д., наближувані до розв'язку x.

Розглянемо тепер другий випадок, коли функція j (x) в околі розв'язку x спадає (j? (x) <0), але повільніше за x (j' (x) >-1). Геометричну інтерпретацію ітераційного процесу для цього випадку показано на рис. 1.9, а. Тут послідовні наближення х0, х1,., хn збігаються до розв'язку x рівняння. Однак, на відміну від попереднього випадку, коли всі члени послідовності х0, х1, хn містилися по один бік від розв'язку x, цього разу кожне наступне наближення перебуває на протилежному боці від точки x.

а б

в

Рисунок 1.9 - Варіанти пошуку розв'язків рівнянь методом ітерацій:

а) - 1<j' (x) <0; б) - j' (x) > 1; в) - j' (x) <-1

Нехай тепер |ц' (x) | > 1 у певному околі розв'язку ц рівняння х = ц (x). Тут також можливі два випадки: ц' (x) > 1 (рис. 1.9, б) і ц' (х) < - 1 (рис. 1.9, в). Як видно з рисунків, в обох цих випадках ітераційний процес є розбіжний, тобто кожне наступне наближення не наближається, а віддаляється від розв'язку x.

Наведена геометрична інтерпретація методу ітерацій дозволяє припустити, що послідовність ітерацій буде збіжною у разі, якщо |ц' (x) | < 1 у певному околі розв'язку ц рівняннях =j (х).

Універсальна формула обчислення рівнозначного рівняння для збіжності методу ітерацій

Як зазначалося раніше, рівняння вигляду f (x) = 0 можна у різні способи перетворити на рівнозначне рівняння (1.12) вигляду x= j (x), але кожне з них треба додатково досліджувати. Виведемо формулу для j (x), яка гарантовано дає збіжний ітераційний процес. Нехай розв'язок рівняння є xО[a,b]. Тоді рівняння (1.12) називатимемо канонічним щодо цього розв'язку, якщо

|j'(x)|Јq<1,xО[a,b],--(1.19)

Де q - певне число від 0 до 1. Ми вже знаємо, що за цієї умови ітераційний процес сходитиметься. Виникає запитання: чи завжди можна рівняння f (x) =0, розв'язок якого є xО[a,b], перетворити до форми? Виявляється, що так, завжди, якщо f' (x) не змінює знаки на проміжку [a,b]. Щоби у цьому переконатися, покладемо

j(x)=x-lf(x).

Тоді рівняння x=j (x) буде рівнозначним до рівняння f (x) =0 за будь-яких l№ 0.

Нескладно показати, що l завжди можна обрати в такий спосіб, щоби j (x) задовольняла умові (1.19). Дійсно,

j'(x)=1-lf'(x)

І умову (1.19) буде виконано, якщо

-qЈ1-lf'(xq<1.--(1.2_)

Нехай, наприклад,

_<m1--Ј--f'(xM1,xО[a,b]

(зокрема, у якості m1 та М1 можна узяти відповідно найменше й найбільше значення f? (x) на відрізку [а,b]). Тоді

1-lM1Ј1-lf'(x)Ј1-lm1.

Звідси видно, що нерівність (1.20) буде виконано, якщо покласти

1-lM1=-q,1-lm1=q,

Тобто якщо

Причому нескладно переконатися, що обране в такий спосіб q задовольняє умові 0Јq<1 за будь-яких m1> 0 та М1>0. Якщо f' (x) має незмінний знак на проміжку [a,b], то її обидва значення на кінцях проміжку можна вважати за найменше й найбільше, тобто за m1 та М1. Отже, універсальну формулу функції j (x), яка забезпечує збіжність методу ітерацій, можна записати і використовувати у вигляді

. (1.21)

Застосуємо універсальну формулу (1.21) для віднайдення розв'язку рівняння x3 +2x-5=0 на проміжку ізоляції [1,2]. Обчислимо похідну функції f (x) цього рівняння f'(x)=3x2+2, а також значення на кінцях проміжку m1= f' (1) = M1= f? (2) =14. Підставивши ці значення до формули (1.21), матимемо новий варіант функції j (x):

.

Отже, замінимо рівняння рівняння x3 +2x-5=0 на рівнозначне до нього канонічне

(1.22)

Перевіримо, чи виконується умова збіжності методу ітерацій для рівняння (1.22). Для цього запишемо похідну функції j (x).

й обчислимо значення j' (x) на кінцях проміжку ізоляції [1,2]: j' (1) =0.474; j' (2) = - 0.474. Ці значення відповідають умові |jў (х) |<1, тобто обрана функція ц (х) забезпечує збіжність ітераційного процесу пошуку розв'язку рівняння.

2. Опис програми

2.1 Опис алгоритму розв'язування рівняння методом ітерацій

На рис. 2.1 наведено блок-схему алгоритму розв'язування рівняння методом ітерацій.

Рисунок 2.1 - Блок-схема алгоритму підпрограми розв'язування рівняння методом ітерацій

Згідно з цим алгоритмом можна скласти текст функції мовою С++ розв'язування рівняння методом ітерацій:

// Функція методу ітерацій

iter (floata,floatb,floateps,float&xr)

{floatx0,r;

x0= (a+b) /2;

do{xr=f_iter (x0); r=fabs (x0-xr); x0=xr; }

while (r>=eps);

}

Для функції вхідними параметрами є: a-ліва межа проміжку ізоляції, b-права межа проміжку ізоляції, eps- бажана похибка наближеного розв'язку рівняння. Результат обчислень передає в головну програму змінна xr.

Функцію f (x), її першу похідну та спеціальну функцію слід попередньо записати у вигляді окремих підпрограм - функцій мовою С++ і розмістити їх перед наведеною вище функцією методу iter (). Наприклад, для розв'язування рівняння

x+ sin (x) - 1= 0

опис функцій для рівняння мовою С++ матиме вигляд

floata,b; // Опис меж проміжку ізоляції, як глобальних змінних

// Опис функції рівняння f (x) =0

floatf (floatх)

{returnx+ sin (x) - 1; }

// Опис першої похідної функції-f' (x)

floatf1 (floatх)

{return1+ cos (x); }

// Опис функції ц (x)

floatf_iter (floatх)

{returnx-2/ (f1 (a) +f1 (b)) *f (x); }

Оператор виклику функції в основній програмі має вигляд:.

Оператор виклику функції iter () в основній програмі для розв'язування рівняння на проміжку ізоляції [-1, 2] з похибкою eps можна записати у вигляді:

iter (-1, 2, eps, k);

Розв'язок рівняння запишеться до змінної k.

2.2 Опис програми і підпрограм

Програма призначена для обчислення рівняння виду .

Для введення даних в програму реадізована функція vvid () вона має наступний вигляд:

void vvid ()

{

printf ("Введiть значення коефiцiєнтiв a1,a2,a3,a4\n");

cin>>a1>>a2>>a3>>a4;

printf (" Для рiвнняння %f*x^3+%f*x^2+%f*x+%f \n",a1,a2,a3,a4);

printf (" Введіть межi локалiзацiї кореня a i b та точнiсть E \n");

cin>>a>>b>>E;

printf (" Йде обчислення.. \n");

}

Функція не має вхідних параметрів і не повертає результату, змінні в функції є глобальними. Тут використовується потік введення cinдля введення наступних змінних:

- a1, a2, a3, a4 - сталі коефіцієнти рівняння відповідно до a, b, c, d;

- aib - межі локалізації кореня;

- Е - задана точність кореня.

Для виведення підказок і повідомлень використано функцію printf ().

Також в програмі реалізовані функції f (x), f1 (x), f_iter (x) iter (a,b,eps), вказані вище та модифіковані під поліноміальне рівняння.

В деяких рівняннях коренів буває більше як один, для забезпечення повторного введення даних використовується конструкція while, яка надає змогу повторювати процедуру обчислення до тих пір поки не буде введено значення 2.

2.3 Опис стандартних процедур і функцій

Функціяchar * setlocale (int type, const char * locale) дозволяє запитувати або встановлювати певні параметри, залежні від географічного положення. Наприклад, у Європі замість десяткової крапки використовується кома.

Якщо параметр local заданий як NULL, то функція setlocale () повертає покажчик на рядок поточної локалізації. Інакше функція setlocale () намагається використовувати задану рядок локалізації для установки локальних параметрів відповідно до специфікації змінної type.

У момент виклику змінна type повинна мати одне з наступних значень, заданих у вигляді макросів: LC_ALL, LC_COLLATE, LC_CTYPE, LC_MONETARY, LC_NUMERIC, LC_TIME.

Макрос LC_ALL відноситься до всіх категорій локалізації. Макрос LC_COLLATE впливає на функцію strcoll (). Макрос LC_CTYPE змінює роботу функцій з символами. Макрос LC_MONETARY визначає формат валюти. LC_NUMERIC змінює спосіб зображення десяткової частини при форматуванні введення / виводу. Нарешті, макрос LC_TIME визначає поведінку функції strftime ().

Функція setlocale () повертає покажчик на рядок, асоційовану з параметром type. При виникненні помилки повертається нульовий покажчик.

Форматне виведення реалізується функцією:

printf (<форматний рядок>, <список аргументів>);

<форматний рядок> - рядок символів у лапках, що показує, як повинні бути надруковані аргументи. Наприклад:

printf ("Value PI equals %f\n”, pi);

Форматний рядок може містити символи тексту для виведення, специфікації перетворення та управляючі символи. Кожному аргументу відповідає своя специфікація перетворення, наприклад,

%d - десяткове ціле число;

%f - число із плаваючою крапкою типу float або double;

%e - число в експонентній формі типу float або double;;

%c - символ;

%s - рядок.

Таким чином, специфікація перетворення починається із символу % і закінчується символом перетворення (d, f, c та ін.). Після символу % перед символом перетворення може перебувати:

Знак мінус, що вказує на вирівнювання перетвореного аргументу по лівому краю поля виведення.

Ширина поля виведення - задає мінімальне число позицій для перетвореного аргументу. Якщо величина аргументу вимагає більшого числа позицій, то поле виведення автоматично розширюється. Якщо ж величина має менше символів, чим зазначена ширина поля, то ліворуч від її додаються пробіли.

Точність - число, яке стоїть через крапку за значенням ширини поля виведення й показує, скільки позицій ширини поля виведення виділяється під дробову частину аргументу типу float або double. Для специфікацій f та e точність за умовчанням дорівнює 6.

3. Результат роботи

3.1 Аналіз результатів роботи програми

В якості експериментального рівняння використаємо рівняння .

Першим пунктом, що необхідно зробити побудувати графік функції і локалізувати функцію. Для цього використаємо математичний пакет Mathcad. З графіку функції (рисунок 2.2) видно, що рівняння має три корені.

Рисунок 2.2 - Графік функції .

Межі локалізації коренів . З допомогою програми уточнимо корені. З рисунку 2.3 видно, що x1=-1,26061, x2=-0,101545ix3=1,56209. Для контрольної перевірки підставимо отримані результати у рівняння. Отримаємо:

5* (-1,26061) 3- (-1,26061) 2-10* (-1,26061) - 1=-10,0164-1,58913+12,6061-1=0,0005;

5* (-0,101545) 3- (-0,101545) 2-10* (-0,101545) - 1=-0,005235-0,010311+1,01545-1=0,0001;

5* (1,56209) 3- (1,56209) 2-10* (1,56209) - 1=19,05847-2,44012-15,6209-1=0,0025.

За результатами перевірки можна сказати, що програма знаходить правильні корені.

а

б

Рисунок 2.3 - Результати обчислення програмою коренів:

а) х1; б) х2; в) х3.

За результатами обчислень можна сказати, що зі збільшенням точності зростає й кількість ітерацій. Також важливо правильно задавати межі локалізації.

3.2 Опис інтерфейсу користувача

Програма має зручний, інтуїтивно зрозумілий інтерфейс з текстовими підказками у вигляді коротких повідомлень та не потребує спеціальних знань для роботи з нею. Забезпечує повторне введення даних без перезапуску.

При запуску програми користувач побачить інформацію про проект та повідомлення про очікування програми на введення коефіцієнтів рівняння.

Для подальшої роботи необхідно ввести через пробіл, або клавішу Enter коефіцієнти рівняння. Всі коефіцієнти можуть бути дійсного типу. Між цілою і дробовою частиною ставиться крапка. Також число може бути записане в експоненційній формі. Для прикладу: 2 - 3 11.03 1.03е-12. Після введення четвертого коефіцієнту необхідно натиснути клавішу Enter. Натиснувши користувач побачить на екрані введене рівняння і пропозицію ввести межі локалізації кореня та точність.

Вимоги до введення меж локалізації кореня і точності ті ж самі що і коефіцієнтів рівняння. Після введення даних значень і натискання клавіші Enter розпочнеться процес обчислення і одночасно будуть відображатися результати всіх ітерацій.

По завершені обчислення та досягненні необхідної точності кореня буде видано повідомлення про завершення обчислень. Та виведено результат обчислення: значення кореня та кількість ітерацій.

Оскільки коренів може бути декілька, то передбачена можливість вибору - користувач може натиснути клавішу 2 та клавішу Enter для виходу з програми, або 1 - для того щоб повторити процедуру введення даних для обчислення іншого кореня.

3.3 Вимоги до апаратного забезпечення

Дана програма призначена для уточнення коренів методом ітерацій. Системні вимоги:

Операційні системи:

WindowsXP (SP2)

Windows 7 з пакетом оновлень 1 (SP1) (x86 і x64)

Windows 8 (x86 і x64)

Windows 8,1 (x86 і x64)

WindowsServer 2008 R2 з пакет оновлень 1 (SP1) (x64)

Windows Server 2012 (x64)

Windows Server 2012 R2 (x64)

Вимоги до обладнання:

Процесор з частотою 1,6 ГГц або більш потужніший.

1 ГБ ОЗУ (1,5 ГБ при використанні віртуальної машини).

4 ГБ вільного дискового простору

Жорсткий диск (5400 об / хв)

Відеоадаптер з підтримкою DirectX 9; мінімально допустима здатність екрану - 1024 x 768

Наявність.net Framework 4.1

Дану програму компілювали з використанням VisualStudio 2013.

Висновки

В ході роботи над курсовим проектом розглянуто та вивчено основні методи розв'язування нелінійних рівнянь з однією змінною, проаналізовано доступні джерела, розглянуто метод ітерацій та виведено універсальну формулу для розв'язання рівнянь методом ітерацій. Це дало змогу побудувати алгоритм та програму на мові С++.

Отже результатом курсової роботи є програма, яка працює в консольному режимі і дозволяє знаходити корені рівняння з довільною точністю. Але перед початком роботи з програмою корені необхідно локалізувати. Одним із способів локалізації є побудова графіка функції і візуальна локалізація коренів в пакеті MathCad.

Практичне й теоретичне значення: результати дослідження можуть бути використані студентами та викладачами, які цікавляться числовими методами, зокрема при розв'язанні математичних задач та як основа для спецкурсів, а також програма в цілому, або її фрагменти для інженерних розрахунків, або як компоненти більш складних програмних продуктів, призначених для розрахунків інженерних та економічних задач.

Перелік використаних джерел

1. Дьяконов В.П. MathCad 8 PRO в математике, физике и Internet / В.П. Дьяконов, Н.В. Абраменко. - М.: Нолидж, 1999. - 512 с.

2. Єщенко А.І. Основи програмування в математичному пакеті MathCad /А.І. Єщенко, І.А. Єщенко. - Одеса: УДАЗ, 2000. - 285 с.

3. Захарченко М.В. Автоматизація проектування пристроїв, систем та мереж зв'язку / М.В. Захарченко, В.К. Стеклов, Н.О. Князєва та ін. - К.: Радіоаматор, 1996. - 268 с.

4. Ковалюк Т.В. - Алгоритмізація та програмування: Підручник. - Львів: "Магнолія 2006", 2013. - 400 с.

5. Крячков А.В. Программирование на С++. Практикум: Учеб. пособие для вузов / А.В. Крячков, И.В. Сухинина, В.К. Томшин. ? М.: Горячая линия - Телеком, 2000. - 344 с.

6. Леонов Ю.Г. Программирование инженерных задач: Метод. пособие с элементами лабораторного практикума / Ю.Г. Леонов, Н.В. Силкина, О.Д. Шпинова. - Одесса: ОНАС, 2002. - 68 с.

7. Трофименко О.Г. С++. Основи програмування. Теорія та практика: підручник/ [О.Г. Трофименко, Ю.В. Прокоп, І.Г. Швайко, Л.М. Буката та ін.]. - Одеса: Фенікс, 2010. - 544 с.

8. Фельдман Л.П. Чисельні методи в інформатиці: Підручник / Л.П. Фельдман, А.І. Петренко, О.А. Дмитрієва. - К.: Видавнича група ВНV, 2006. - 480 с.

9. Шаповаленко В.А. Чисельне обчислення функцій, характеристик матриць і розв'язування нелінійних рівнянь та систем рівнянь: Навч. посібник / Шаповаленко В.А., Буката Л.М., Трофименко О.Г. - Одеса: ВЦ ОНАЗ, 2010. - Ч.1. - 88 с.

10. Щедріна О.І. - Алгоритмізація та програмування процедур обробки інформації: Навч. посібник. - К.: КНЕУ, 2001. - 240 с.

Додаток А

Кодпрограми

#include "stdafx. h"

#include <iostream>

#include <math. h>

using namespace std;

float a1,a3,a2,a4,n;

float a, b, E, x; // Опис меж проміжку ізоляції, як глобальних змінних

// Опис функції рівняння f (x) =0

float f (float x)

{ return a1*x*x*x+a2*x*x+a3*x+a4; }

// Опис першої похідної функції - f ' (x)

float f1 (float x)

{ return 3*a1*x*x+2*a2*x+a3; }

// Опис функції ц (x)

float f_iter (float x)

{ return x- (2/ (f1 (a) +f1 (b))) *f (x); }

// Функція методу ітерацій

float iter (float a, float b, float eps)

{ float x0,r,xr;

x0= (a+b) /2;

do {

cout<<"КРОК "<<n+1<<": "<<x0<<endl;

xr=f_iter (x0);

r=fabs (x0-xr);

x0=xr;

n++;

}

while (r>=eps);

return xr;

}

void vvid ()

{

printf ("Введiть значення коефiцiєнтiв a1,a2,a3,a4\n");

cin>>a1>>a2>>a3>>a4;

printf (" Для рiвнняння %f*x^3+%f*x^2+%f*x+%f \n",a1,a2,a3,a4);

printf (" Введіть межi локалізації кореня a i b та точнiсть E \n");

cin>>a>>b>>E;

printf (" Йде обчислення.. \n");

}

int main ()

{

setlocale (0,"ukr");

int j=0;

cout<<"! <Курсовий проект>!"<<endl<<endl;

cout<<"! <Розвязок нелiнiйного рiвняння. Метод iтерацiй>!"<<endl<<endl;

cout<<" <Виконав: студент групи IТ-21, Мазуренко Олег> "<<endl<<endl;

while (j! =2)

{

n=0;

vvid ();

x=iter (a,b,E);

cout<<endl;

cout<<"! Обчислення завершено!"<<endl<<endl;

cout<<" <Результат>: "<<endl;

cout<<"Значення - X - дорiвнює: "<<x<<endl;

cout<<"Кiлькiсть крокiв дорівнює: "<<n<<endl<<endl;

cout<<"Продовжити? (1 - ТАК; 2 - НI): ";

cin>>j;

}

}

Размещено на Allbest.ru

...

Подобные документы

  • Виконання "ручного" розв'язування рівняння методом Ньоютона. Розробка програми на мові С#, яка реалізує введення вихідних даних, розв'язання заданого рівняння, виведення результатів у зручній формі на екран. Визначення початкового наближення кореня.

    лабораторная работа [120,9 K], добавлен 19.01.2022

  • Види рівнянь та методи їх розв’язань. Чисельні методи уточнення коренів, постановка задачі. Рішення нелінійного рівняння методом простих та дотичних ітерацій. Використання програмних засобів. Алгоритми розв’язку задач. Програми мовою С++, їх тестування.

    курсовая работа [232,2 K], добавлен 12.02.2013

  • Розв’язання системи рівняння методом Гауса за схемою з частковим вибором головного елементу. Рішення задачі Коші методом Рунге-Кутта. Знаходження моментів кубічних сплайнів методом прогонки. Розв’язування системи нелінійних рівнянь методом Ньютона.

    контрольная работа [252,3 K], добавлен 04.06.2010

  • В роботі розглянуто наближені методи розв’язку нелінійних рівнянь. Для вказаних методів складено блок-схеми та написано програму, за якою розв’язується задане рівняння. Аналіз як самого рівняння і методів його розв’язання так і результатів обрахунку.

    курсовая работа [302,8 K], добавлен 03.12.2009

  • В роботі розглянуто наближені методи розв'язку нелінійних рівнянь для методів Ньютона та хорд, складено блок-схеми та написано програму, за допомогою якої розв'язується задане рівняння. Аналіз рівняння, методів його розв'язання і результатів обрахунку.

    курсовая работа [380,9 K], добавлен 30.11.2009

  • Розв’язання нелінійних алгебраїчних рівнянь методом дихотомії. Вирішення задачі знаходження коренів рівняння. Розробка алгоритму розв’язання задачі і тестового прикладу. Блок-схеми алгоритмів основних функцій. Інструкція користувача програмою мовою С++.

    курсовая работа [2,0 M], добавлен 24.09.2010

  • Визначення і розв’язання задачі Коші для звичайних диференціальних рівнянь першого порядку методом Ейлера, алгоритм розв’язання, похибка при вирішенні. Складання блок-схеми. Реалізація алгоритму у середовищі Borland Pascal. Результат роботи програми.

    курсовая работа [264,0 K], добавлен 20.08.2010

  • Розвиток виробництва і широке використання промислових роботів. Алгоритми методів, блок-схеми алгоритмів розв'язку даного диференційного рівняння. Аналіз результатів моделювання, прямий метод Ейлера, розв’язок диференціального рівняння в Mathcad.

    контрольная работа [59,1 K], добавлен 30.11.2009

  • Розв’язання нелінійних алгебраїчних рівнянь методом хорд. Опис структури програмного проекту та алгоритмів розв’язання задачі. Розробка та виконання тестового прикладу. Інші математичні способи знаходження коренів рівнянь, та опис виконаної програми.

    курсовая работа [4,1 M], добавлен 28.09.2010

  • Розробка програмного забезпечення для розв'язку системи лінійних рівнянь за формулами Крамера, головні особливості мови Turbo Pascal. Методи розв'язування задачі, архітектура програми та її опис. Контрольний приклад та результат машинного експерименту.

    курсовая работа [47,7 K], добавлен 23.04.2010

  • Розробка програмного забезпечення для розв'язку системи лінійних рівнянь за формулами Гаусса, головні особливості мови Turbo Pascal. Методи розв'язування задачі, архітектура програми та її опис. Контрольний приклад та результат машинного експерименту.

    курсовая работа [40,3 K], добавлен 23.04.2010

  • Графічне зображення методу половинного ділення. Вибір методу інструментальних засобів вирішення задач. Розробка логічної частини програми для розв’язання нелінійного рівняння методами половинного ділення та січних. Особливість кодування на мові Паскаль.

    курсовая работа [135,5 K], добавлен 30.11.2009

  • Розв’язання системи лінійних та нелінійних рівнянь у програмі MathCAD. Матричний метод розв'язання системи рівнянь. Користування панеллю інструментів Математика (Math) для реалізації розрахунків в системі MathCAD. Обчислення ітераційним методом.

    контрольная работа [1023,4 K], добавлен 08.04.2011

  • Програма чисельного розв'язку систем лінійних алгебраїчних рівнянь (СЛАР) з розрідженою матрицею, економне витрачання оперативної пам'яті дозволяє розв’язувати багато систем високих ступенів за допомогою персональних комп'ютерів. Методи розв’язку СЛАР.

    дипломная работа [1,1 M], добавлен 01.08.2009

  • Метод розв’язків рівнянь більш високих порядків. Вибір методу розв'язання задачі Коші. Методи розв'язання крайових задач розглядаються на прикладі звичайного диференціального рівняння другого порядку. Вибір методу інструментальних засобів вирішення задач.

    курсовая работа [132,0 K], добавлен 03.12.2009

  • Розгляд та аналіз основних способів розв’язання звичайних диференціальних рівнянь за методом Рунге-Кутта з автоматичним вибором кроку. Способи оцінки погрішності і збіжності методу Рунге-кутти четвертого порядку з автоматичним вибором довжини кроку.

    контрольная работа [31,0 K], добавлен 18.01.2013

  • Розробка програми для розв’язання квадратних рівнянь з текстовим та графічним інтерфейсами користувача без дублювання їх коду. Алгоритм розв’язання квадратного рівняння у програмах з будь-яким інтерфейсом користувача, а саме: "консольний" та "форма".

    лабораторная работа [14,9 K], добавлен 14.05.2011

  • Головні особливості середовища Turbo Pascal. Властивості та вигляд системи лінійних алгебраїчних рівнянь. Опис схеми єдиного ділення (метод Гауса). Структура вхідної та вихідної інформації, текст програми, блок-схеми всіх процедур і головної програми.

    курсовая работа [276,1 K], добавлен 07.02.2011

  • Стандартний спосіб розв’язання задачі Коші для звичайного диференціального рівняння першого порядку чисельними однокроковими методами. Геометричний зміст методу Ейлера. Побудова графіку інтегральної кривої. Особливість оцінки похибки за методом Рунге.

    курсовая работа [112,9 K], добавлен 30.11.2009

  • Загальні відомості та геометричний зміст розв'язання задачі Коші. Використання методу Ейлера для розв'язання звичайних диференціальних рівнянь першого порядку. Розробка блок-схеми та реалізація алгоритму в середовищі програмування Borland Delphi 7.0.

    курсовая работа [398,1 K], добавлен 14.10.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.