Методы Рунге – Кутта
Существуют и другие явные одношаговые методы. Так, рассмотренные метод Эйлера (1.15) и его модифицированные варианты (1.22), (1.23) и (1.25), (1.26) являются частными случаями методов первого и второго порядков, относящихся к классу методов Рунге – Кутта. Эти методы используют для вычисления значения значение yi, а также значения функции f(x, у) при некоторых специальным образом выбираемых значениях и у. На их основе могут быть построены разностные схемы разного порядка точности.
Широко распространен метод Рунге – Кутта четвертого порядка.
Запишем алгоритм этого метода в виде
Таким образом, данный метод Рунге – Кутта требует на каждом шаге четырехкратного вычисления правой части f(x, Y) уравнения (1.9). Суммарная погрешность этого метода есть величина О(h4).
Метод Рунге – Кутта (1.27) требует большего объема вычислений по сравнению с методом Эйлера и его модификациями, однако это окупается повышенной точностью, что дает возможность проводить счет с большим шагом. Другими словами, для получения результатов с одинаковой точностью в методе Эйлера потребуется значительно меньший шаг, чем в методе Рунге – Кутта (1.27).
Проведем сравнительную оценку рассмотренных методов Рунге – Кутта на простом примере, позволяющем получить также и точное решение.
Пример. Решить задачу Коши
Решение. Сформулированная задача Коши может быть решена известными из курса высшей математики методами. Опустив выкладки, запишем окончательное выражение для точного решения с учетом заданного начального условия:
Теперь решим данную задачу численно с помощью рассмотренных выше методов. Результаты вычислений приведены в табл. 1.1. Анализ решения позволяет проследить рост погрешности с возрастанием xi. Как видно из табл. 1.1, самым точным является решение, полученное методом Рунге – Кутта четвертого порядка. При хi = 1погрешность составляет менее 0,003%. Для модифицированных методов Эйлера погрешность при хi = 1 составляет около 1%, а для самого метода Эйлера — почти 18%. Следовательно, при больших х метод Эйлера может привести к еще более существенным погрешностям, и в таких случаях предпочтительнее пользоваться численными методами высших порядков точности.
Результаты вычислений xi разными методами
С уменьшением шага hлокальная погрешность метода Эйлера снизится, однако при этом возрастет число узлов, что неблагоприятно повлияет на точность результатов. Поэтому метод Эйлера применяется сравнительно редко при небольшом числе расчетных точек. Наиболее употребительным одношаговым методом является метод Рунге – Кутта.
Рассмотренные методы Рунге – Кутта могут быть использованы так же для решения систем дифференциальных уравнений. Покажем это для случая системы двух уравнений относительно искомых функций вида
Начальные условия зададим в виде
По аналогии с (1.27) запишем формулы Рунге – Кутта для системы двух уравнений:
К решению систем уравнений сводятся также задачи Коши для уравнения высших порядков. Например, рассмотрим задачу Коши для уравнения второго порядка
Введем вторую неизвестную функцию . Тогда сформулированная задача Коши заменяется следующей:
В заключение еще раз отметим особенность одношаговых методов, состоящую в том, что для получения решения в каждом новом расчетном узле достаточно иметь значение сеточной функции лишь в предыдущем узле. Это позволяет непосредственно начать счет при i = 0 по известным начальным значениям. Кроме того, указанная особенность допускает изменение шага в любой точке в процессе счета, что позволяет строить численные алгоритмы с автоматическим выбором шага.
Программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-Кутта 4-го порядка
Обыкновенное дифференциальное уравнение первого порядка. Задача Коши, суть метода Рунге-Кутта. Выбор среды разработки. Программная реализация метода Рунге-Кутта 4-го порядка. Определение порядка точности метода. Применение языка программирования C++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.05.2020 |
Размер файла | 163,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ФЕДЕРАЛЬНОЕ Государственное АВТОНОМНОЕ образовательное учреждение Высшего профессионального образования
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
Институт инженерных технологий и естественных наук
Кафедра математического и программного обеспечения информационных систем
программная реализация решения системы обыкновенных дифференциальных уравнений методом Рунге-кутта 4-го порядка
по дисциплине «Методы вычислений»
студента очного формы обучения
направления подготовки 010500.62
«Математическое обеспечение и администрирование
3 курса группы 07001302
Данькова Николая Алексеевича
1. Теоретическая часть
1.1 Обыкновенное дифференциальное уравнение первого порядка. Задача Коши
1.2 Суть метода Рунге-Кутта
1.3 Выбор среды разработки
2. Практическая часть
2.1 Программная реализация метода Рунге-Кутта 4-го порядка
Список использованных источников
Введение
где у — искомая функция, х — независимая переменная, f(x,y) — непрерывная функция от х и у. Однако получить аналитическое решение этого уравнения для достаточно произвольной функции f не удается, и только для некоторых частных случаев, с которыми можно ознакомиться в справочной литературе.
В связи с быстрым развитием электронной вычислительной техники в последние десятилетия появилась возможность использовать приближенные математические методы для решения подобного рода задач. Один из таких подходов называется методом Рунге-Кутты и объединяет целую группу модификаций, связанных способом их получения.
Цель курсовой работы: изучить метод Рунге — Кутта 4-го порядка для решения обыкновенных дифференциальных уравнений.
Постановка задачи: необходимо составить программу, позволяющую решать обыкновенные дифференциальные уравнения методом Рунге — Кутта 4-го порядка.
Курсовая работа состоит из 3 разделов, содержит 6 рисунков, 3 листинга, 1 приложение и 18 страниц.
1. Теоретическая часть
= f(x, y) (1)
Согласно теореме существования и единственности для любой точки (x,y) ?G найдется решение у = у(х), определенное на некотором интервале (х -д, х +д), удовлетворяющее условию y(x) = y0, такое, что точки (x,y(x)) ?G и y`x ? f(x, y(x)), причем это решение будет единственным. Задача для уравнения (1) с начальным условием у(х) = y (задача Коши) состоит в нахождении функции у(х), обращающей и уравнение (1), и начальное условие в тождество. Допустим, что значения, которые принимает независимое переменное х, принадлежат интервалу (Х, XN ) и запишем задачу Коши:
Разобьём отрезок [Х, XN ] на N частей так, что xn+1 — хn = hn ,
Решение системы дифференциальных уравнений первого порядка методом Рунге-Кутты
Система обыкновенных дифференциальных уравнений высшего порядка путем введения новых неизвестных может быть сведена к системе уравнений первого порядка. Рассмотрим такую систему
y(x0 ) = y (0) =(y (0)1 , . y (0)n ).
Методе Рунге-Кутта четвертого порядка вычисляет значение yi k по формуле:
n – количество уравнений системы, m – количество шагов интегрирования. Процедура использует набор функций F(i, x, y), которые соответствуют функциям Fi (x, y), описанным выше.
Описание алгоритма метода Рунге-Кутты решения систем дифференциальных уравнений первого порядка:
Задаем начальное x и конечное xn значения отрезка интегрирования, массив начальных значений y, т.е. значения системы y0(i)… y0(n) в точке x, а также количество шагов интегрирования m.
Вычисляем шаг интегрирования h.
На основе известных x и y0(1)… y0(n)вычисляем правые части системы для всех n уравнений.
Вычисляем коэффициенты k1 и для всех n уравнений.
Вычисляются коэффициенты k2, k3, k4 для всех n уравнений системы в соответствии с формулами метода.
Вычисляем y1… yт для первого шага интегрирования в соответствии с главной формулой метода.
Итерации повторяются для вычисления состояний системы на каждом шаге интегрирования.
Конец цикла по х.
Описание алгоритма метода Рунге-Кутты решения системы дифференциальных уравнений первого порядка с начальными условиями , при x изменяющемся от 0 до на естественном языке:
Определить Массив y(m)
Цикл по i от 1 до m с шагом 1
Определить Массив y0(m)
Определить Локальный Массив k1(m),k2(m),k3(m),k4(m),y1(m),y0_(m),f(m)
Локальные переменные i,x0,h
h=(xe-xn)/(n-1) * шаг интегрирования
Цикл по x0 от xn до xe с шагом h
Цикл по i от 1 до m
Цикл по i от 1 до m
Цикл по i от 1 до m
Цикл по i от 1 до m
Цикл по i от 1 до m
Определить Массив y(n),f(n)
Определить Массив y(m)
Реализация алгоритма численного интегрирования системы дифференциальных уравнений первого порядка методом Рунге-Кутта на VFP:
set decimals to 10
LOCAL ARRAY k1(m),k2(m),k3(m),k4(m),y1(m),y0_(m),f(m)
FOR x0 = xn TO xe STEP h
s= s + вывод_решения(x0+h,@y1,m) + CHR(10)
s = STR(x,12,2) + CHR(9) ;
Реализация алгоритма численного интегрирования системы дифференциальных уравнений первого порядка методом Рунге-Кутты на VBA:
Const PiNumber = 3.14159265358979
Dim k1(), k2(), k3(), k4(), y1(), y_tmp(), f()
x1 = 0: xn = 2 * PiNumber
ReDim k1(m): ReDim k2(m): ReDim k3(m): ReDim k4(m)
ReDim y1(m): ReDim y_tmp(m): ReDim f(m)
Debug.Print «X Y F(x) ABS(Y-F(x))»
For i = 1 To m Step 2
h = (xn — x1) / (n — 1)
For x0 = x1 To xn Step h
Call правые_части(x0, y(), f, m)
y_tmp(i) = y(i) + k1(i) / 2
Call правые_части(x0 + h / 2, y_tmp, f, m)
y_tmp(i) = y(i) + k2(i) / 2
Call правые_части(x0 + h / 2, y_tmp, f, m)
y_tmp(i) = y(i) + k3(i)
Call правые_части(x0 + h, y_tmp, f, m)
dk = 1 / 6 * (k1(i) + 2 * k2(i) + 2 * k3(i) + k4(i))
Call вывод_решения(x0 + h, y1, m, dec)
Sub правые_части(x, y, f, n)
For i = 1 To 200 Step 2
Sub вывод_решения(x, y, m, dec)
For i = 1 To dec
Debug.Print Format(x, dStr), Format(y(1), dStr), Format(f(x), dStr), Format(Abs(y(1) — f(x)), dStr)
Рис. 1 График решения системы дифференциальных уравнений при , на интервале x = 0 до . Сплошная линия – зависимость , пунктирная — .
Рис.2 Фазовый портрет решения системы дифференциальных уравнений при , на интервале x = 0 до . По горизонтальной оси по вертикальной оси
Контрольные вопросы
1. Какое уравнение называется дифференциальным?
2. Что называется обыкновенным дифференциальным уравнением?
3. Что называется уравнением в частных производных?
4. Что называется порядком дифференциального уравнения?
5. Что называется решением дифференциального уравнения?
6. Что называется интегрированием дифференциального уравнения?
7. Что называется задачей Коши?
8. Что называется краевой задачей?
9. Что называется общим решением дифференциального уравнения?
10. Что такое интегральные кривые?
11. Что такое однородное дифференциальное уравнение первого порядка?
12. Что такое линейное дифференциальное уравнение первого порядка?
13. Запишите вид динамической системы дифференциальных уравнений.
14. Что называется фазовым пространством?
15. Что называется фазовой траекторией?
16. Что называется линейной системой дифференциальных уравнений?
17. Запишите вид линейной системы дифференциальных уравнений с постоянными коэффициентами.
18. Запишите вид характеристического уравнения линейной однородной системы дифференциальных уравнений.
Задания
Решить методами Эйлера, Кранка-Николсона и Рунге-Кутты одно из следующих уравнений вида y’ = F(x,y) на интервале [x,xn] с начальным условием y(x)=y, принимая h = 0,01.
y’ = F(x,y) | [x,xn] | y(x) | |
№1. | y’ = x 2 +y; | [0; 0,2]; | y0 = 1. |
№2. | y’ = 2x 2 +y; | [0; 0,2]; | y0 = 1. |
№3. | y’ = 2x+y; | [0; 0,2]; | y0 = 1. |
№4. | y’ = x+2y; | [0; 0,2]; | y0 = 1. |
№5. | y’ = x 2 –y; | [1; 1,2]; | y0 = 0. |
№6. | y’ = x–2y; | [1; 1,2]; | y0 = 0. |
№7. | y’ = 2(x+y); | [1; 1,2]; | y0 = 0. |
№8. | y’ = 2x–3y; | [1; 1,2]; | y0 = 0. |
№9. | y’ = 2x+3y; | [0; 0,2]; | y0 = 1. |
№10. | y’ = x+3.5 y; | [0; 0,2]; | y0 = 1. |
№11. | y’ = 4x+y; | [0; 0,2]; | y0 = 1. |
№12. | y’ = 3x–y; | [0; 0,2]; | y0 = 1. |
№13. | y’ = 4x–y; | [0; 0,2]; | y0 = 1. |
№14. | y’ = 1+xy; | [1; 1,5]; | y0 = 1. |
№15. | y’ = x+y; | [0; 0,5]; | y0 = 1. |
№16. | y’ = 2x+y; | [0; 0,5]; | y0 = 1. |
№17. | y’ = 3x+y; | [0; 0,5]; | y0 = 1. |
№18. | y’ = 4x+y; | [0; 0,5]; | y0 = 1. |
№19. | y’ = y–2x; | [0; 0,5]; | y0 = 1. |
№20. | y’ = y–3x; | [0; 0,5]; | y0 = 1. |
№21. | y’ = x+y 2 ; | [0; 0,5]; | y0 = 1. |
№22. | y’ = x–y 2 ; | [1; 1,5]; | y0 = 0. |
№23. | y’ = x–2y 2 ; | [1; 1,5]; | y0 = 0. |
№24. | y’ = 2x–y 2 ; | [1; 1,5]; | y0 = 0. |
Решите методами Эйлера, Кранка-Николсона и Рунге-Кутты систему дифференциальных уравнений и постройте графики решений и фазовые портреты:
1. Для диссипативной колебательной системы (с силой сопротивления пропорциональной скорости)
при различных значениях коэффициентов k и g.
2. Для колебательной системы с зависящим от времени положением равновесия
при различных значениях коэффициентов k, g и s. Начальные условия и диапазон решения определите самостоятельно.
3. Для диссипативной колебательной системы с внешней силой
при различных значениях коэффициентов k, g, r и s. Начальные условия и диапазон решения определите самостоятельно.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ — конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.
Задачи с начальными условиями для систем обыкновенных дифференциальных уравнений
Рассмотрим задачу Коши для системы обыкновенных дифференциальных уравнений $$ \begin
Используя векторные обозначения, задачу (1), (2) можно записать как задачу Коши $$ \begin
Численные методы решения задачи Коши
Существует большое количество методов численного решения задачи (3), (4). Вначале рассмотрим простейший явный метод Эйлера и его программную реализацию. Затем будут представлены методы Рунге—Кутта и многошаговые методы.
При построении численных алгоритмов будем считать, что решение этой дифференциальной задачи существует, оно единственно и обладает необходимыми свойствами гладкости.
Идея численных методов решения задачи (3), (4) состоит из четырех частей:
1. Вводится расчетная сетка по переменной \( t \) (время) из \( N_t + 1 \) точки \( t_0 \), \( t_1 \), \( \ldots \), \( t_
2. Предполагаем, что дифференциальное уравнение выполнено в узлах сетки.
3. Аппроксимируем производные конечными разностями.
4. Формулируем алгоритм, который вычисляет новые значения \( \pmb
Явный метод Эйлера
Проиллюстрируем указанные шаги. Для начала введем расчетную сетку. Очень часто сетка является равномерной, т.е. имеет одинаковое расстояние между узлами \( t_n \) и \( t_
Затем, предполагаем, что уравнение выполнено в узлах сетки, т.е.: $$ \pmb^\prime (t_n) = \pmb
Заменяем производные конечными разностями. С этой целью, нам нужно знать конкретные формулы, как производные могут быть аппроксимированы конечными разностями. Простейший подход заключается в использовании определения производной: $$ \pmb^\prime(t) = \lim_ <\tau \to 0>\frac<\pmb(t+\tau) — \pmb(t)><\tau>. $$
В произвольном узле сетки \( t_n \) это определение можно переписать в виде: $$ \begin
Четвертый шаг заключается в получении численного алгоритма. Из (5) следует, что мы должны знать значение \( y^n \) для того, чтобы решить уравнение (5) относительно \( y^
При условии, что у нас известно начальное значение \( \pmb
Программная реализация явного метода Эйлера
Выражение (6) может быть как скалярным так и векторным уравнением. И в скалярном и в векторном случае на языке Python его можно реализовать следующим образом
При решении системы (векторный случай), u[n] — одномерный массив numpy длины \( m+1 \) (\( m \) — размерность задачи), а функция F должна возвращать numpy -массив размерности \( m+1 \), t[n] — значение в момент времени \( t_n \).
Таким образом численное решение на отрезке \( [0, T] \) должно быть представлено двумерным массивом, инициализируемым нулями u = np.zeros((N_t+1, m+1)) . Первый индекс соответствует временному слою, а второй компоненте вектора решения на соответствующем временном слое. Использование только одного индекса, u[n] или, что то же самое, u[n, :] , соответствует всем компонентам вектора решения.
Функция euler решения системы уравнений реализована в файле euler.py:
Строка F_ = lambda . требует пояснений. Для пользователя, решающего систему ОДУ, удобно задавать функцию правой части в виде списка компонент. Можно, конечно, требовать чтобы пользователь возвращал из функции массив numpy , но очень легко осуществлять преобразование в самой функции решателе. Чтобы быть уверенным, что результат F будет нужным массивом, который можно использовать в векторных вычислениях, мы вводим новую функцию F_ , которая вызывает пользовательскую функцию F «прогоняет» результат через функцию assaray модуля numpy .
Неявный метод Эйлера
При построении неявного метода Эйлера значение функции \( F \) берется на новом временном слое, т.е. для решении задачи (5) используется следующий метод: $$ \begin
Таким образом для нахождения приближенного значения искомой функции на новом временном слое \( t_
Для решения уравнения (8) можно использовать, например, метод Ньютона.
Программная реализация неявного метода Эйлера
Функция backward_euler решения системы уравнений реализована в файле euler.py:
Отметим, что для нахождения значения u[n+1] используется функция fsolve модуля optimize библиотеки scipy . В качестве начального приближения для решения нелинейного уравнения используется значение искомой функции с предыдущего слоя u[n] .
Методы Рунге—Кутта
Одношаговый метод Рунге—Кутта в общем виде записывается следующим образом: $$ \begin
Одним из наиболее распространенных является явный метод Рунге-Кутта четвертого порядка: $$ \begin
Многошаговые методы
В методах Рунге—Кутта в вычислениях участвуют значения приближенного решения только в двух соседних узлах \( \pmb
Различные варианты многошаговых методов (методы Адамса) решения задачи с начальными условиями для систем обыкновенных дифференциальных уравнений могут быть получены на основе использования квадратурных формул для правой части равенства $$ \begin
Для получения неявного многошагового метода используем для подынтегральной функции интерполяционную формулу по значениям функции \( \pmb
Для интерполяционного метода Адамса (15) наивысший порядок аппроксимации равен \( m+1 \).
Для построения явных многошаговых методов можно использовать процедуру экстраполяции подынтегральной функции в правой части (14). В этом случае приближение осуществляется по значениям \( \pmb
Для экстраполяционного метода Адамса (16) погрешность аппроксимации имеет \( m \)-ый порядок.
На основе методов Адамса строятся и схемы предиктор–корректор. На этапе предиктор используется явный метод Адамса, на этапе корректора — аналог неявного метода Адамса. Например, при использовании методов третьего порядка аппроксимации в соответствии с (18) для предсказания решения положим $$ \frac<\pmb
Жесткие системы ОДУ
При численном решении задачи Коши для систем обыкновенных дифференциальных уравнений (3), (4) могут возникнуть дополнительные трудности, порожденные жесткостью системы. Локальные особенности поведения решения в точке \( u = w \) передаются линейной системой $$ \begin
Пусть \( \lambda_i(t) \), \( i = 1, 2, \ldots, m \) — собственные числа матрицы $$ \begin
Для численное решения жестких задач используются вычислительные алгоритмы, которые имеют повышенный запас устойчивости. Необходимо ориентироваться на использование \( A \)-устойчивых или \( A(\alpha) \)-устойчивых методов.
Метод называется \( A \)-устойчивым, если при решении задачи Коши для системы (3) область его устойчивости содержит угол $$ \begin
Решение задачи Коши для дифференциальных уравнений методом Рунге-Кутта
Читайте также:
- I. Постановка задачи
- I. Цели и задачи БЖД. Основные понятия.
- II СИТУАЦИОННЫЕ ЗАДАЧИ ПО ЧАСТНОЙ ГИСТОЛОГИИ
- II. Основные задачи службы
- II. Решение задачи с ограничениями.
- II. Цели и задачи курса
- III. Объемно-планировочное решение здания.
- III. Основные проблемы и их решение
- IV. Конструктивное решение здания.
- XII. Заполните схему. Выпишите задачи физического воспитания учащихся и воспитательные дела, предназначенные для их решения.
- Автокорреляция в остатках. Критерий Дарбина-Уотсона в оценке качества уравнений, построенных по временным рядам
- Адаптивный подход в сельском хозяйстве и задачи агроэкологии
Данный метод является одним из наиболее распространенных численных методов интегрирования обыкновенных дифференциальных уравнений. По сравнению с описанным выше методами Эйлера метод Рунге-Кутта имеет более
Пусть на отрезке [a, b] требуется найти численное решение задачи Коши y′ = dy(t)/dt = f (y, t)
с соответствующим начальным условием
, где a = t . Как и в предыдущем методе разобьем этот участок на n равных частей и построим последовательность значений t , t 1 , t 2 , …, t n аргумента t искомой функции y(t). Предполагаем существование непрерывных производных функции y(t) до пятого порядка.
Формулу для решения можно записать в виде:
где ∆y k — приращение искомой функции y(t) на (k+1)-ом шаге интегрирования.
Придадим аргументу t приращение, равное шагу интегрирования h, и разложим функцию y(t + h) в ряд Тейлора в окрестности точки t, сохранив в нем пять членов:
Перенося первое слагаемое в этой сумме в левую часть получим, что
Здесь производные определяются последовательным дифференцированием уравнения y = y (t)
Вместо непосредственных вычислений по формуле (10.6) в методе Рунге-Кутта для каждого значения ∆y k = ∆ y(x k ) определяются четыре числа:
Доказывается, что если числа k 1k , k 2k , k 3k , k 4k , последовательно умножить на 1/6, 1/3, 1/3, 1/6 и сложить между собой, то выражение (10.10), соответствующее формуле Рунге-Кутта:
имеет погрешность R n (h 5 ).
Таким образом, рабочая формула Рунге-Кутта для интегрирования имеет вид:
Метод Рунге-Кутта может быть использован и при решении систем дифференциальных уравнений.
Дата добавления: 2015-04-24 ; Просмотров: 635 ; Нарушение авторских прав? ;
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Курсовая работа: Программа для решения дифференциальных уравнений первого порядка методом Рунге-Кутта
Название: Программа для решения дифференциальных уравнений первого порядка методом Рунге-Кутта Раздел: Рефераты по информатике, программированию Тип: курсовая работа Добавлен 21:04:57 05 апреля 2011 Похожие работы Просмотров: 3135 Комментариев: 14 Оценило: 4 человек Средний балл: 5 Оценка: неизвестно Скачать |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
n | Точное значение | |||||||
0,0025 | 0,002501 | 0,010018 | 0,003337 | |||||
1 | 0,1 | 0,000334 | 0,01002 | 0,022632 | 0,022675 | 0,040633 | 0,023545 | 0,000334 |
2 | 0,2 | 0,002688 | 0,040644 | 0,064369 | 0,064592 | 0,094933 | 0,065583 | 0,002688 |
3 | 0,3 | 0,009246 | 0,09496 | 0,133009 | 0,133709 | 0,181431 | 0,134971 | 0,009246 |
4 | 0,4 | 0,022744 | 0,181492 | 0,241149 | 0,242961 | 0,318567 | 0,244713 | 0,022743 |
5 | 0,5 | 0,047215 | 0,318698 | 0,414566 | 0,418916 | 0,543032 | 0,421449 | 0,047215 |
6 | 0,6 | 0,08936 | 0,543305 | 0,703721 | 0,713888 | 0,926793 | 0,717553 | 0,089359 |
7 | 0,7 | 0,161115 | 0,927332 | 1,207835 | 1,231503 | 1,61371 | 1,23662 | 0,161115 |
8 | 0,8 | 0,284777 | 1,614692 | 2,127454 | 2,183025 | 2,901619 | 2,189545 | 0,284779 |
9 | 0,9 | 0,503732 | 2,903203 | 3,884036 | 4,016816 | 5,434521 | 4,023238 | 0,503741 |
10 | 1 | 0,906055 | 0,906094 |
Пример 2. Найти приближённое решение задачи Коши методом Рунге-Кутты 4 порядка на заданном отрезке с шагом h = 0,01.
Найдем точное решение этого уравнения:
Подстановка начальных условий позволяет определить значение констант и частное решение будет иметь вид:
Найдем численное приблизительное решение дифференциального уравнения методом Рунге-Кутты 4-го порядка.
Сведем заменой переменных это уравнение 3 – го порядка к системе диф. уравнений
И начальные условия примут вид:
Для системы вида:
Напомним формулы для этого метода
Соответственно, здесь будет:
Опять вспомним систему:
, откуда
Внимание, в таблице даны не все шаги при h=0,01, обращайте внимание на n.
Программа для решения дифференциальных уравнений первого порядка методом Рунге-Кутта (стр. 4 из 6)
Из полученного выражения видно, что вычисление интеграла по методу прямоугольников приводит к формуле Эйлера.
Вычислим интеграл по формуле трапеций:
Из выражения видно, что оно совпадает с расчетной формулой усовершенствованного метода Эйлера-Коши. Для получения более точного решения дифференциального уравнения следует воспользоваться более точными методами вычисления интеграла. В методе Рунге-Кутта искомый интеграл представляется в виде следующей конечной суммы:
где Pi— некоторые числа, зависящие от q; Ki (h) — функции, зависящие от вида подынтегральной функции f(x,y) и шага интегрирования h, вычисляемые по следующим формулам:
Значения p, α, β получают из соображений высокой точности вычислений. Формулы Рунге-Кутта третьего порядка (q= 3) имеют следующий вид:
Наиболее часто используется метод Рунге-Кутта четвертого порядка, для которого расчетные формулы имеют следующий вид:
Формулы Рунге-Кутта имеют погрешности порядка h q +1 . Погрешность метода Рунге-Кутта четвертого порядка имеет порядок h 5
4.2 Описание программы ” РЕШЕНИЕ ОДУ “
Программа ”Решение ОДУ“ достаточно проста в использовании.
При запуске программы открывается главное окно программы (рис. 4 ), с установленными по умолчанию начальными условиями в полях ввода.
Назначение элементов ввода данных.
1. Поля X 1, X 2, Y ( x 1), H предназначены для ввода начального и конечного значений отрезка, на котором ищется решение дифференциального уравнения, значения функции при аргументе равном Х1 и величины шага дифференцирования;
2. В поле dY выводится формула дифференциального уравнения 1-й степени, выбранная для решения;
3. В поле dY ( x 1, y 1) выводится значение производной в исходной точке.
Назначение элементов управления и контроля.
1. При нажатии кнопки EXAMPLE активируются “радиокнопки” выбора уравнений;
2. Щелчком “радиокнопки” выбирается соответствующее ей уравнение, вид формулы контролируется по её отображению в поле dY ;
3. Щелчком по кнопке ВЫЧИСЛИТЬ находятся приближенные решения выбранного дифференциального уравнения на заданном интервале;
4. Решения дифференциального уравнения в виде пар значений X — Y выводятся в поля X и Y ; (рис. 5.)
По окончании вычислений активируются кнопка ГРАФИК и пункт меню ГРАФИК главного окна системы.
4.3 Назначение элементов графического окна программы
Вход в графическое окно осуществляется с помощью кнопок ГРАФИК наглавной формеили пункт меню ГРАФИК (рис. 6).
С помощью кнопки ВЫЧЕРТИТЬ на координатную плоскость выводится график функции – решение дифференциального уравнения на заданном интервале.
4.4 Реакция программы при возникновении ошибок
При вводе пользователем ошибочных данных (отсутствии начальных условий, некорректных значений переменных) программа выдает сообщение об ошибке (рис.7 а, б) рис.7 а. рис.7 б.
4.5 Перечень компонент DELPHI использованных в программе
В Form 1 использованы компоненты:
— Edit1.text, Edit2.text, Edit3.text, Edit4.text – для ввода начальных условий дифференциального
— Memo4.TMemo – для вывода формулы уравнения;
— Memo1.TMemo, Memo2.TMemo — для вывода результатов вычислений;
— Memo3.TMemo – для вывода значения производной в точке (Х0,Y0)
— ScrollBars ssVertical всвойствахMemo1.TMemo, Memo2.TMemo;
— Button1 “Вычислить”, Button2 “Очистить”, Button3 “График”, Button4 “Выход”,
Button5 “Example”, Button6 “UnExample”;
— Label1.TLabel — Label9.TLabel – дляотображенияназначениякомпонентов Memo иEdit;
— RadioGroup – для выбора вида уравнения;
В Form 2 использованы компоненты:
— MainMenu- для построения графика;
В Form 3 использованы компоненты:
— Panel1.TPanel – для размещения информации о программе;
— Label1.TLabel – Label14.TLabel – для отображения информации о программе;
— Button1.TButton “OK” – для выхода из окна
5. ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ И ТРЕБОВАНИЯ К ПО
Программа работает в среде операционных систем Windows 9х, NT.
Требования к ПО
Минимальные системные требования
aпроцессор Intel 486 с рабочей частотой 66 MHz и выше;
b) операционная система Windows 95, 98, NT 4.0, 2000, XP;
с) 16 Мбайт оперативной памяти (или более);
d) 3 Мбайт свободного пространства на жёстком диске.
6. ТЕКСТ ПРОГРАММЫ
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, CheckLst, ComCtrls, ExtCtrls,math, Menus;
Решение систем дифференциальных уравнений методом Рунге-Кутты 4 порядка
1. Постановка задачи
3. Выбор метода реализации программы
6. Идентификация переменных
8. Обсуждение результатов
9. Инструкция к программе
Обыкновенные дифференциальные уравнения (ОДУ) широко используются для математического моделирования процессов и явлений в различных областях науки и техники. Переходные процессы в радиотехнике, кинетика химических реакций, динамика биологических популяций, движение космических объектов, модели экономического развития исследуются с помощью ОДУ.
В дифференциальное уравнение n-го порядка в качестве неизвестных величин входят функция y(x) и ее первые n производных по аргументу x
j ( x, y, y 1 , . y (n) )=0. 1.1
Из теории ОДУ известно, что уравнение (1.1) эквивалентно системе n уравнений первого порядка
j k (x, y 1, y 1 ’ ,y 2 ,y 2 ’ , . ,y n ,y n ’ )=0. 1.2
Уравнение (1.1) и эквивалентная ему система (1.2) имеют бесконечное множество решений. Единственные решения выделяют с помощью дополнительных условий, которым должны удовлетворять искомые решения. В зависимости от вида таких условий рассматривают три типа задач, для которых доказано существование и единственность решений.
Первый тип – это задачи Коши, или задачи с начальными условиями. Для таких задач кроме исходного уравнения (1.1) в некоторой точке xo должны быть заданы начальные условия, т.е. значения функции y(x) и ее производных
y(x 0 )=y 0 ’ , y ’ (x 0 )=y 10 , . , y (n-1) (x 0 )=y n-1 , 0 .
Для системы ОДУ типа (1.2) начальные условия задаются в виде
y 1 (x 0 )=y 10 , y 2 (x 0 )=y 20 , . , y n (x 0 )=y n0 . 1.3
Ко второму типу задач относятся так называемые граничные, или краевые задачи, в которых дополнительные условия задаются в виде функциональных соотношений между искомыми решениями. Количество условий должно совпадать с порядком n уравнения или системы. Если решение задачи определяется в интервале x є [ x 0 ,x k] , то такие условия могут быть заданы как на границах, так и внутри интервала. Минимальный порядок ОДУ, для которых может быть сформулирована граничная задача, равен двум.
Третий тип задач для ОДУ – это задачи на собственные значения. Такие задачи отличаются тем, что кроме искомых функций y(x) и их производных в уравнения входят дополнительно m неизвестных параметров l 1, l 2, ј , хm, которые называются собственными значениями. Для единственности решения на интервале [x0, xk] необходимо задать m+n граничных условий. В качестве примера можно назвать задачи определения собственных частот, коэффициентов диссипации, структуры электромагнитных полей и механических напряжений в колебательных системах, задачи нахождения фазовых коэффициентов, коэффициентов затухания, распределения напряженностей полей волновых процессов и т. д.
К численному решению ОДУ приходится обращаться, когда не удается построить аналитическое решение задачи через известные функции. Хотя для некоторых задач численные методы оказываются более эффективными даже при наличии аналитических решений.
Большинство методов решения ОДУ основано на задаче Коши, алгоритмы и программы для которой рассматриваются в дальнейшем.
1. Постановка задачи
Многие процессы химической технологии описываются СДУ — начиная от кинетических исследований и заканчивая химическими технологическими процессами. В основу математических способов описания процессов положены СДУ и СЛАУ. Эти уравнения описывают материальные и тепловые балансы объектов химической технологии, а так же структуры потоков технических веществ в этих аппаратах.
Для получения, распределения технологических параметров во времени и в пространстве (в пределах объекта), необходимо произвести СДУ методом, которых дал бы высокую точность решения при минималььных затратах времени на решение, потому что ЭВМ должна работать в режиме реального времени и успевать за ходом технологического процесса. Если время на решение задачи большое, то управляющее воздействие, выработанное на ЭВМ может привести к отрицательным воздействиям. Методов решения существует очень много. В данной работе будет рассмотрен метод решения СДУ методом Рунге-Кутта 4 порядка.
Для удобства работы на ЭВМ, необходимо данную кинетическую схему преобразовать в удобный для работы на компьютере вид. Для этого необходимо кинетическую схему процесса представить в виде уравнений. При рассмотрении кинетической схемы процесса необходимо учитывать коэффициенты скоростей реакций. Но, так как процесс протекает при изотермических условиях, коэффициенты скоростей реакций можно считать за константы скоростей химической реакции. Из приведенной ниже схемы мы можем составить ряд дифференциальных уравнений, учитывающих изотермичность процесса.
Так как коэффициенты K1,K2,K3,K4 являются константами, то можно уравнение записать в следущем виде.
Для преобразования данных дифференциальных уравнений для использования их в расчетах тепловых и кинетических схем методами Рунге-Кутты необходимо подставлять вместо производных значений концентраций, значения концентраций данных в начале процесса. Это обусловлено тем, что метод Рунге-Кутты четвертого порядка, который будет использован для расчета кинетической схемы процесса. Так как этот метод требует сведений только об одной точке и значений функции.
Разбор и рассмотрение методов, применяемых на практике для решения дифференциальных уравнений, мы начнем с их широкой категории, известной под общим названием методов Рунге-Кутта.
Методы Рунге-Кутта обладают следующими свойствами:
1. Эти методы являются одноступенчатыми: чтобы найти у m+1, нужна
информация о предыдущей точке xm, ym.
2. Они согласуются с рядом Тейлора вплоть до членов порядка hp, где степень р
различна для различных методов и называется порядковым номером или
3. Они не требуют вычисления производных от f (x, y), а требуют вычисления
Рассмотрим сначала геометрическое построение и выведем некоторые формулы на основе геометрических аналогий. После этого мы подтвердим полученные результаты аналитически.
Предположим, нам известна точка xm, ym на искомой кривой. Тогда мы можем провести прямую линию с тангенсом угла наклона уў m =f(x m, y m ), которая пройдет через точку x m, y m. Это построение показано на рис. 1, где кривая представляет собой точное, но конечно неизвестное решение уравнения, а прямая линия L1 построена так, как это только что описано.
Тогда следующей точкой решения можно считать ту, где прямая L 1 пересечет ординату, проведенную через точку x=x m+1 =x m +h.
Уравнение прямой L 1 выглядит так: y=y m +yў m (x-x m ) так как yў =f(x m, y m ) и кроме того, x m+1 =x m +h тогда уравнение примет вид
y m+1 =y m +h*f(x m, y m ) 1. 1
Ошибка при x=x m+1 показана в виде отрезка е. Очевидно, найденное таким образом приближенное значение согласуется с разложением в ряд Тейлора вплоть до членов порядка h, так что ошибка ограничения равна e t =Кh2
Заметим, что хотя точка на графике 1 была показана на кривой, в действительности y m является приближенным значением и не лежит точно на кривой.
Формула 1. 1 описывает метод Эйлера, один из самых старых и широко известных методов численного интегрирования дифференциальных уравнений. Отметим, что метод Эйлера является одним из методов Рунге-Кутта первого порядка.
Рассмотрим исправленный метод Эйлера и модификационный метод Эйлера. В исправленном методе Эйлера мы находим средний тангенс угла наклона касательной для двух точек: x m, y m и x m +h, y m +hyў m. Последняя точка есть та самая, которая в методе Эйлера обозначалась x m+1, y m+1. Геометрический процесс нахождения точки x m+1, y m+1 можно проследить по рис. 2. С помощью метода Эйлера находится точка x m +h, y m +hyў m, лежащая на прямой L 1. В этой точке снова вычисляется тангенс, дает прямую L . Наконец, через точку x m, y m мы проводим прямую L, параллельную L . Точка, в которой прямая L пересечется с ординатой, восстановленной из x=x m+1 =x m +h, и будет искомой точкой x m+1, y m+1.
Тангенс угла наклона прямой L и прямой L равен
Ф(x m, y m, h)=Ѕ [f(x m, y m )+f(x m +h, y m +yў m h)] 1. 2
где yў m =f(x m, y m ) 1. 3
Уравнение линии L при этом записывается в виде
y=y m +(x-x m )Ф(x m, y m, h),
y m+1 =y m +hФ(x m, y m, h). 1. 4
Соотношения 1. 2, 1. 3, 1. 4 описывают исправленный метод Эйлера.
Чтобы выяснить, насколько хорошо этот метод согласуется с разложением в ряд Тейлора, вспомним, что разложение в ряд функции f(x, y) можно записать следующим образом:
f(x, y)=f(x m, y m )+(x-x m )¶ f/¶ x+(y-y m )¶ f/¶ x+ј 1. 5
где частные производные вычисляются при x=x m и y=y m.
Подставляя в формулу 1. 5 x=x m +h и y=y m +hyў m и используя выражение 1. 3 для yў m, получаем
f(x m +h, y m +hyў m )=f+hf x +hff y +O(h2),
где снова функция f и ее производные вычисляются в точке x m, y m. Подставляя результат в 1. 2 и производя необходимые преобразования, получаем
Ф(x m, y m, h)=f+h/2(f x +ff y )+O(h2).
Подставим полученное выражение в 1. 4 и сравним с рядом Тейлора
y m+1 =y m +hf+h2/2(f x +ff y )+O(h3).
Как видим, исправленный метод Эйлера согласуется с разложением в ряд Тейлора вплоть до членов степени h2, являясь, таким образом, методом Рунге-Кутты второго порядка.
Рассмотрим модификационный метод Эйлера. Рассмотрим рис. 3 где первоначальное построение сделано так же, как и на рис. 2. Но на этот раз мы берем точку, лежащую на пересечении этой прямой и ординатой x=x+h/2. На рисунке эта точка образована через Р, а ее ордината равна y=y m +(h/2)yў m. Вычислим тангенс угла наклона касательной в этой точке
Ф(x m, y m, h)=f+(x m +h/2, y m +h/2*yў m ), 1. 6
где yў m =f(x m, y m ) 1. 7
Прямая с таким наклоном, проходящая через Р, обозначена через L *. Вслед за тем, мы проводим через точку xm, ym прямую параллельную L *, и обозначаем ее через L 0. Пересечение этой прямой с ординатой x=x m +h и даст искомую точку x m+1, y m+1. Уравнение прямой можно записать в виде y=y m +(x-x m )Ф(x m, y m, h),
где Ф задается формулой 1. 6. Поэтому
y m+1 =y m +hФ(x m, y m, h) 1. 8
Соотношения 1. 6, 1. 7, 1. 8 описывают так называемый модификационный метод Эйлера и является еще одним методом Рунге-Кутта второго порядка. Обобщим оба метода. Заметим, что оба метода описываются формулами вида
y m+1 =y m +hФ(x m, y m, h) 1. 9
и в обоих случаях Ф имеет вид
Ф(x m, y m, h)=a 1 f(x m, y m )+a 2 f(x m +b 1 h, y m +b 2 hyў m ), 1. 10
где yў m =f(x m, y m ) 1. 11
В частности, для исправленного метода Эйлера
В то время как для модификационного метода Эйлера
Формулы 1. 9, 1. 10, 1. 11 описывают некоторый метод типа Рунге-Кутты. Посмотрим, какого порядка метод можно рассчитывать получить в лучшем случае и каковы допустимые значения параметров a 1, a 2, b 1 и b 2 .
Чтобы получить соответствие ряду Тейлора вплоть до членов степени h, в общем случае достаточно одного параметра. Чтобы получить согласование вплоть до членов степени h2, потребуется еще два параметра, так как необходимо учитывать члены h2f x и h2ff y. Так как у нас имеется всего четыре параметра, три из которых потребуются для создания согласования с рядом Тейлора вплоть до членов порядка h2, то самое лучшее, на что здесь можно рассчитывать — это метод второго порядка.
В разложении f(x, y) в ряд 1. 5 в окрестности точки x m, y m положим x=x m +b 1 h,
Тогда f(x m +b 1 h, y m +b 2 hf)=f+b 1 hf x +b 2 hff y +O(h2), где функция и производные в правой части равенства вычислены в точке x m, y m.
Тогда 1. 9 можно переписать в виде y m+1 =y m +h[a 1 f+a 2 f+h(a 2 b 1 f x +a 2 b 2 ff y )]+O(h3).
Сравнив эту формулу с разложением в ряд Тейлора, можно переписать в виде
y m+1 =y m +h[a 1 f+a 2 f+h(a 2 b 1 f x +a 2 b 2 ff y )]+O(h3).
Если потребовать совпадения членов hf, то a 1 +a 2 =1.
Сравнивая члены, содержащие h2f x, получаем a 2 b 1 =1/2.
Сравнивая члены, содержащие h2ff y, получаем a 2 b 2 =1/2.
Так как мы пришли к трем уравнениям для определения четырех неизвестных, то одно из этих неизвестных можно задать произвольно, исключая, может быть, нуль, в зависимости от того, какой параметр взять в качестве произвольного.
Положим, например, a 2 =w № 0. тогда a 1 =1-w , b 1 =b 2 =1/2w и соотношения 1. 9, 1. 10, 1. 11 сведутся к
y m+1 =y m +h[(1-w )f(x m, y m )+w f(x m +h/2w , y m +h/2w f(x m, y m ))]+O(h3) 1. 12
Это наиболее общая форма записи метода Рунге-Кутта второго порядка. При w =1/2 мы получаем исправленный метод Эйлера, при w =1 получаем модификационный метод Эйлера. Для всех w , отличных от нуля, ошибка ограничения равна
Методы Рунге-Кутта третьего и четвертого порядков можно вывести совершенно аналогично тому, как это делалось при выводе методов первого и второго порядков. Мы не будем воспроизводить выкладки, а ограничимся тем, что приведем формулы, описывающие метод четвертого порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений. Этот классический метод Рунге-Кутта описывается системой следующих пяти соотношений
y m+1 =y m +h/6(R 1 +2R 2 +2R 3 +R 4 ) 1. 14
где R 1 =f(x m, y m ), 1. 15
R 2 =f(x m +h/2, y m +hR 1 /2), 1. 16
R 3 =f(x m +h/2, y m +hR 2 /2), 1. 17
R 4 =f(x m +h/2, y m +hR 3 /2). 1. 18
Ошибка ограничения для этого метода равна e t =kh5
так что формулы 1. 14-1. 18 описывают метод четвертого порядка. Заметим, что при использовании этого метода функцию необходимо вычислять четыре раза.
3. Выбор метода реализации программы
Исходя из вышеизложенного, для решения систем дифференциальных уравнений мы выбираем наиболее точный метод решения – метод Рунге-Кутта 4 порядка, один из самых употребляемых методов интегрирования дифференциальных уравнений.
- этот метод является одноступенчатым и одношаговым
- требует информацию только об одной точке
- имеет небольшую погрешность
- значение функции рассчитывается при каждом шаге
Решение систем дифференциальных уравнений методом Рунге-Кутты
Имеется система диффуров
где k1=50.93,k2= 1569.12
Необходимо решить эту систему уравнений методом Рунге-Кутты 4го порядка
Имеются наброски но не совсем рабочие(
Решение дифференциального уравнения методом Рунге-Кутты
Не могу понять почему не правильно выдает значения. #include «stdafx.h» #include .
Решение задачи Коши методом Эйлера и Рунге-Кутты
Доброго времени суток всем:) Писал прогу для решения задачи Коши методом Эйлера и Рунге-Кутты на.
Численное интегрирование системы дифференциальных уравнений методом Рунге — Кутта
Доброго времени суток. Пытаюсь разработать функцию для численного интегрирования систем.
Решение диф. уравнения для колебаний методом Рунге—Кутты 4го порядка.(С++)
Ребят помогите пожалуйста решить такое на C++ уравнение x»=(-w^2)*x где w-const там замену.
Решение систем дифференциальных уравнений методами Эйлера
Здравствуйте, дорогие программисты и просто любители языка С++! В принципе, моя будущая.