Задача Коши для системы дифференциальных уравнений


Метод Рунге-Кутта применим и к задаче Коши для системы 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» откроем окно редактора и выполним команду «InsertModule» и далее вводим описания функций.

После этого переходим в окно программы 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;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.02 сек.