Розв’язання диференціальних рівняньбез використання вбудованих функцій
Чи може виникнути питання: а чи потрібно створювати свої документи для реалізації таких методів? Відповідь на нього не однозначна. Якщо ваша мета - вирішення конкретної задачі, то простіше скористатися готовими функціями, які будуть описані нижче. Проте реалізація відомих чисельних методів у системі MathCAD легка та наочна. Більше того, вона дозволяє втручатися в алгоритмічну реалізацію методів розв'язання, що сприяє створенню нових або покращених методів розв'язання диференціальних рівнянь, орієнтованих на вирішення завдань, що цікавлять користувача. По суті наведені рівняння повторюють відомі формули, що часто зустрічаються в навчальній літературі за чисельними методами розв'язання диференціальних рівнянь. Крім цього, «ручна» реалізація процесу вирішення завдання дуже корисна студентам як з точки зору закріплення знань з обчислювальної математики, так і для більш глибокого освоєння MathCAD. На малюнку 5.1 показаний приклад розв'язання диференціального рівняння 1-го порядку методами Ейлера та Рунге-Кутта.
![]() |
Малюнок 5.1 - Рішення диференціального рівняння методами Ейлера та Рунге-Кутта
Функція rkfixed
Найчастіше знаходження рішень диференціальних рівнянь використовується вбудована функція MathCad rkfixed.
Для вирішення рівняння за допомогою цієї функції необхідно ввести MathCad:
§ диференціальне рівняння, записане у вигляді:
або системуnрівнянь, подану у формі:
( 5.2 )
§ набір точок, у яких потрібно знайти рішення.
Загальний вигляд функції:
rkfixed (y, x1, xk, k, D),
деy - вектор початкових умов розміруn, деn- число рівнянь у системі. Длядиференціального рівняння першого порядку цей вектор вироджується в одну точкуy0(ця точка має бути записана саме як нульовий елемент вектораy');
x1 , xk - граничні точки інтервалу, на якому шукається рішення. Початкові умови, задані у векторіy - це значення рішення в точці x1;
k - число точок (крім початкової), у яких шукається рішення. За допомогою цього аргументу визначається число рядків (k + 1) у матриці, що повертається функцією rkfixed;
D (x, y) - функція-вектор, що представляє собою вектор зnелементів, що містять перші похідні невідомих функцій (праві частини системи (5.2) або рівняння (5.1)).
Функція rkfixed використовує для вирішення методу Рунге-Кутта четвертого порядку з фіксованим кроком. В результаті рішення виходить матриця, що маєn+1 стовпців:
§ перший стовпець містить точки, у яких шукається розв'язання диференціального рівняння (значенняx);
§ другий стовпець міститьy1(x),третій -y2(x)і т.д.
На малюнку 5.2 показані приклади розв'язання рівняння першого порядку, малюнку 5.3 - системи двох рівнянь.
![]() |
![]() |
Малюнок 5.2 - Рішення диференціального рівняння першого порядку
![]() |
![]() |
Малюнок 5.3 - Розв'язання системи двох диференціальних рівнянь першого порядка
Для розв'язання чи систем рівнянь вищих порядків, їх потрібно спочатку перетворити на вид (5.2). Зауважимо, що будь-яке рівняння виду
y (n) = f (x, y (n-1), y (n-2), ..., y)
може бути зведено до виду (5.2):
На малюнку 5.4 показаний приклад розв'язування рівняння четвертогопорядку, малюнку 5.5 - системи двох диференціальних рівнянь другого порядку, зведених до виду (5.2), за розглянутою вище методикою.
Приклад 1.Вирішити ДК на відрізку [0, 2]:
Показати рішення на графіку.
2. За допомогою заміни, зводимо ДК до системи:
![]() |
Малюнок 5.4 - Рішення диференціального рівняння четвертого порядку
Приклад 2.Вирішити систему ДК на відрізку [0, 0.4]:
Побудувати залежності u(x), v(x).
2. За допомогою заміни, зводимо цю систему ДК до системи:
![]() |
Малюнок 5.5 - Розв'язання системи диференціальних рівнянь другого порядку
Функція odesolve
У системі MathCad 2000 з'явилася нова, надзвичайно зручна функція для вирішення диференціальних рівнянь, яка використовується спільно з ключовим словомGiven і має вигляд:
odesolve(x,b,[step])
x – змінна інтеграція;
b - кінцева точка відрізка інтегрування;
step – необов'язковий параметр, число кроків інтегрування.
![]() |
Малюнок 5.6 - Вирішення диференціального рівняння першого порядку за допомогою odesolve
Диференціальний вираз може бути записано з використанням операторів диференціюванняd/dx,d 2 /dx 2 або за допомогою похідного знакаy¢(x), який вводиться з за допомогою клавіатурної комбінаціїCtrl/F7.
Умови, що задаються в блоці рішення, можуть бути видуy(a)=bабоy¢(a)=b, але не можна задавати обмеження видуy¢(a )+y(a)=b.
Функція odesolve призначена для вирішення рівнянь, але не систем, тому при необхідності вирішити системуза допомогою цієї функції її спочатку потрібно перетворити до одного рівняння за викладеною вище методикою.
На малюнку 5.7 показаний приклад розв'язання рівняння 3-го порядку за допомогою функції засолу.
![]() |
Малюнок 5.7 - Вирішення диференціального рівняння третього порядку за допомогою odesolve
Функції Bulstoer, Rkadapt
Коли відомо, що розв'язання системи є гладкою функцією, то для вирішення диференціальних рівнянь краще використати функцію
Bulstoer (y, x1, xk, k, D),
куди закладено метод Буліріш-Штера, а не Рунге-Кутта, що використовується функцією rkfixed. І тут рішення буде точніше.
Рішення диференціального рівняння зручніше використовувати, якщо обчислювати його досить часто на інтервалі, де функція змінюється швидко, і не дуже часто - де функція змінюється повільно. Для цього можна використати функцію
Rkadapt (y, x1, xk, k, D).
На відміну від функції rkfixed, яка шукає рішення з постійним кроком, функція Rkadapt перевіряє, як швидко змінюється наближене рішення, і відповідно адаптує розмір кроку. Цей адаптивний контроль дає можливість цієї функції обчислювати рішення більш дрібної сітці у тих областях, де воно змінюється швидко, і більшої - у тих областях, де воно змінюється повільно. Це дозволяє підвищити точність і скоротити час, необхідний вирішення рівняння.
Зверніть увагу, що, хоча функція Rkadapt при вирішенні використовує у внутрішніх розрахунках змінний крок, вона повертає рішення на рівномірній сітці.
Список аргументів, матриця рішення та порядок використання цих функцій ті ж самі, що і для rkfixed.
Функції bulstoer, rkadapt
Функції, описані вище, шукали рішенняy(x)у рівновіддалених точках на відрізку [x1, xk]. Однак іноді виникає завдання, коли необхідно знайти наближене рішення тільки в одній кінцевій точці інтервалу. Хоча функції, описані вище, дозволяють обчислитиy(xk), але вони робитимуть додаткову роботу, повертаючи проміжні значенняy(x). Якщо потрібно обчислити лише значенняy(xk), краще використовувати функції, наведені нижче. Кожна з них відповідає одній з функцій, описаної в попередніх розділах і має аналогічні властивості.
Функції мають вигляд:
bulstoer (y, x1, xk, e, D, kmax, save)
rkadapt (y, x1, xk, e, D, kmax, save),
деy - вектор початкових умов;
x1, xk - граничні точки інтервалу, у якому шукається рішення;
D - функція-вектор, що описує вихідну систему;
e- параметр, який контролює точність рішення. Мале значенняeвизначає менші кроки вздовж траєкторії, що збільшує точність розв'язання. Значенняe, що дорівнює 10 -3 - 10 -5 зазвичай дає хороший результат;
kmax - максимальна кількість проміжних точок, у яких шукається проміжне рішення. Значення kmax містить обмеження зверху на число рядків матриці, що повертається цими функціями;
save – мінімально допустимий інтервал між точками, в яких шукається рішення. Він визначає нижню межу відмінності між будь-якими двома числами в першому стовпці матриці, що повертається функцією.
На малюнку 5.8 показаний приклад розв'язання рівняння в одній точці.
![]() |
Малюнок 5.8 - Вирішення диференціального рівняння за допомогою rkadapt









