Метод Эйлера
Содержание:
- Примеры с решением
Пусть требуется решить задачу Коши: найти решение дифференциального уравнения удовлетворяющее начальному условию
При численном решении уравнения (14.1) задача ставится так: в точках найти приближения
для значений точного решения
. Разность
во многих случаях принимают постоянной h и называют шагом сетки, тогда
Метод Эйлера для решения указанной задачи Коши основан на непосредственной замене производной разностным отношением по приближенной формуле
Приближенные значения в точках
вычисляются по формуле
По этой ссылке вы найдёте полный курс лекций по высшей математике:
Примеры с решением
Пример 1.
С помощью метода Эйлера найти значения решения уравнения удовлетворяющего условию
, в первых пяти точках отрезка [0; 0,5] при
.
Решение:
По формуле (14.2) находим точки
Значения искомой функции
удовлетворяющей условиям данной задачи Коши, находим в соответствии с формулой (14.3). Результаты вычислений отражены в таблице 14.1. Замечание.
Точное решение уравнения удовлетворяющее условию
, выражается формулой
Следовательно,
Таблица 14.1
Возможно вам будут полезны данные страницы:
Пример 2.
Методом Эйлера найти значения решения дифференциального уравнения , для которого
, в пяти точках отрезка [1; 1,5], приняв
Решение:
На основании формулы (14.2) определяем точки
Значения искомой функции
, удовлетворяющей условию дайной задачи Коши, вычисляем по формуле (14.3). Результаты вычислений занесены в таблицу 14.2.
Таблица 14,2
Лекции:
- Производная функции
- Иррациональные выражения
- Метод вариации произвольных постоянных
- Сходимость ряда
- Как найти область определения функции: решение
- Уравнение сферы
- Пределы: примеры решения
- Площадь поверхности конуса
- Целые рациональные выражения
- Числовые ряды. Числовой ряд. Сумма ряда
Численные методы решения обыкновенных дифференциальных уравнений. Метод Эйлера.
В основе метода
Эйлера (метод ломаных) лежит идея
графического построения решения
дифференциальных уравнений, однако
этот метод дает одновременно и способ
нахождения искомой функции в численной
(табличной) форме.
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Выбрав
достаточно малый шаг h,
строится система равноотстоящих точек
.
В
методе Эйлера приближенные значения
вычисляются
последовательно по формулам:
.
При
этом искомая интегральная кривая
,
проходящая через точку
,
заменяется ломанной
с вершинами
;
каждое звено
этой ломаной, называемой ломаной
Эйлера, имеет
направление, совпадающее с направлением
той интегральной кривой уравнения
,
которая проходит через точку
y
Пример
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
ОДУ имеет вид:
|
|
0.0 |
1.000 |
0.1 |
1.100 |
0.2 |
1.219 |
Особенности метода Эйлера.
Метод очень прост
в реализации, но обладает малой точностью,
поскольку погрешность каждого нового
шага систематически возрастает.
Существует модификации метода, повышающие
его точность, — методы Эйлера-Коши
– первая и вторая улучшенные формулы.
Первая улучшенная формула Эйлера
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
в каждой точке
определяется
по формуле:
,
где
.
Геометрически это
означает, что отрезок ломанная между
точками
заменяется
на два отрезка
.
Направление первого отрезка совпадает
с направлением интегральной кривой в
точке
,
а направление второго отрезка определяется
направлением, интегральной кривой в
вспомогательной точке
.
Пример.
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
ОДУ имеет вид:
0.0 |
1.000 |
0.1 |
1.109 |
0.2 |
1.239 |
Вторая улучшенная формула Эйлера
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
в каждой точке
определяется
по формуле:
,
где
Геометрически это
означает, что определяется направление
интегральной кривой в исходной точке
и во вспомогательной точке
,
а в качестве окончательного направления
ломаной берется среднее этих направлений.
Пример.
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
ОДУ имеет вид:
0.0 |
1.000 |
0.1 |
1.110 |
0.2 |
1.241 |
Метод Рунге-Кутта.
Метод Эйлера
относится к семейству методов Рунге-Кутта.
Метод Рунге-Кутта
-го
порядка имеет вид:
,
где при фиксированных
значениях некоторых параметров:
последовательно
вычисляются:
Наибольшее
применение на практике получил метод
Руте-Кутта 4-го порядка:
,
где
Метод
Рунге-Кутта имеет ряд важнейших
достоинств:
1)
высокая точность
2)
явная схема вычислений
за определенное количество шагов и по
определенным формулам.
3)
возможен переменный шаг, т.е. можно
сменить шаг, где функция быстро меняется.
-
легко
оформляется.
Пусть
дано дифференциальное уравнение:
с начальными
условиями:
.
Решение
ОДУ имеет вид:
0.0 |
1.000 |
0.1 |
1.110 |
0.2 |
1.241 |
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
- #
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a differential equation dy/dx = f(x, y) with initial condition y(x0) = y0. Find its approximate solution using Euler method.
Euler Method :
In mathematics and computational science, the Euler method (also called forward
Euler method) is a first-order numerical procedure for solving ordinary differential
equations (ODEs) with a given initial value.
Consider a differential equation dy/dx = f(x, y) with initial condition y(x0)=y0
then a successive approximation of this equation can be given by:
y(n+1) = y(n) + h * f(x(n), y(n))
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.
Example :
Consider below differential equation dy/dx = (x + y + xy) with initial condition y(0) = 1 and step size h = 0.025. Find y(0.1). Solution: f(x, y) = (x + y + xy) x0 = 0, y0 = 1, h = 0.025 Now we can calculate y1 using Euler formula y1 = y0 + h * f(x0, y0) y1 = 1 + 0.025 *(0 + 1 + 0 * 1) y1 = 1.025 y(0.025) = 1.025. Similarly we can calculate y(0.050), y(0.075), ....y(0.1). y(0.1) = 1.11167
Below is the implementation:
C++
#include <iostream>
using
namespace
std;
float
func(
float
x,
float
y)
{
return
(x + y + x * y);
}
void
euler(
float
x0,
float
y,
float
h,
float
x)
{
float
temp = -0;
while
(x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
cout <<
"Approximate solution at x = "
<< x <<
" is "
<< y << endl;
}
int
main()
{
float
x0 = 0;
float
y0 = 1;
float
h = 0.025;
float
x = 0.1;
euler(x0, y0, h, x);
return
0;
}
Java
import
java.io.*;
class
Euler {
float
func(
float
x,
float
y)
{
return
(x + y + x * y);
}
void
euler(
float
x0,
float
y,
float
h,
float
x)
{
float
temp = -
0
;
while
(x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
System.out.println(
"Approximate solution at x = "
+ x +
" is "
+ y);
}
public
static
void
main(String args[])
throws
IOException
{
Euler obj =
new
Euler();
float
x0 =
0
;
float
y0 =
1
;
float
h =
0
.025f;
float
x =
0
.1f;
obj.euler(x0, y0, h, x);
}
}
Python3
def
func( x, y ):
return
(x
+
y
+
x
*
y)
def
euler( x0, y, h, x ):
temp
=
-
0
while
x0 < x:
temp
=
y
y
=
y
+
h
*
func(x0, y)
x0
=
x0
+
h
print
(
"Approximate solution at x = "
, x,
" is "
,
"%.6f"
%
y)
x0
=
0
y0
=
1
h
=
0.025
x
=
0.1
euler(x0, y0, h, x)
C#
using
System;
class
GFG {
static
float
func(
float
x,
float
y)
{
return
(x + y + x * y);
}
static
void
euler(
float
x0,
float
y,
float
h,
float
x)
{
while
(x0 < x) {
y = y + h * func(x0, y);
x0 = x0 + h;
}
Console.WriteLine(
"Approximate solution at x = "
+ x +
" is "
+ y);
}
public
static
void
Main()
{
float
x0 = 0;
float
y0 = 1;
float
h = 0.025f;
float
x = 0.1f;
euler(x0, y0, h, x);
}
}
PHP
<?php
function
func(
$x
,
$y
)
{
return
(
$x
+
$y
+
$x
*
$y
);
}
function
euler(
$x0
,
$y
,
$h
,
$x
)
{
$temp
= -0;
while
(
$x0
<
$x
)
{
$temp
=
$y
;
$y
=
$y
+
$h
* func(
$x0
,
$y
);
$x0
=
$x0
+
$h
;
}
echo
"Approximate solution at x = "
,
$x
,
" is "
,
$y
,
"n"
;
}
$x0
= 0;
$y0
= 1;
$h
= 0.025;
$x
= 0.1;
euler(
$x0
,
$y0
,
$h
,
$x
);
?>
Javascript
<script>
function
func(x, y)
{
return
(x + y + x * y);
}
function
euler(x0, y, h, x)
{
let temp = -0;
while
(x0 < x) {
temp = y;
y = y + h * func(x0, y);
x0 = x0 + h;
}
document.write(
"Approximate solution at x = "
+ x +
" is "
+ y);
}
let x0 = 0;
let y0 = 1;
let h = 0.025;
let x = 0.1;
euler(x0, y0, h, x);
</script>
Output
Approximate solution at x = 0.1 is 1.11167
Time complexity: O(x/h)
Auxiliary space: O(1)
Last Updated :
23 Nov, 2022
Like Article
Save Article
Главная
»
Общенаучные дисциплины
»
Математика (2 семестр)
»
Приближенное решение дифференциальных уравнений первого порядка методом Эйлера.
Приближенное решение дифференциальных уравнений первого порядка методом Эйлера.
Пусть дана задача Коши для уравнения первого порядка
где функция f определена на некоторой области . Решение разыскивается на интервале [x0,b). На этом интервале введем узлы
Приближенное решение в узлах xi, которое обозначим через yi определяется по формуле
Эти формулы обобщаются на случай систем обыкновенных дифференциальных уравнений.
Оценка погрешности
Метод Эйлера является методом первого порядка. Если функция f непрерывна в D и непрерывно дифференцируема по переменной y в D, то имеет место следующая оценка погрешности
где h — средний шаг, то есть существует C > 0 такая, что .
Заметим, что условия гладкости на правую часть, гарантирующие единственность решения задачи Коши, необходимы для обоснования сходимости метода Эйлера.
Значение метода Эйлера
Метод Эйлера являлся исторически первым методом численного решения задачи Коши. О. Коши использовал этот метод для доказательства существования решения задачи Коши. Ввиду невысокой точности и вычислительной неустойчивости для практического нахождения решений задачи Коши метод Эйлера применяется редко. Однако в виду своей простоты метод Эйлера находит свое применение в теоретических исследованиях дифференциальных уравнений, задач вариационного исчисления и ряда других математических проблем.
Модифицированный метод Эйлера с пересчетом
Вычисления по методу Эйлера с пересчетом делаются в два этапа.
Прогноз:
.
Коррекция:
.
Модифицированный метод Эйлера с пересчетом имеет второй порядок точности, однако для его реализации необходимо дважды вычислять правую часть функции. Заметим, что метод Эйлера с пересчетом представляет собой разновидность методов Рунге-Кутта (предиктор-корректор).
Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.