Skip to content

mdmxfry/DE-methods

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Variant 19 (Sukach Maxim, BS17-03)

Содержание:

  1. Уравнение
  2. Решение
  3. Метод Эйлера
  4. Усовершенствованный метод Эйлера
  5. Классический метод Рунге-Кутты
  6. Сравнение методов для заданной задачи
  7. Заключение
  8. Запуск
  9. Ссылки

Уравнение

№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 будет содержать все значения метода Эйлера

Метод Эйлера и точное решение при 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). Усовершенствованный метод Эйлера является методом 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)

Классический метод Рунге-Кутты и точное решение при 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

Сравнение методов для заданной задачи

Размер ошибки всех методов на промежутке [0, 9] с шагом 0.1

Размер ошибки всех методов на промежутке [0, 3] с шагом 0.1

Размер ошибки всех методов на промежутке [0, 1] с шагом 0.1

Заключение

Очевидно что, классический метод Рунге-Кутты справляется с задачей аппроксимации в случае данного уравнения намного лучше чем Метод Эйлера и Усовершенствованный метод Эйлера.

График глобальной средней ошибки

Глобальная ошибка в зависимости от размера шага H на промежутке от 0.01 до 0.91 для x0 = 1, xf = 9

Запуск

  1. Установить Python3

  2. Все пакеты необходимые для работы находятся в requirements.txt

    matplotlib
    numpy

  3. Запустить run.py в корневой директории проекта.

Все настройки находятся в run.py в виде констант (строки 12-16). configparser очень не хотелось подключать. После запуска скрипт покажет 6 графиков (в диком разрешении, там ничего не видно толком) и сохранит их нормальные версии (dpi=300) в папке results.

Ссылки

Latex Редактор: https://www.codecogs.com/latex/eqneditor.php
Метод Эйлера: Wikipedia
Усовершенствованный метод Эйлера: Mathprofi (кык)
Метод Рунге — Кутты: Wikipedia

About

Differential Equations Course Assignment

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages