Усовершенствованный метод Эйлера – Метод Эйлера-Коши
Существуют
различные модификации метода
Эйлера,
повышающие его точность. Они обычно
направлены на то, чтобы более точно
определить переход от точки
в
точку
.Усовершенствованным
методом Эйлера называется метод, который
использует формулу следующего вида
(1)
При использовании этого метода сначала по формуле Эйлера найдем приближенное решение в середине интервала, т.е.
(2)
Затем
в середине отрезка, т.е. точке (
,
)
вычисляем значение функции
,
т.е. определяем в этой точке наклон
интегральной кривой
.
Используя эти найденные промежуточные
значения вычисляем значение сеточной
функции по формуле (1).
Следовательно, формулу (1) можно записать следующим образом
(3)
Геометрически усовершенствованный метод Эйлера можно изобразить следующим образом.
Рис.1.
По методу Эйлера мы получаем кривую L2, а усовершенствованный метод Эйлера дает решение в виде кривой L1. В модифицированном методе Эйлера усредняются наклоны касательных, при этом для нахождения следующего значения вычисляется значение f два раза, т.е. увеличивается объем вычислений. Однако уже из рисунка видно, что этот метод является более точным по сравнению с методом Эйлера.
Доказывается, что усовершенствованный метод Эйлера имеет точность второго порядка.
Рассмотрим еще одну модификацию метода Эйлера, которая получается, если аппроксимацию функции f приравнять среднему арифметическому значений этой функции на концах элементарного отрезка, т.е. имеем
i=0,1,2,…,n-1
(4)
(5)
Выразим значение сеточной функции решения
i=0,1,2,…,n-1
(6)
(7)
Полученная
схема является неявной, т.к. искомое
значение сеточной функции
входит
в обе части уравнения (6) и его нельзя
выразить явно. Значит решение разностной
задачи (6)-(7) следует искать итерационным
способом.
Вычисление
сеточной функции в каждой последующей
точке, т.е.
можно
проводить на основе двух итераций. Будем
предполагать, что значение
уже
известно. Применим метод
Эйлера и
найдем промежуточное значение
(8)
Это найденное промежуточное значение подставим в правую часть уравнения (6), чтобы вычислить значение функции f. Окончательно получаем
i=0,1,2,…,n-1
(9)
(10)
Алгоритм (8)-(10) можно записать в виде одного соотношения вида
i=0,1,2,…,n-1
(11)
(12)
Схема
(4)-(5) или в варианте (11)-(12) является
модификацией метода Эйлера и ее называют
методом Эйлера-Коши или методом Эйлера
с пересчетом. Этот метод может быть
получен путем разложения функции u(x) в
ряд Тейлора. Параллельно можно показать
, что этот метод имеет второй порядок
точности, т.е его применение уменьшает
в среднем значение погрешностей до
величины второго порядка малости
.
На практике же оценку погрешности
полученного решения принято получать
с помощью двойного пересчета с
шагами h и h/2.
Пример. Методом Эйлера-Коши решить следующую задачу Коши.
![]()
Взять шаг h=0.1 и результаты сравнить с точным решением. Все вычисления оформим в виде таблицы.
|
i |
|
|
|
|
|
D |
Точное решение |
|
0 |
1 |
0.5 |
0.25 |
|
|
0.023835 |
0.5 |
|
1 |
1.1 |
0.523635 |
0.226756 |
0.525 |
0.226704 |
0.021664 |
0.523809 |
|
2 |
1.2 |
0.545499 |
0.206608 |
0.546511 |
0.206531 |
0.019777 |
0.545455 |
|
3 |
1.3 |
0.56276 |
0.179030 |
0.566160 |
0.188941 |
0.018127 |
0.565216 |
|
4 |
1.4 |
0.583403 |
0.173603 |
0.584178 |
0.173510 |
0.016675 |
0.583333 |
|
5 |
1.5 |
0.600378 |
|
0.600783 |
0.159898 |
|
0.60000 |
Заполнения таблицы имеет следующий порядок.
![]()
![]()
![]()
![]()
![]()
![]()
С
помощью метода
Эйлера-Коши можно
проводить контроль точности решения
путем сравнения промежуточного значения
функции в i+1
узле с ее окончательным значением в
этом узле , т.е. значений
и
.
На основании этого сравнения выбирается
величина шага h в каждом узле. Если модуль
разности этих значений сравним с
погрешностью вычислений, т.е. выполняется
неравенство
,
то шаг можно увеличить.
Пример 2:
Без ЭВМ с помощью таблицы определить значение численного дифференцирования:
|
y |
Значение: |
|
0.2 |
-0.2 |
|
0.4 |
0.6 |
|
0.6 |
1.4 |
|
0.8 |
2.2 |
|
1 |
3 |
Y2=4*0.4-1=0.6
Y3=4*0.6-1=1.4
Y4=4*0.8-1=2.2
Y5=4*1-1=3
Найти решение ОДУ y’= 4x - 1 при заданном начальном условии y(0) = 1 в трех узлах на отрезке [1,2] с шагом h = 0.2 методом Эйлера.
Program Euler;
Uses Crt;
Var
xn,xk,yn,h,x,y:real;
i:integer;
Function f(x,y:real):real;
begin
{Здесь приводим выражение для вычисления функции f(x,y) }
f:=4х-у;
end;
Begin
ClrScr;
Writeln(' Решение дифференциального уравнения ');
Writeln(' y`-3xy=5 методом Эйлера ');
{ Ввод исходных данных }
xn:=0; yn:=1; xk:=1; h:=0.1;
{ Выводим шапку таблицы и первую точку }
Writeln('--------------------');
Writeln('| № | x | y |');
Writeln('--------------------');
{ Начинаем расчет }
x:=xn; y:=yn; i:=1;
Writeln('|', i:2, ' |', x:5:2, ' |', y:7:4, ' |');
repeat
y:=y+h*3*f(x,y);
Writeln('|', i:2, ' |', x:5:2, ' |', y:7:4, ' |');
i:=i+1;
x:=x+h;
until x>xk;
Writeln('--------------------');
Readln;
End.
Результат работы
,
Найти решение ОДУ y’= 4x - 1 при заданном начальном условии y(0) = 1 в трех узлах на отрезке [1,2] с шагом h = 0.2 методом Эйлера-Коши.
#include <iostream>
#include <math.h>
#include <conio.h>
typedef double typeOfFloat;
typeOfFloat f( typeOfFloat x, typeOfFloat y );
typeOfFloat integral( typeOfFloat a, typeOfFloat b, typeOfFloat y, int n );
typeOfFloat integralOnPiece( typeOfFloat a, typeOfFloat b, typeOfFloat y, typeOfFloat E );
int N;
int main( void )
{
typeOfFloat a,b,y3;
typeOfFloat h;
typeOfFloat y0;
typeOfFloat Y;
using namespace std;
cout << "Input a: ";
cin >> a;
printf("Input b: ");
cin >> b;
printf("Input h: ");
cin >> h;
printf("Input y0: ");
cin >> y0;
cout << endl;
cout.precision(8);
for( typeOfFloat x = a + h; x <= b; x = x + h)
{
Y = y0 + h*integralOnPiece( x-h, x, y0, e);
y3 = y0 + h * 0.2 * ( f(x-h,y0) + f(x,Y) );
y0 = Y;
cout << "Y = " << y3 << " n = " << N << endl;
}
_getch();
return 0;
}
Б
лок
схема:
Результат работы

program md;
uses crt;
var fx,x,h:real; i:integer; e1:real;
begin
clrscr;
writeln('pervaya proizvodnaya');
x:=0.0;
h:=0.5;
for i:=1 to 4 do begin
x:=x+h;
end;
fx:=exp(x)+x*exp(x);
writeln('f(x):=',fx:2);
readln;
end.

program md1;
uses crt;
var x1,x2,x,h,d2,d1,b,a:real; i:integer;
begin
clrscr;
writeln('vvedite x:');
readln(x);
h:=0.5;
for i:=1 to 4 do begin x:=x+h; end;
b:=2*exp(x)
a:=sqr(x);
d1:=sqr(b)-4*1*1;
d2:=sqrt(d1);
x1:=(b-d1)/2;
x2:=(b+d1)/2;
writeln('perviy coren uravneniya:',x1:2);
writeln('vtoroy coren uravneniya:',x2:2);
readln;
e
nd.
Пример 3:
Аппроксимация краевых задач ОДУ для следующих задач:
Y’-3xy=a, y(0)=0, y(1)=1: на отрезке [0,1], шаг h=0.1
Составить разностную схему. Вычислить расчеты на ЭВМ.
program md;
uses crt;
var i:integer;
x,a,a1,x1,y1,y0,y2:real;
begin
clrscr;
x:=0; y0:=0;
writeln('vvedite y1:');
readln(y1); writeln;
writeln('y(0)=0');
writeln;
for i:=1 to 10 do
begin
x:=x+0.1;
a:=y1-3*x*y0;
end;
writeln('pri y(0)=0 approksimaciya:=',a:2);
y2:=1; writeln('y(1)=1');
writeln; x1:=0;
for i:=1 to 10 do begin
x1:=x1+0.1;
a1:=y1-3*x1*y2;
end;
writeln('pri y(1)=1 approksimaciya:=',a1:2);
readln;
end.
Результат работы программы:
Используемая литература:
-
Таинов Р.Р. методические Указания к выполнению курсовой работы по вычислительной математике.Махачкала 2005 год. ДГТУ
-
www.wikipedia.ru
