Учебное пособие C#. Алгоритмы и структуры данных н. А. Тюкачев, В. Г. Хлебостроев издание третье, стереотипное 1 / 23
Л ИНЕЙНЫЕ ДИФФЕРЕНЦИАЛЬНЫЕ УРАВНЕНИЯ
Download 1.85 Mb. Pdf ko'rish
|
C# Алгоритмы и структуры данных 2018 Тюкачев, Хлебостроев
- Bu sahifa navigatsiya:
- Листинг 6.4. Решение уравнения методом Эйлера
- Листинг 6.5. Решение уравнения по симметричной схеме
- Листинг 6.6. Решение уравнения методом Рунге-Кутта
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 |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling