- Уравнение
- Решение
- Метод Эйлера
- Усовершенствованный метод Эйлера
- Классический метод Рунге-Кутты
- Сравнение методов для заданной задачи
- Заключение
- Запуск
- Ссылки
№19:
В итоге, наше решение принимает вид:
Метод Эйлера дает возможность приближенно выразить функцию теоретически с любой наперед заданной точностью. Суть метода Эйлера в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Метод Эйлера является методом 1-го порядка точности и называется методом ломаных.
Для вычисления используются следующие формулы:
В Python:
def next_y(xi, yi):
return yi + self.h * self.f(xi, yi)
ys = []
xs = np.arange(x0 + h, xf + h, h) # вектор всех значений x
for x in xs:
ys.append(y)
y = next_y(x, y) # В результате ys будет содержать все значения метода Эйлера
Суть усовершенствованного метода Эйлера в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Усовершенствованный метод Эйлера является методом 2-го порядка точности и называется модифицированным методом Эйлера.
Разница между данным методом и методом Эйлера минимальна и заключается в использовании следующих формул:
В Python:
# Заменяем next_y функцию на эту:
def next_y(xi, yi):
h2 = h / 2
delta_y = h * f(xi + h2, yi + h2 * f(xi, yi))
return yi + delta_y
x0 = 0, xf = 9, y0 = 1, h = 0.1 Усовершенствованный Метод Эйлера и точное решение при
x0 = 0, xf = 3, y0 = 1, h = 0.1 Усовершенствованный Метод Эйлера и точное решение при
x0 = 0, xf = 1, y0 = 1, h = 0.1
Суть метода Рунге-Кутты в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Классический метод Рунге-Кутты является методом 4-го порядка точности и называется методом Рунге-Кутты 4-го порядка точности.
Ну и как обычно, формулы:
В Python:
# Заменяем next_y функцию на эту:
def next_y(xi, yi):
h2 = h / 2
k1 = f(xi, yi)
k2 = f(xi + h2, yi + h2 * k1)
k3 = f(xi + h2, yi + h2 * k2)
k4 = f(xi + h, yi + h * k3)
return yi + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4)
Очевидно что, классический метод Рунге-Кутты справляется с задачей аппроксимации в случае данного уравнения намного лучше чем Метод Эйлера и Усовершенствованный метод Эйлера.
Глобальная ошибка в зависимости от размера шага H на промежутке от 0.01 до 0.91 для x0 = 1, xf = 9-
Установить Python3
-
Все пакеты необходимые для работы находятся в requirements.txt
matplotlib
numpy -
Запустить run.py в корневой директории проекта.
Все настройки находятся в run.py в виде констант (строки 12-16). configparser очень не хотелось подключать. После запуска скрипт покажет 6 графиков (в диком разрешении, там ничего не видно толком) и сохранит их нормальные версии (dpi=300) в папке results.
Latex Редактор: https://www.codecogs.com/latex/eqneditor.php
Метод Эйлера: Wikipedia
Усовершенствованный метод Эйлера: Mathprofi (кык)
Метод Рунге — Кутты: Wikipedia