Метод эйлера для решения дифференциальных уравнений си

IT Novella

y ‘ = f ( x , y ) , ( 1 )

f ( x , y ) — заданная непрерывная функция в области D. Задача нахождения решения этого уравнения, удовлетворяющего начальному условию

называется задачей Коши.

Метод Эйлера

Пусть требуется найти решение задачи Коши (1)-(2) на отрезке [a,b].

Разобьем отрезок [a,b] на n равных частей точками

i = 0 , 1 , … , n , h = b − a n .

Заменяя в уравнении (1) производную разностным отношением, получим y 1 − y 0 h = f ( x 0 , y 0 ) . Перепишем последнее уравнение в виде

y 1 = y 0 + h · f ( x 0 , y 0 ) Повторяя этот процесс, получим приближенное решение задачи (1)-(2).

Таким образом, итерационная формула метода Эйлера имеет вид

x i + 1 = a + i · h , y i + 1 = y i + h · f ( x i , y i ) , i = 0 , 1 , … , n

Пример. Решить методом Эйлера дифференциальное уравнение

y ‘ = 3 s i n 2 y + x

с начальным условием y(0)=2 на отрезке [0,1] с шагом h=0,1.

Метод Эйлера для решения дифференциального уравнения

Дано дифференциальное уравнение dy / dx = f (x, y) с начальным условием y (x0) = y0. Найти его приближенное решение, используя метод Эйлера .

Метод Эйлера:
В математике и вычислительной науке метод Эйлера (также называется вперед
Метод Эйлера) — числовая процедура первого порядка для решения обыкновенного дифференциала
уравнения (ОДУ) с заданным начальным значением.
Рассмотрим дифференциальное уравнение dy / dx = f (x, y) с начальным условием y (x0) = y0
тогда последовательная аппроксимация этого уравнения может быть задана как:

where h = (x(n) – x(0)) / n
h indicates step size. Choosing smaller
values of h leads to more accurate results
and more computation time.

Пример :

/ * Программа CPP, чтобы найти приближение

обыкновенного дифференциального уравнения

используя метод Эйлера. * /

using namespace std;

// Рассмотрим дифференциальное уравнение
// dy / dx = (x + y + xy)

float func( float x, float y)

return (x + y + x * y);

// Функция для формулы Эйлера

void euler( float x0, float y, float h, float x)

Метод эйлера для решения дифференциальных уравнений си

Variant 19 (Sukach Maxim, BS17-03)

Найдем

В итоге, наше решение принимает вид:

Метод Эйлера дает возможность приближенно выразить функцию теоретически с любой наперед заданной точностью. Суть метода Эйлера в пошаговом вычислении значений решения y=y(x) дифференциального уравнения вида y’=f(x,y) с начальным условием (x0;y0). Метод Эйлера является методом 1-го порядка точности и называется методом ломаных.

Для вычисления используются следующие формулы:

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

Разница между данным методом и методом Эйлера минимальна и заключается в использовании следующих формул:

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

Ну и как обычно, формулы:

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


источники:

http://espressocode.top/euler-method-solving-differential-equation/

http://github.com/mdmxfry/DE-methods