Новости

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

Работа добавлена:






Алгоритм обчислення кореня рівняння методом ітерацій на http://mirrorref.ru

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

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

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

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

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

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

Зміст

  • Зміст
  • Вступ
  • 1 МЕТОДИ РОЗВ’ЯЗУВАННЯНЕЛІНІЙНИХРІВНЯНЬ
  • 1.1 Постановка задачі
  • 1.2 Методи визначання проміжків ізоляції
  • 1.3 Уточнення наближеногорозв’язкурівняння методомдихотмії
  • 4.4 Уточнення наближеногорозв’язкурівнянняметодом Ньютона
  • 1.5 Уточнення наближеногорозв’язкурівнянняметодом хорд
  • 1.6Уточнення наближеногорозв’язкурівнянняметодом ітерацій
  • 1.6.1 Формула обчислення розв’язку рівняння
  • 1.6.2Геометричнаінтерпретаціяваріантів розв’язку рівняння методом ітерацій
  • 1.6.3 Універсальнаформулаобчисленнярівнозначногорівняння длязбіжностіметоду ітерацій
  • 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тощо),торівнянняназивають трансцендентним.Приміром,рівнянняx5+ 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(anf(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)

anxnxbn

Рисунок1.4–Геометричнаінтерпретація наближеного та точногорозв’язківрівняння

4.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,
  2. 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)

Дляобчисленняx2успіввідношенні(1.6)слідзамінитиx0наx1x1–на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,якана- ближається дорозв’язкуxрівнянняf(x)=0.

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

(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,bf(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)

тоцяграницяxбудерозв’язкомрівняння(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(х).

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

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

|j'(x)|£q<1,xÎ[a,b],(1.19)

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

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

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

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

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

-q£1-lf'(x)£q<1.(1.20)

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

0<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.Цізначеннявідповідаютьумові|(х)|<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 2008R2 зпакетомоновлень 1 (SP1) (x64)

Windows Server 2012 (x64)

Windows Server 2012 R2 (x64)

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

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

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

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

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

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

Наявність .NETFramework 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локалiзац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;

     }

   }

Алгоритм обчислення кореня рівняння методом ітерацій на http://mirrorref.ru


Похожие рефераты, которые будут Вам интерестны.

1. Реферат Алгоритм сортировки методом пузырька

2. Реферат Хорнівські диз’юнкти. Принцип резолюцій. Алгоритм уніфікації. Процедура доказу теорем методом резолюцій для хорнівських диз’юнктів. Особливості роботи з негативними знаннями в Пролозі

3. Реферат Алгоритм жазу жолдарымен құрылымымен таныстыру. Алгоритм құруға үйрету

4. Реферат Алгоритм Прямого поиска. Алгоритм Бойера-Мура

5. Реферат Алгоритм стиснення з втратами. Фрактальний алгоритм

6. Реферат IDEA (англ. International Data Encryption Algorithm, международный алгоритм шифрования данных) — симметричный блочный алгоритм шифрования данных

7. Реферат Обчислення степеневого поліному

8. Реферат Алгебраїчні доповнення. Обчислення детермінантів

9. Реферат Рівняння Шредінгера

10. Реферат Диференціальні рівняння