Задача Коши для системы дифференциальных уравнений
Метод Рунге-Кутта применим и к задаче Коши для системы m дифференциальных уравнений с m неизвестными функциями
(7.18)
(7.19)
Приведем для задачи (7.18), (7.19) расчетные формулы метода Рунге-Кутта четвёртого порядка. Пусть требуется найти систему m функций удовлетворяющих в интервале (x0, X) дифференциальным уравнениям (7.18), а в точке x0 — начальным условиям (7.19). Предположим, что отрезок [x0, X] разбит на N частей
Тогда каждую l-ую функцию yl(x) можно приближенно вычислять в точках xi+1 по формулам Рунге-Кутта
(7.20)
Здесь через yl,i мы обозначили приближенное значение функции yl(x) в точке xi.
Обращаем внимание на порядок вычислений по формулам (7.20). На каждом шаге сначала вычисляются коэффициенты Kl,i в следующем порядке
K1,1, K2,1, …, Km,1,
K1,2, K2,2, …, Km,2,
K1,3, K2,3, …, Km,3,
K1,4, K2,4, …, Km,4,
и лишь затем приближенные значения функций y1,i+1, y2,i+1,…, ym,i+1.
Пример 7.4. Решить на отрезке [1, 2] задачу Коши
Решение в программе Excel.Точным решением задачи является система функций .
Разделим отрезок [1, 2] на N = 10 частей. Тогда шаг равен h = 0,1.
Число неизвестных функций m = 3. Число коэффициентов Kl,i равно 12. Создадим функции для вычисления правых частей fl(x, y1, y2, y3) системы дифференциальных уравнений и коэффициентов Kl,i:
Function f_1(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_1 = 2 * x * y_1 / y_2
End Function
Function f_2(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_2 = 8 * y_3 / (3 * y_2)
End Function
Function f_3(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_3 = 3 * y_3 / y_1
End Function
Function K_1_1(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
K_1_1 = f_1(x, y_1, y_2, y_3)
End Function
Function K_2_1(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
K_2_1 = f_2(x, y_1, y_2, y_3)
End Function
Function K_3_1(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
K_3_1 = f_3(x, y_1, y_2, y_3)
End Function
Function K_1_2(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K11 = K_1_1(x, y_1, y_2, y_3)
K21 = K_2_1(x, y_1, y_2, y_3)
K31 = K_3_1(x, y_1, y_2, y_3)
K_1_2 = f_1(x + h / 2, y_1 + h * K11 / 2, y_2 + h * K21 / 2, y_3 + h * K31 / 2)
End Function
Function K_2_2(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K11 = K_1_1(x, y_1, y_2, y_3)
K21 = K_2_1(x, y_1, y_2, y_3)
K31 = K_3_1(x, y_1, y_2, y_3)
K_2_2 = f_2(x + h / 2, y_1 + h * K11 / 2, y_2 + h * K21 / 2, y_3 + h * K31 / 2)
End Function
Function K_3_2(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K11 = K_1_1(x, y_1, y_2, y_3)
K21 = K_2_1(x, y_1, y_2, y_3)
K31 = K_3_1(x, y_1, y_2, y_3)
K_3_2 = f_3(x + h / 2, y_1 + h * K11 / 2, y_2 + h * K21 / 2, y_3 + h * K31 / 2)
End Function
Function K_1_3(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K12 = K_1_2(x, y_1, y_2, y_3, h)
K22 = K_2_2(x, y_1, y_2, y_3, h)
K32 = K_3_2(x, y_1, y_2, y_3, h)
K_1_3 = f_1(x + h / 2, y_1 + h * K12 / 2, y_2 + h * K22 / 2, y_3 + h * K32 / 2)
End Function
Function K_2_3(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K12 = K_1_2(x, y_1, y_2, y_3, h)
K22 = K_2_2(x, y_1, y_2, y_3, h)
K32 = K_3_2(x, y_1, y_2, y_3, h)
K_2_3 = f_2(x + h / 2, y_1 + h * K12 / 2, y_2 + h * K22 / 2, y_3 + h * K32 / 2)
End Function
Function K_3_3(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K12 = K_1_2(x, y_1, y_2, y_3, h)
K22 = K_2_2(x, y_1, y_2, y_3, h)
K32 = K_3_2(x, y_1, y_2, y_3, h)
K_3_3 = f_3(x + h / 2, y_1 + h * K12 / 2, y_2 + h * K22 / 2, y_3 + h * K32 / 2)
End Function
Function K_1_4(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K13 = K_1_3(x, y_1, y_2, y_3, h)
K23 = K_2_3(x, y_1, y_2, y_3, h)
K33 = K_3_3(x, y_1, y_2, y_3, h)
K_1_4 = f_1(x + h, y_1 + h * K13, y_2 + h * K23, y_3 + h * K33)
End Function
Function K_2_4(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K13 = K_1_3(x, y_1, y_2, y_3, h)
K23 = K_2_3(x, y_1, y_2, y_3, h)
K33 = K_3_3(x, y_1, y_2, y_3, h)
K_2_4 = f_2(x + h, y_1 + h * K13, y_2 + h * K23, y_3 + h * K33)
End Function
Function K_3_4(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3, ByVal h)
K13 = K_1_3(x, y_1, y_2, y_3, h)
K23 = K_2_3(x, y_1, y_2, y_3, h)
K33 = K_3_3(x, y_1, y_2, y_3, h)
K_3_4 = f_3(x + h, y_1 + h * K13, y_2 + h * K23, y_3 + h * K33)
End Function
Введем эти функции в программу Excel. Для этого с помощью меню «Сервис — Макросы — Редактор Visual Basic» откроем окно редактора и выполним команду «Insert — Module» и далее вводим описания функций.
После этого переходим в окно программы Excel и введем данные и формулы, как показано в таблице 7.9. Строки 1 и 2 и столбец A заполняем как в таблице. В ячейки B3, C3 и D3 вводим начальные значения функций.
Ячейке B1 присвоим имя h. В следующие ячейки введем указанные формулы и маркером заполнения копируем их вниз до строки 13 (табл. 7.8):
Таблица 7.8
Ячейка | Формула |
B4 | =B3+h*(K_1_1(A3;B3;C3;D3)+2*K_1_2(A3;B3;C3;D3;h) +2*K_1_3(A3;B3;C3;D3;h)+K_1_4(A3;B3;C3;D3;h))/6 |
C4 | =C3+h*(K_2_1(A3;B3;C3;D3)+2*K_2_2(A3;B3;C3;D3;h) +2*K_2_3(A3;B3;C3;D3;h)+K_2_4(A3;B3;C3;D3;h))/6 |
D4 | =D3+h*(K_3_1(A3;B3;C3;D3)+2*K_3_2(A3;B3;C3;D3;h) +2*K_3_3(A3;B3;C3;D3;h)+K_3_4(A3;B3;C3;D3;h))/6 |
E3 | =A3 |
F3 | =2*A3^2 |
G3 | =3*A3^3 |
В результате вычислений в столбцах B, C и D получаем приближенные значения функций y1, y2, y3.
Таблица 7.9
A | B | C | D | E | F | G | |
h= | 0,1 | Точные решения | |||||
xi | y1i | y2i | y3i | y1=x | y2=2x^2 | y3=3x^3 | |
1,1 | 1,100004 | 2,419978 | 3,992938 | 1,1 | 2,42 | 3,993 | |
1,2 | 1,200008 | 2,879958 | 5,183862 | 1,2 | 2,88 | 5,184 | |
1,3 | 1,300012 | 3,379938 | 6,590769 | 1,3 | 3,38 | 6,591 | |
1,4 | 1,400016 | 3,919918 | 8,231656 | 1,4 | 3,92 | 8,232 | |
1,5 | 1,50002 | 4,499897 | 10,12452 | 1,5 | 4,5 | 10,125 | |
1,6 | 1,600025 | 5,119874 | 12,28735 | 1,6 | 5,12 | 12,288 | |
1,7 | 1,700029 | 5,779848 | 14,73815 | 1,7 | 5,78 | 14,739 | |
1,8 | 1,800034 | 6,479821 | 17,49492 | 1,8 | 6,48 | 17,496 | |
1,9 | 1,90004 | 7,21979 | 20,57564 | 1,9 | 7,22 | 20,577 | |
2,000045 | 7,999757 | 23,99832 |
Если потребуется решить другую задачу для системы с тремя неизвестными функциями, то достаточно изменить описания функций — правых частей и ввести новые начальные условия и шаг.
7.1.6. Задачи Коши для дифференциальных уравнений
высших порядков
Задача Коши для дифференциального уравнения n-го порядка
, (7.21)
(7.22)
легко сводится к задаче Коши для системы дифференциальных уравнений с помощью замены переменных
(7.23)
Учитывая (7.23) из уравнения (7.21) получим систему дифференциальных уравнений
(7.24)
Начальные условия (7.22) для функций zl переписываются в виде
. (7.25)
Запишем для полученной системы метод Рунге-Кутта
. (7.26)
Для вычисления коэффициентов Kl,1, Kl,2, Kl,3 и Kl,4 имеем следующие формулы:
Пример 7.5. Решить задачу Коши для дифференциального уравнения третьего порядка
,
Решение в Excel. Точное решение данной задачи известно . Преобразуем эту задачу с помощью замены к задаче для системы уравнений:
Точным решением системы теперь будут функции
.
Выберем шаг h = 0,1. В программе Excel мы используем функции и алгоритм решения, созданные для решения примера 7.4.
Откроем файл примера 7.4 и внесем необходимые изменения. Результаты расчетов представлены в таблице 7.10.
1) Заменить функции f_1(), f_2() и f_3() на следующие:
Function f_1(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_1 = 2 * x * y_1 / y_2
End Function
Function f_2(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_2 = 8 * y_3 / (3 * y_2)
End Function
Function f_3(ByVal x, ByVal y_1, ByVal y_2, ByVal y_3)
f_3 = 3 * y_3 / y_1
End Function
Функции для вычисления коэффициентов Kl,I не изменяем.
2) Изменим начальные условия в ячейках B3, C3, D3 на 0, 1, 0.
В столбце значений переменной xi вводим числа 0; 0,1; 0,2; …; 1.
В ячейках E3, F3, G3 вводим соответственно формулы =SIN(A3), =COS(A3) и =-SIN(A3).
Таблица 7.10
A | B | C | D | E | F | G | |
h= | 0,1 | Точные решения | |||||
xi | y1i | y2i | y3i | y1=sinx | y2=cosx | y3=-sinx | |
0,1 | 0,099833 | 0,995004 | -0,09983 | 0,09983 | 0,995 | -0,099833 | |
0,2 | 0,198669 | 0,980067 | -0,19867 | 0,19867 | 0,98007 | -0,198669 | |
0,3 | 0,29552 | 0,955337 | -0,29552 | 0,29552 | 0,95534 | -0,29552 | |
0,4 | 0,389418 | 0,921061 | -0,38942 | 0,38942 | 0,92106 | -0,389418 | |
0,5 | 0,479425 | 0,877583 | -0,47943 | 0,47943 | 0,87758 | -0,479426 | |
0,6 | 0,564642 | 0,825336 | -0,56464 | 0,56464 | 0,82534 | -0,564642 | |
0,7 | 0,644217 | 0,764843 | -0,64422 | 0,64422 | 0,76484 | -0,644218 | |
0,8 | 0,717356 | 0,696707 | -0,71736 | 0,71736 | 0,69671 | -0,717356 | |
0,9 | 0,783326 | 0,621611 | -0,78333 | 0,78333 | 0,62161 | -0,783327 | |
0,84147 | 0,540303 | -0,84147 | 0,84147 | 0,5403 | -0,841471 |
Сравнивая столбцы B и E, видим, что метод Рунге-Кутта дает хорошие приближения к значениям точного решения y1=sinx.
Дата добавления: 2021-09-07; просмотров: 93;