Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23


 Л ИНЕЙНЫЕ ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ


Download 1.85 Mb.
Pdf ko'rish
bet109/111
Sana19.11.2023
Hajmi1.85 Mb.
#1786905
TuriУчебное пособие
1   ...   103   104   105   106   107   108   109   110   111
Bog'liq
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев

6.4. Л
ИНЕЙНЫЕ ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ
 
Рассмотрим задачу Коши для системы обыкновенных дифференциаль-
ных уравнений 
( )
( )
( )
( )
0
,
,
0, 
0
du t
f t u
t
u
u
dt
=
>
=
(6.28) 
или подробнее 
( )
(
)
1
2
, , , ,
, 0, 1, 2, , ,
i
i
m
du t
f t u u
u
t
i
m
dt
=

>
=

(6.29) 
( )
( )
0
0
,
1, 2, , .
i
i
u
u
i
m
=
=

(6.30) 
Существуют две группы численных методов решения задачи Коши: 
многошаговые разностные методы и методы Рунге-Кутта. Приведем приме-
ры и поясним основные понятия, возникающие при использовании числен-
ных методов. Для простоты будем рассматривать одно уравнение 
12 / 23


220 
( )
( )
0
,
,
0, 0
du
f t u
t
u
u
dt
=
>
=
. (6.31) 
Введем по переменному t равномерную сетку с шагом 
τ > 0, т.е. рас-
смотрим множество точек 
{
}
, 0,1,
n
t
n
n
τ
ω
τ
=
=
=


Будем обозначать через u(t) точное решение задачи (6.31), а через 
y
n
=y(t
n
) – приближенное решение. Заметим, что приближенное решение явля-
ется сеточной функцией, т.е. определено только в точках сетки 
τ
ω . 
Пример 1. Метод Эйлера. Уравнение (6.31) заменяется разностным 
уравнением 
(
)
1
0
0
,
0, 0,1, ,
n
n
n
n
y
y
f t y
n
y
u
τ
+


=
=

=
.
(6.32) 
Решение этого уравнения находится явным образом по рекуррентной 
формуле 
(
)
1
0
0
,
,
0,1, ,
.
n
n
n
n
y
y
f t y
n
y
u
τ
+
=
+
=

=
Пример 2. Симметричная схема. Уравнение (6.31) заменяется разност-
ным уравнением 
(
) (
)
(
)
1
1
1
0
0
1
,
,
0,
0,1, ,
2
n
n
n
n
n
n
y
y
f t y
f t
y
n
y
u
τ
+
+
+


+
=
=

=
. (6.33) 
Данный метод более сложен в реализации, чем метод Эйлера (6.32), так 
как новое решение y
n+1 
определяется по найденному ранее y
n
путем решения 
уравнения 
(
)
1
1
1
0,5
,
n
n
n
n
y
f t
y
F
+
+
+

=

(6.34) 
где 
(
)
0,5
,
n
n
n
n
F
y
f t y
τ
=
+
. По этой причине метод называется неявным. 
Преимуществом метода (6.34) по сравнению с методом (6.32) является более 
высокий порядок точности. 
Приведенные примеры представляют собой простейшие случаи раз-
ностных методов. Методы Рунге-Кутта отличаются от разностных методов 
тем, что в них допускается вычисление правых частей f(t, u) не только в 
точках сетки, но и в некоторых промежуточных точках. 
Пример 3. Метод Рунге-Кутта второго порядка точности. Предполо-
жим, что известно приближенное значение y
n
решения исходной задачи в 
13 / 23


221 
момент t = t
n
. Для нахождения y
n+1 
= y(t
n+1
) поступим следующим образом. 
Сначала, используя схему Эйлера 
(
)
1/ 2
,
0,5
n
n
n
n
y
y
f t y
τ
+

=

(6.35) 
вычислим промежуточное значение 
1/ 2
n
y
+
, а затем воспользуемся разност-
ным уравнением 
(
)
1
1/ 2
0,5 ,
0,5
n
n
n
n
y
y
f t
y
τ
τ
+
+

=
+

(6.36) 
из которого явным образом найдем искомое значение 
1
n
y
+

Реализация метода в два этапа (6.35), (6.36) называется методом пре-
диктор-корректор (предсказывающе-исправляющим), т. к. на первом этапе 
(6.35) приближенное значение предсказывается с невысокой точностью 
О(
τ ), а на втором этапе (6.36) точность имеет второй порядок по τ. 
В качестве примера рассмотрим линейное дифференциальное уравне-
ние 
( )
( )
,
* ,
0
1
y
f t y
y t y
=

=
=

Это уравнение имеет точное решение 
2
.
x
y e
=
Код для реализации ме-
тода Эйлера показан в листинге 6.4. 
Листинг 6.4. Решение уравнения методом Эйлера 
a = 0; b = 2; m = 50; 
dx = (b - a) / m; 
x = 0, y = 1; 
for (int i = 1; i <= m; i++) 

y += dx*F(x,y); 
x += dx; 
g.DrawEllipse(Pens.Black, II(x) - 2, JJ(y) - 2, 
4, 4); 

Для симметричной схемы уравнение (6.31) принимает вид: 
14 / 23


222 
(
) (
)
(
)
1
1
1
0
0
1
*
*
0,
0,1, ,
2
n
n
n
n
n
n
y
y
t y
t
y
n
y
u
τ
+
+
+


+
=
=

=
и его удается решить явно: 
(
)
1
1
*
,
/ 2
1
/ 2*
n
n
n
n
n
y
f t x
y
x
τ
τ
+
+
+
=


Код для решения уравнения по симметричной схеме представлен ниже. 
Листинг 6.5. Решение уравнения по симметричной схеме 
a = 0; b = 2;
m = 50;
dx=(b-a)/m;
x = 0; y = 1; 
for (int i = 1; i <= m; i++) 

y = (y+dx/2*F(x,y))/(1-(x+dx)*dx/2); 
x += dx; 
g.FillEllipse(myBrush,II(x)-3, JJ(y)-3,6,6); 

В следующем листинге 6.6 представлен код для реализации метода 
Рунге-Кутта: 
Листинг 6.6. Решение уравнения методом Рунге-Кутта 
a = 0; b = 2;
m = 50; 
dx = (b - a) / m; 
x = 0; y = 1; yt = 0; 
for (int i = 1; i <= m; i++) 

yt = y + dx / 2 * F6(x, y); 
15 / 23


223 
y = y + dx / 2 * F6(x + dx / 2, yt); 
x += dx; 
g.FillEllipse(myBrush,II(x)-2,JJ(y) - 2, 4, 4); 

На рисунке 6.6 на интервале [0, 2] представлено точное решение 
(сплошная линия), приближенное решение по методу Эйлера (маленькие 
черные точки), по симметричной схеме (большие черные точки) и методом 
Рунге-Кутта (белые точки). 
Рис. 6.6. Сравнение точного и приближенных решений линейного уравнения 
Из рисунка 6.6 видно, что метод приближенного решения по симмет-
ричной схеме обеспечивает более точное решение.
16 / 23


224 
Л
ИТЕРАТУРА
 
1. Ford, William H., Topp, William R. Data Structures with C++ Using 
STL. – Upper Saddle River, New York: Prentice Hall, 2002. – 1039 p. 
2. McMillan, Michael. Data Structures and Algorithms Usung C#. – New 
York: Cambridge University Press, 2007. – 366 p. 
3. Агафонов В.Н. Типы и абстракция данных в языках программирова-
ния. Данные в языках программирования. – М.: Мир, 1982. 
4. Ахо А., Холкрофт Дж., Ульман Дж. Структуры данных и алголрит-
мы. – М. : Издательский дом «Вильямс», 2016. – 400 с. : ил. 
5. Ахо А., Сети Р., Ульман Дж. Компиляторы. Принципы, технологии, 
инструменты. – М.: Вильямс, 2003. – 766 с. 
6. Баррон Д. Введение в языки программирования. – М.: Мир, 1980.
7. Бентли Дж. Жемчужины программирования. – СПб.: Питер, 2002. – 
268 с. 
8. Березина Л.Ю. Графы и их применение. – М.: Просвещение, 1979. – 
143 с. 
9. Берж К. Теория графов и ее применения. – М.: Издательство ино-
странной литературы, 1962.
10. Брукс Ф.П. Как проектируются и создаются программные комплек-
сы. – М.: Наука, 1979. 
11. Виноградов М.М. Модели данных и отображения моделей данных: 
алгебраический подход. Теория и приложения систем баз данных. – 
М.: ЦЭМИ АП СССР, 1984.
12. Вирт Н. Алгоритмы + структуры данных = программы. – М.: Мир, 
1985.
13. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989, СПб.: 
Невский диалект, 2001. – 351 с. 
14. Вирт Н. Систематическое программирование. Введение. – М.: Мир, 
1982.
15. Грис Д. Наука программирования. – М.: Мир, 1984. 
16. Гудман С., Хидетниеми С. Введение в разработку и анализ алгорит-
мов. – М.: Мир, 1981.
17. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые
задачи. – М.: Мир, 1982. 
18. Данные в языках программирования / под ред. В.Н. Агафонова. – М.: 
Мир, 1982. 
19. Дейкстра Э. Дисциплина программирования. – М.: Мир, 1978. – 
274 с. 
17 / 23


225 
20. Емеличев В.А., Ковалев М.М., Кравцов М.К. Многогранники, графы, 
опитимизация. – М.: Наука, 1981. – 341 с. 
21. Емеличев В.А., Мельников О.И., Саванов В.И., Тышкевич Р.И. Лек-
ции по теории графов. – М.: Наука, 1990. 
22. Замулин А.В. Типы данных в языках программирования и базах дан-
ных. – Новосибирск: Наука, 1987.
23. Кнут Д. Искусство программирования для ЭВМ. Т. 1. Основные ал-
горитмы. – М.: Мир, 1976.
24. Кнут Д. Искусство программирования для ЭВМ. Т. 3. Сортировка и 
поиск. – М.: Мир, 1976.
25. Кормен, Томас X., Лейзерсон, Чарльз И., Ривест, Рональд Л., Штайн, 
Клиффорд. Алгоритмы: построение и анализ : пер. с англ. – М.: Из-
дательский дом «Вильямс», 2015. – 1328 с. 
26. Кристофидес Н. Теория графов. Алгоритмический подход. – М.: 
Мир, 1978. – 432 с. 
27. Кушниренко А.Г., Лебедев Г.В. Программирование для математи-
ков. – М.: Наука, 1988. 
28. Леман Д., Смит М. Типы данных. Данные в языках программирова-
ния. – М.: Мир, 1982.
29. Ленгсам Й., Огенстайн М., Тененбаум А. Структуры данных для 
персональных ЭВМ. – М.: Мир, 1989.
30. Липский В. Комбинаторика для программистов. – М.: Мир, 1988. –
213 с. 
31. Макаровский Б.Н. Информационные системы и структуры данных: 
учебное пособие для вузов. – М.: Статистика, 1980.
32. Мейер Б., Бодуэн К. Методы программирования. – М.: Мир, 1982. – 
356 с. 
33. Новиков Ф.А. Дискретная математика для программистов. – СПб.: 
Питер, 2002. – 301 с.
34. Носов В.А. Комбинаторика и теория графов. – М.: МГТУ, 1999. 
35. Оре О. Теория графов. – М.: Наука, 1982 г. – 336 с. 
36. Пратт Т. Языки программирования. Разработка и реализация. – М.: 
Мир, 1979.
37. Рейнгольд Э., Нивергельт Ю., Део Н. Комбинаторные алгоритмы. 
Теория и практика. – М.: Мир, 1980. 
38. Седжвик, Р. Фундаментальные алгоритмы на C++ / пер. с англ. – 
Киев: Издательство «ДиаСофт», 2001.– 688 с.
39. Седжвик Р. Фундаментальные алгоритмы на C++. Алгоритмы на 
графах. — СПб.: ООО «ДиаСофтЮП», 2002.
40. Стивенс Р. Delphi. Готовые алгоритмы. – М.: ДМК Пресс; СПб.: Пи-
тер, 2004. – 384 с. 
41. Трамбле Ж., Соренсон П. Введение в структуры данных. – М.: Ма-
шиностроение, 1982. 
18 / 23


226 
42. Уоркли Дж. Архитектура и программное обеспечение микроЭВМ. 
Т. 1. Структуры данных. – М.: Мир, 1984.
43. Флорес И. Структуры и управление данными. – М.: Радио и связь, 
1982.
44. Фостер Дж. Обработка списков. – М.: Мир, 1974.
45. Харари Ф. Теория графов. – М.: Мир, 1973.
46. Холл П. Вычислительные структуры (введение в нечисленное про-
граммирование). – М.: Мир, 1978.
47. Хоор К. О структурной организации данных / Структурное програм-
мирование. – М.: Мир, 1975.
19 / 23


227 

Download 1.85 Mb.

Do'stlaringiz bilan baham:
1   ...   103   104   105   106   107   108   109   110   111




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling