2018-05-29
Науково-дослідний сайт В'ячеслава Горчіліна
Всі статті
Прості методи чисельного розв'язання деяких диференціальних рівнянь
Відома велика кількість методів чисельного рішення диференціальних рівнянь у загальному вигляді [1,2]. Багато з них реальзованы програмно і доступні у вигляді готових модулів. На жаль, узагальнені методи не завжди дають досить точний результат, оскільки існує природне обмеження обчислювальних потужностей. Також, застосування готових модулів часто виводить процес рішення за межі розрядності процесора, що сильно обмежує діапазон дозволених значень.
У цій замітці ми покажемо більш прості і швидкі алгоритми для вирішення деяких діфф. рівнянь. Головними відмінностями від традиційних у них є оптимізація під конкретну задачу, що забезпечує прохід всього алгоритму за один цикл, менше число ітерацій, більш стійкий обчислювальний процес і проста методика їх отримання. Досить сказати, що такий підхід може бути доступний навіть для школярів старших класів середньої школи — пошук алгоритму зводиться до розв'язування простих алгебраїчних рівнянь.
Для розгляду запропонованого методу потрібно згадати, що процес чисельного рішення складається з ітерацій — багаторазових повторень деякого обчислення [3], а номер кроку такий ітерації позначається символом \i\). Відразу ж розглянемо приклад у вигляді наступного діфф. рівняння: \[\dot Y = f(x)\,Y + a \qquad (1)\] Тут: \(Y=Y(x)\), \(\dot Y\) — деякий приріст \(Y(x)\) до зміни координати \(x\), тобто \[\dot Y = {dY \over dx} \approx {\Delta Y \over \Delta x}, \] \(f(x)\) — деяка функція від цієї координати, а \(a\) — константа. До речі, якщо \(f(x)\) буде досить складною залежністю, то аналітичне рішення такого рівняння буде неможливо, а от рішення чисельними методами — завжди і з будь-якою точністю.
Для цього представимо \(\Delta Y\), як різниця між поточним значенням і значенням на попередньому кроці ітерації: \[\Delta Y = Y(x_i) - Y(x_{i-1}) \qquad (2)\] При цьому координата зміниться на \(\Delta x = x_i - x_{i-1}\), і така зміна координати буде постійним і на будь-якому кроці. Від \(\Delta x\) залежить точність усього методу і загальне число ітерацій: \i \in 1, 2, 3, ..., N\), а саме значення координати знаходиться просто: \(x_i = i\,\Delta x\).
Тоді наше рівняння запишеться так: \[{Y(x_i) - Y(x_{i-1}) \over \Delta x} = f(x_{i})\,Y(x_{i}) + a \qquad (3)\] Залишається тільки знайти поточні значення функції, які і будуть вихідними даними чисельного рішення для кожного кроку ітерації: \[Y(x_i) = {Y(x_{i-1}) + a\,\Delta x \over 1 - f(x_i)\,\Delta x} \qquad (4)\] Також, необхідно визначитися зі значенням \(Y(x_{i-1})\) на самому першому кроці, тобто коли \(i=1\), а \(x_0=0\). Це буде початкове значення нашої функції, яке в мат. аналізі обознается, як \(Y(0)\). Тоді загальна запис чисельного рішення буде такою: \[Y(x_i) = {Y(x_{i-1}) + a\,\Delta x \over 1 - f(x_i)\,\Delta x}, \quad Y(x_0) = Y(0) \qquad (5)\] При всій простоті знайденої функції — це найбільш швидкий і стійкий алгоритм для чисельного розв'язання цього рівняння!
Більш складний приклад
Любителям вільної енергії буде цікаво дізнатися, що в лінійному рівнянні Бернуллі прихований один із способів її отримання. Знайдемо чисельне рішення цього рівняння: \[g(x)\,\dot Y = f(x)\,Y + h(x) \qquad (6)\] Спочатку пропонуємо подивитися на аналітичний підхід [4], а потім, за запропонованим вище методом, знайти чисельне рішення. Проробивши майже ті ж дії тожно отримати на виході наступний алгоритм: \[Y(x_i) = {g(x_i)\,Y(x_{i-1}) + h(x_i)\,\Delta x \over g(x_i) - f(x_i)\,\Delta x}, \quad Y(x_0) = Y(0) \qquad (7)\] Для порівняння, якщо шукати чисельне рішення рівняння за допомогою підходу [4], то воно буде таким: \[Y(x_i) = \left[ Y(x_{i-1}) + \frac{h(x_i)}{g(x_i)} \Delta x \right] \left[ 1 + \frac{f(x_i)}{g(x_i)} \Delta x \right], \quad Y(x_0) = Y(0) \qquad (8)\] Цікаво те, що на практиці, програмування за допомогою алгоритму (7) дає більш точні значення на виході, чим (8), а сам процес обчислення виявляється більш стійким.
Функція у показнику ступеня
Це рішення повинно розкрити всю міць цього методу. Для цього візьмемо наступне рівняння: \[\dot Y = f(x) \exp(a\,Y) + h(x) \qquad (9)\] і спробуємо знайти його чисельне рішення за запропонованою методикою. Але спочатку згадаємо, що експоненціальна функція, при малих змінах, може бути розкладена в ряд Тейлора [5]: \[\exp(a\,Y_i) = \exp(a\,Y_{i-1})\exp(a\,\Delta Y) = \exp(a\,Y_{i-1})(1 + a(Y_i-Y_{i-1})) \qquad (10)\] Тут для кращого сприйняття введені такі спрощення: \(Y_i = Y(x_i), Y_{i-1} = Y(x_{i-1})\). Тепер, за запропонованою методикою, складемо загальне рівняння: \[{Y_i - Y_{i-1} \over \Delta x} = f(x_i) \exp(a\,Y_{i-1})[1 + a(Y_i-Y_{i-1})] + h(x_i) \qquad (11)\] і виведемо з нього шукану функцію: \[Y_i = Y_{i-1} + {f(x_i) \exp(a\,Y_{i-1}) + h(x_i) \over 1 + a\f(x_i) \exp(a\,Y_{i-1}) \Delta x } \Delta x \qquad (12)\]
На наступній сторінці ми розповімо про чисельному рішенні деяких діфф. рівнянь другого порядку.
 

© Горчилин В'ячеслав, 2018 р.
* Передрук статті можлива за умови встановлення посилання на цей сайт та додержанням авторських прав

2009-2018 © Vyacheslav Gorchilin