Рефетека.ру / Информатика и програм-ие

Курсовая работа: Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Зміст


1. Короткі теоретичні відомості

2. Розробка алгоритму розв’язання задачі

3. Результати обчислень і оцінка похибки

Висновки

Література

Додаток

1. Короткі теоретичні відомості


Часто задачі техніки і природознавства математично зводяться до відшукання розв’язку певного диференціального рівняння (або системи таких рівнянь), який задовольняє певні початкові умови (задачі Коші). Про інтегрувати таке рівняння в скінченому вигляді вдається досить рідко. при цьому дістають здебільшого такий вигляд, до якого шукана функція входить неявно, а тому користуватись ним не зручно.

На практиці застосовують здебільшого наближене інтегрування диференціальних рівнянь. Воно дає змогу знайти наближений розв’язок задачі Коші або у вигляді певного аналітичного виразу (наприклад, ряду Тейлора), або у вигляді деякої таблиці значень.

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

Задача Коші полягає в тому, щоб знайти розв’язок y(x) диференціального рівняння


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами, (1.1)


який задовольняє початкову умову


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами(1.2)


Геометрично це означає, що треба знайти ту інтегральну криву y(x) рівняння (1.1), яка проходить через точку (x0,y0).

Задача Коші (1.1) – (1.2) має єдиний розв’язок, наприклад при виконанні умови такої теореми.

Теорема (Пікара). Якщо функція f(x,y) двох змінних х і у неперервна в замкнутому прямокутнику


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


з центром у точці (х0,у0) і задовольняє в ньому умову Лівшиця по змінній у, тобто існує число K>0, яке не залежить від х і у, таке, що


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами(1.3)


для будь-яких точок (х1,у1)Програма розв’язання звичайних диференціальних рівнянь однокроковими методами і (х2,у2) Програма розв’язання звичайних диференціальних рівнянь однокроковими методами, то існує єдина диференційована функція Програма розв’язання звичайних диференціальних рівнянь однокроковими методами, яка є розв’язком диференціального рівняння (1.1). Цей розв’язок визначений і неперервно диференційований принаймні на відрізку [x0-h; x0+h], де


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами(1.4)


Розглянемо так звані однокрокові чисельні методи розв’язування задачі Коші (1.1)-(1.2), в яких, щоб знайти наближений розв’язок у точці хk+1=xk+h, досить знайти її розвязок в точці хk.

І оскільки розв’язок задачі в точці х0 відомий з початкових умов, то ці методи дають змогу послідовно обчислити значення розв’язку в наступних точках х1=х0+h, x2=x1+h,...

Окремим представником однокрокових чисельних методів є методи типу Ейлера. Надалі припускатимемо, що функція f(x,y) рівняння (1.1) задовольняє умови теореми Пікара [1].

Метод Ейлера

Нехай на відрізку [x0,x0+l] треба знайти чисельний розв’язок задачі Коші(1.1)-(1.2). Для цього відрізок [x0,x0+l] поділимо на n (для простоти) рівних частин точками


х0, х1, х2,..., хn=x0+l, де хk=x0+kh (k=0,1,2,...,n), Програма розв’язання звичайних диференціальних рівнянь однокроковими методами.


Величину h називають кроком чисельного інтегрування диференціального рівняння (1.1).

Розв’язати задачу (1.1)-(1.2) чисельно – це означає для заданої послідовності х0, х1,…, хn=b=x0+l незалежної змінної х та числа у0 знайти числову послідовність у1, у2,…, уn, тобто для заданої послідовності значень незалежної змінної xk=x0+kh (k=0, 1, ..., n) побудувати таблицю наближених значень шуканого розв’язку задачі Коші.

Якщо наближений розв’язок задачі (1.1)-(1.2) в точці хk відомий, то, проінтегрувавши рівняння (1.1) в межах від хk до хk+1, знайдемо його розв’язок в точці хk+1 за формулою:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.5)


Саме ця формула є вихідною для побудови багатьох чисельних методів розв’язування задачі (1.1) - (1.2). Якщо інтеграл у правій частині формули (1.5) обчислити за формулою лівих прямокутників, то знайдемо


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.6)


Відкинувши в цій рівності доданок порядку О(h2), дістанемо розрахункову формулу:

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами Програма розв’язання звичайних диференціальних рівнянь однокроковими методами Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.7)


яку називають формулою Ейлера. уk i y(xk) – відповідно наближене і точне значення шуканого розв’язку задачі (1.1) і (1.2) у точці хk. Різницю уk-y(xk) називають похибкою наближеного значення уk у точці xk.

Оскільки дотична до графіка функція у(х) в точці (xk,yk) матиме вигляд:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами або Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Звідси для ординати точки уk+1 перетину цієї дотичної з прямою х=хk+1 дістанем формулу (1.7), а це означає, що на кожному з відрізків [xk,xk+1], (k=0, 1, 2, ..., n-1 ) інтегральна крива наближено замінюється відрізком дотичної до неї в точці (xk,yk). Якщо в площині Оху позначити точки Мk(xk;yk), k=0, 1, 2,...,n і сполучити їх по порядку відрізками, то дістанемо ламану (її називають ламаною Ейлера), яка наближено зображує графік шуканого розв’язку задачі (1.1) – (1.2). У цьому і полягає геометричний зміст методу Ейлера (див. рис. 1)


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Зазначимо, що похибка методу Ейлера на кожному кроці є величина порядку О(h2). Точність методу досить мала і переходом від точки xk до точки xk+1 її похибка систематично зростає.

Виправлений метод Ейлера.

Якщо інтеграл у правій частині формули (1.5) обчислити за формулою середніх прямокутників, тобто значення підінтегральної функції f(x,y(x)) обчислити в точці


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами, то знайдемо

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.8)


Величину невідомого значення функції у(Програма розв’язання звичайних диференціальних рівнянь однокроковими методами) обчислимо за формулою (1.6) з кроком Програма розв’язання звичайних диференціальних рівнянь однокроковими методами. Матимемо:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Підставивши це значення у(Програма розв’язання звичайних диференціальних рівнянь однокроковими методами) в (1.8), дістанемо


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Відкинувши тут доданок пропорційний h3, матимемо


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Розрахункові формули вдосконаленого методу Ейлера можна записати у вигляді

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Отже, в удосконаленому методі Ейлера спочатку за метод Ейлера обчислюють наближений розв’язок уПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами задачі (1.1)-(1.2) в точці Програма розв’язання звичайних диференціальних рівнянь однокроковими методами а потім наближений розв’язок уk+1 у точці хk+1; на кожному кроці інтегрування праву частину рівняння (1.1) обчислюють двічі (у точках (хk,уk) і (Програма розв’язання звичайних диференціальних рівнянь однокроковими методами)).

Геометрично це означає, що на відрізку [xk,xk+1] графік інтегральної кривої задачі (1.1)-(1.2) замінюється відрізком прямої, яка проходить через точку (xk,yk) і має кутовий коефіцієнт k=Програма розв’язання звичайних диференціальних рівнянь однокроковими методами. Іншими словами, ця пряма утворює з додатним напрямом осі Ох кут Програма розв’язання звичайних диференціальних рівнянь однокроковими методами.


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Що ж до точки (Програма розв’язання звичайних диференціальних рівнянь однокроковими методами), то це точка перетину дотичної до інтегральної кривої задачі (1.1)-(1.2) в точці (хk,yk) з прямою Програма розв’язання звичайних диференціальних рівнянь однокроковими методами Похибка на кожному кроці має порядок О(h3).

Модифікований метод Ейлера.

Якщо інтеграл в правій частині формули (1.5)обчислити за формулою трапеції, то матимемо


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.11)


Невідоме значення у(хk+1), що входить до правої частини цієї рівності, можна обчислити за формулою (1.7). Підставивши його в праву частину рівності (1.11), дістанемо рівність:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Звідси для удосконаленого методу Ейлера-Коші матимемо такі розрахункові формули:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.12)

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами (1.13)


Отже, і в цьому методі на кожному кроці інтегрування праву частину рівняння (1.1) обчислюють двічі: спочатку за методом Ейлера (формула (1.12)) обчислюють наближене значення шуканого розв’язку Програма розв’язання звичайних диференціальних рівнянь однокроковими методами у точці хk+1, яке потім уточнюють за формулою (1.13). Похибка методу на кожному кроці має порядок О(h3).

Така побудова наближеного розв’язку задачі (1.1)1(1.2) з геометричної точки зору означає, що на відрізку [xk,xk+1] графік інтегральної кривої наближають відрізком прямої, яка проходить через точку (xk,yk) і має кутовий коефіцієнт Програма розв’язання звичайних диференціальних рівнянь однокроковими методами Тобто ця пряма утворює з додатним напрямком осі Ох кут


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами

Програма розв’язання звичайних диференціальних рівнянь однокроковими методамиПрограма розв’язання звичайних диференціальних рівнянь однокроковими методами


Координати точки (xk+1,Програма розв’язання звичайних диференціальних рівнянь однокроковими методами) визначають як точку перетину дотичної у=уk+f(xk,yk)(x-xk) до графіка інтегральної кривої задачі (1.1)-(1.2) в точці (xk,yk) з прямою х=хk [2].


2. Розробка алгоритму розв’язання задачі


Стандартний спосіб розв’язання задачі Коші чисельними однокроковими методами – це зведення диференціальних рівнянь n-го порядку до систем з n рівнянь 1-го порядку і подальшого розв’язання цієї системи стандартними однокроковими методами:

Для рівняння Програма розв’язання звичайних диференціальних рівнянь однокроковими методами введемо заміну Програма розв’язання звичайних диференціальних рівнянь однокроковими методами тоді для даного рівняння можна записати еквівалентну систему із двох рівнянь:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Запишемо для кожного з цих рівнянь ітераційне рівняння:

для модифікованого методу :Ейлера:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


для виправленого методу Ейлера:


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами


Таким чином знаходиться масив точок функції ymn з різними кроками тобто n1=(b-a)/0,1=10+1 раз з кроком 0,1 і n2=(b-a)/0,05 раз з кроком 0,05. Це необхідно для оперативного визначення похибки за методом Рунге (екстраполяції Рідчардсона) [3].

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

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами.


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

Мовою програмування було обрано Turbo C++. Вона виявилась найзручнішою із тих мов, в яких мені доводилось працювати.

Програма складається з трьох допоміжних функцій float f(x,y,z), void eylermod() i eylerisp(). eylermоd() реалізовує модифікований метод Ейлера, eylerisp() – виправлений метод, а функція f(x,y,z) повертає значення другої похідної рівняння.

Лістинг програми приведено в додатку.


3. Результати обчислень і оцінка похибки


Результатом розв’язання задачі Коші являється функція. В даному випадку отримати цю функцію в аналітичному вигляді обчислювальні однокрокові методи не дозволяють. Вони представляють функцію в табличному вигляді, тобто набір точок значень х і відповідних їм значень функції у(х). Тому для більшої наглядності було вирішено по цим точкам намалювати графіки функцій у(х) для кожного з методів окремо (дивись рисунок 4). На тому ж малюнку виведені значення похибок для кожного методу окремо. На рисунку 5 виведено значення функції у(х) в дискретному вигляді з кроком h1=0.1.

Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Рисунок 4.


Програма розв’язання звичайних диференціальних рівнянь однокроковими методами

Рисунок 5.

Висновки


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

Література


1. Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. – Томск: МП «Раско», 1991. – 272 с.

2. Бортків А.Б., Гринчишин Я.Т. Turbo Pascal: Алгоритми і програми: чисельні методи в фізиці і математиці. Навчальний посібник. – К.: Вища школа, 1992. – 247 с.

3. Квєтний Р.Н. Методи комп’ютерних обчислень. Навчальний посібник. – Вінниця: ВДТУ, 2001 – 148 с.

Додаток


Лістинг програми

#include<stdio.h>

#include<conio.h>

#include<math.h>

#include<graphics.h>

float f(float x,float y,float z)

{return 0.7*z+x*y+0.7*x;}

float h1=0.1;

float h2=0.05;

float a=0;

float b=1;

float x2[21],ye2[21],ym1[11],zm2[21],ym2[21],ye1[11];

float ze1[11],zm1[11],ze2[21],x1[11],yi1[11],yi2[21];

float zi1[11],zi2[21];

int n1=(b-a)/h1;

int n2=(b-a)/h2;

void eylermod()

{// printf("[0] %5.2f %5.2f %5.2f",x2[0],y2[0],z2[0]);

// moveto((x2[0])*100,480-((ym2[0])*100));

for(int i=1;i<=n2+1;i++)

{x2[i]=x2[i-1]+h2;

ze2[i]=ze2[i-1]+h2*f(x2[i-1],ye2[i-1],ze2[i-1]);

ye2[i]=ye2[i-1]+h2*ze2[i-1];

zm2[i]=zm2[i-1]+(h2/2)*(f(x2[i-1],ye2[i-1],zm2[i-1])+f(x2[i],ye2[i],ze2[i]));

ym2[i]=ym2[i-1]+(h2/2)*(ze2[i]+zm2[i-1]);

// printf("\n[%d] %5.2f %5.2f %5.2f",i,x2[i],ye2[i],ym2[i]);

// setcolor(YELLOW);

// lineto((x2[i])*100,480-((ym2[i])*100));}

moveto((x1[0])*250+20,480-((ym1[0])*100)-30);

for(i=1;i<=n1+1;i++)

{x1[i]=x1[i-1]+h1;

ze1[i]=ze1[i-1]+h1*f(x1[i-1],ye1[i-1],ze1[i-1]);

ye1[i]=ye1[i-1]+h1*ze1[i-1];

zm1[i]=zm1[i-1]+(h1/2)*(f(x1[i-1],ye1[i-1],zm1[i-1])+f(x1[i],ye1[i],ze1[i]));

ym1[i]=ym1[i-1]+(h1/2)*(ze1[i]+zm1[i-1]);

// printf("\n[%d] %5.2f %5.2f %5.2f",i,x1[i],ye1[i],ym1[i]);

setcolor(12);

lineto((x1[i])*250+20,480-((ym1[i])*100)-30);}

float c;

float s=0;

for(i=0;i<=n1+1;i++)

{c=(ym2[i*2]-ym1[i])/(h1*h1*h1-h2*h2*h2);

s+=c*h1*h1*h1;}

char *ch;

sprintf(ch,"%f",fabs(s));

setcolor(15);

settextstyle(0,0,1);

outtextxy(5,108,"Похибка:");

settextstyle(2,0,5);

outtextxy(70,102,ch);}

void eylerisp()

{// printf("[0] %5.2f %5.2f %5.2f",x2[0],y2[0],z2[0]);

// moveto((x2[0])*100,480-((ym2[0])*100));

for(int i=1;i<=n2+1;i++)

{x2[i]=x2[i-1]+h2/2;

ze2[i]=ze2[i-1]+h2/2*f(x2[i-1],ye2[i-1],ze2[i-1]);

ye2[i]=ye2[i-1]+h2/2*ze2[i];

zi2[i]=zi2[i-1]+h2*f(x2[i],ye2[i],ze2[i]);

yi2[i]=yi2[i-1]+h2*zi2[i];

x2[i]+=h2/2;

// printf("\n[%d] %5.2f %5.2f %5.2f",i,x2[i],ye2[i],ym2[i]);

// setcolor(YELLOW);

// lineto((x2[i])*100,480-((ym2[i])*100));}

moveto((x1[0])*250+350,480-((yi1[0])*100)-30);

for(i=1;i<=n1+1;i++)

{x1[i]=x1[i-1]+h1/2;

ze1[i]=ze1[i-1]+h1/2*f(x1[i-1],ye1[i-1],ze1[i-1]);

ye1[i]=ye1[i-1]+h1/2*ze1[i];

zi1[i]=zi1[i-1]+h1*f(x1[i],ye1[i],ze1[i]);

yi1[i]=yi1[i-1]+h1*zi1[i];

x1[i]+=h1/2;

// printf("\n[%d] %5.2f %5.2f %5.2f",i,x1[i],ye1[i],ym1[i]);

setcolor(12);

lineto((x1[i])*250+350,480-((yi1[i])*100)-30);}

float c;

float s=0;

for(i=0;i<=n1+1;i++)

{c=(yi2[i*2]-yi1[i])/(h1*h1*h1-h2*h2*h2);

s+=c*h1*h1*h1;}

char *ch;

sprintf(ch,"%f",fabs(s));

setcolor(15);

settextstyle(0,0,1);

outtextxy(335,108,"Похибка:");

settextstyle(2,0,5);

outtextxy(405,102,ch);}

void main()

{float c=0,s=0;

int gdriver = DETECT, gmode, errorcode;

initgraph(&gdriver, &gmode, "");

cleardevice();

x2[0]=x1[0]=a;

ye2[0]=ye1[0]=1;

ym2[0]=ym1[0]=1;

ze2[0]=ze1[0]=1;

zm2[0]=zm1[0]=1;

yi2[0]=yi1[0]=1;

zi2[0]=zi1[0]=1;

char v=50;

while(v!=27)

{//setgraphmode(getgraphmode());

setbkcolor(16);

outtextxy(190,0,"Курсова робота з дисциплiни");

setcolor(10);

outtextxy(205,10,"<<Обчислювальнi методи>>");

setcolor(12);

outtextxy(95,20,"на тему: <<Дослiдження однокрокових методiв розв'язання");

outtextxy(165,30,"звичайних диференцiальних рiвнянь>>");

setcolor(14);

outtextxy(25,90,"Модифiкованний метод Ейлера");

outtextxy(355,90,"Виправлений метод Ейлера");

setcolor(15);

outtextxy(455,50,"Виконав ст. гр. 2АВ-01");

outtextxy(455,60,"Сторожук Костянтин");

settextstyle(8,0,1);

outtextxy(45,45,"y''=0.7y'+xy+0.7x");

settextstyle(0,0,1);

setcolor(7);

line(20,475,20,120); //левая ось у

line(0,450,300,450); //левая ось х

line(350,475,350,120);//правая ось у

line(330,450,630,450);//правая ось х

line(20,120,18,130);

line(20,120,22,130); //стрелки оу

line(18,130,22,130);

line(300,450,290,448);

line(300,450,290,452); //срелки ох

line(290,448,290,452);

line(350,120,348,130);

line(350,120,352,130); //стрелки оу

line(348,130,352,130);

line(630,450,620,448);

line(630,450,620,452); //срелки ох

line(620,448,620,452);

char t[5];

char m[5];

settextstyle(2,0,5);

outtextxy(285,430,"x");

outtextxy(28,122,"y(x)");

outtextxy(615,430,"x");

outtextxy(358,122,"y(x)");

for(float i=0;i<11;i++)

{line(20+i*25,447,20+i*25,453);

if(i<10)line(18,450-(i*50)/1.5,22,450-(i*50)/1.5);

sprintf(t,"%.1f",i/10);

if(int(i)%2==0) outtextxy(i*25+12,460,t);

sprintf(m,"%.0f",i+1);

if(i<3)outtextxy(8,342-i*100,m);}

for(i=0;i<11;i++)

{line(350+i*25,447,350+i*25,453);

if(i<10)line(348,450-(i*50)/1.5,352,450-(i*50)/1.5);

sprintf(t,"%.1f",i/10);

if(int(i)%2==0) outtextxy(i*25+342,460,t);

sprintf(m,"%.0f",i+1);

if(i<3)outtextxy(338,342-i*100,m);}

settextstyle(0,0,1);

eylermod();

eylerisp();

v=getch();

if(v==27)break;

restorecrtmode();

setgraphmode(getgraphmode());

printf("\t\t Модифiкований метод:\t Виправлений метод:");

for(i=0;i<n1+2;i++)

{printf("\n x[%.f]=%.1f\t\ty(x)=%f \t\t y(x)=%f",i,x1[i],ym1[i],yi1[i]);}

settextstyle(0,0,1);

v=getch();

cleardevice();}

closegraph();}

Похожие работы:

  1. Розв"язання задачі Коші для звичайного ...
  2. • Деякі скінченно-різнецеві методи розв"язування ...
  3. • Чисельні методи розв"язування крайових задач для ...
  4. • Дослідження збіжності рішень для диференціальних ...
  5. • Диференціальні рівняння вищих порядків
  6. • Розробка програми мовою програмування С++ по пошуку ...
  7. • Рішення систем диференціальних рівнянь за допомогою ...
  8. • Робота з пакетом MathCAD 2000 Pro
  9. • Проектування автоматизованого електропривода візка ...
  10. • Построение решения задачи Гурса для телеграфного уравнения ...
  11. • Моделювання теплових процесіів в елементах енергетичного ...
  12. • Метод "Стрілянини"
  13. • Дослідження зміни температури термопари за допомогою ...
  14. • Інтегральні перетворення Лапласа
  15. • Гідродинамічна нестійкість вихрового руху в системах з об ...
  16. • Метод Галеркіна пошуку розв"язку лінійної крайової ...
  17. • Системи автоматизованого проектування
  18. • Застосування сплайн-функцій до розв"язування задач ...
  19. • Рішення лінійних рівнянь першого порядку
Рефетека ру refoteka@gmail.com