ТОП 10:

Модифицированный метод Эйлера



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

y*i+1 = yi + h×f(xi,yi),

которое используется для вычисления приближённого значения производной в конце интервала f(xi+1, y*i+1). Вычислив среднее между этим значением производной и её значением в начале интервала, найдём более точное значение yi+1:

yi+1 = yi + h/2×[ f(xi,yi) + f(xi+1, y*i+1 )] .


 

Принцип метода проиллюстрирован на рис. 19.3. Для получения новой точки в нём требуется информация о двух других точках – предыдущей и промежуточной. Ошибка этого метода на каждом шаге имеет порядок h2.


Рис.19.3. Принцип модифицированного метода Эйлера


Пример 2. Разработать, сохранить и выполнить программу для решения дифференциального уравнения из примера 1 модифицированным методом Эйлера. При выполнении расчетов использовать хранение результатов в массивах.

Program ModEuler;

Uses Crt;

Var

xn,xk,yn,yw,h:real;

i,n:integer;

x,y:array [1..20] of real;

 

Function f(x,y:real):real;

begin

f:=2*x*x+2*y;

end;

 

Begin

ClrScr;

Writeln(' Решение дифференциального уравнения ');

Writeln(' dy/dx=2x^2+2y модифицированным методом Эйлера ');

xn:=0; yn:=1; xk:=1; h:=0.1;

x[1]:=xn; y[1]:=yn; i:=1;

repeat

yw:=y[i]+h*f(x[i],y[i]);

y[i+1]:=y[i]+h/2*(f(x[i],y[i])+f(x[i]+h,yw));

x[i+1]:=x[i]+h;

i:=i+1;

until x[i]>xk;

n:=i;

{ Выводим результаты }

Writeln('--------------------');

Writeln('| № | x | y |');

Writeln('--------------------');

for i:= 1 to n do

Writeln('|', i:2, ' |', x[i]:5:2, ' |', y[i]:7:4, ' |');

Writeln('--------------------');

Readln;

End.

Метод Рунге-Кутта

Для повышения точности вычисления значений функции требуется проведение дополнительных вычислений внутри интервала h, то есть между xi и xi+1. Метод Рунге-Кутта даёт набор формул для расчёта координат внутренних точек, требуемых для достижения точности, то есть ошибки на каждом шаге, порядка h4. Расчёты при использовании этого метода производятся по формулам:

,

где k0=h×f(xi,yi), k1=h×f(xi+h/2, yi+k0/2),
k2=h×f(xi+h/2, yi+k1/2), k3=h×f(xi+h, yi+k2).

Метод Эйлера и его модификация по сути дела являются методами Рунге-Кутта первого и второго порядка соответственно. По сравнению с ними метод Рунге-Кутта обеспечивает более высокую точность, что позволяет увеличить шаг интегрирования h. Допустимая погрешность на шаге определяет его максимальную величину.

Пример 3.Приведём фрагмент программы для решения дифференциального уравнения из примера 1 методом Рунге-Кутта.

Program Runge;

Uses Crt;

Var

xn,xk,yn,h,k0,k1,k2,k3:real;

i,n:integer;

x,y:array [1..20] of real;

 

Function f(x,y:real):real;

begin

f:=2*x*x+2*y;

end;

 

Begin

ClrScr;

Writeln(' Решение дифференциального уравнения ');

Writeln(' dy/dx=2x^2+2y методом Рунге-Кутта ');

xn:=0; yn:=1; xk:=1; h:=0.1;

x[1]:=xn; y[1]:=yn; i:=1;

repeat

k0:=h*f(x[i],y[i]);

k1:=h*f(x[i]+h/2,y[i]+k0/2);

k2:=h*f(x[i]+h/2,y[i]+k1/2);

k3:=h*f(x[i]+h,y[i]+k2);

y[i+1]:=y[i]+(k0+2*k1+2*k2+k3)/6;

x[i+1]:=x[i]+h;

i:=i+1;

until x[i]>xk;

n:=i;

Writeln('----------------------');

Writeln('| № | x | y |');

Writeln('----------------------');

for i:= 1 to n do

Writeln('|', i:2, ' |', x[i]:5:2, ' |', y[i]:7:4, ' |');

Writeln('----------------------');

Readln;

End.

Задание

Дать сравнительную оценку результатов решения дифференциального уравнения из примера 1 y¢=2x2+2y при начальном условии y(0)=1; 0£ x£1 и h=0,1 обычным и модифицированным методами Эйлера и методом Рунге-Кутта. Для проверки использовать точное решение этого уравнения y=1,5×e2x-x2-x-0,5. Составить программу, выполняющую вычисления с использованием массивов. Результаты расчёта представить в виде таблицы, и вывести её на экран и принтер.

x Метод Эйлера Модифицированный метод Эйлера Метод Рунге-Кутта Точное решение
0.0 1.0000 1.0000 1.0000 1.0000
0.1 1.2000 1.2210 1.2221 1.2221
0.2 1.4420 1.4948 1.4977 1.4977
0.3 1.7384 1.8375 1.8432 1.8432
0.4 2.1041 2.2685 2.2783 2.2783
0.5 2.5569 2.8118 2.8274 2.8274
0.6 3.1183 3.4964 3.5201 3.5202
0.7 3.8139 4.3578 4.3927 4.3928
0.8 4.6747 5.4393 5.4894 5.4895
0.9 5.7376 6.7938 6.8643 6.8645
1.0 7.0472 8.4856 8.5834 8.5836

 

ОГЛАВЛЕНИЕ

Алгоритмы и способы их описания
Этапы подготовки и решения задач на ЭВМ
Начало работы в системе Turbo Pascal 7.0
Ввод исходных данных и вывод результатов вычислений
Реализация линейных алгоритмов
Программирование разветвляющихся алгоритмов
Циклические алгоритмы с известным числом повторений
Циклические алгоритмы с неизвестным числом повторений
Итерационные алгоритмы циклической структуры
Работа с массивами
Процедуры и функции пользователя
Записи
Работа с файлами
Программирование в графическом режиме на языке Паскаль
Алгоритмы построения графика аналитически заданной функции
Анимация изображений
Численные методы вычисления определённого интеграла
Численные методы решения нелинейных уравнений
Численные методы решения обыкновенных дифференциальных уравнений
ЛИТЕРАТУРА

 

 

ЛИТЕРАТУРА

1. Вычислительная техника и программирование. Практикум по программированию: Практ. пособие. / В.Е. Алексеев, А.С. Ваулин, Г.Б, Петрова; под ред. А.В. Петрова. – М.: Высшая школа, 1991. – 400с.

2. Немнюгин С.А. Turbo Pascal: Учебник. СПб.: Питер, 2001. –496с.

3. Немнюгин С.А. Turbo Pascal: практикум. СПб.: Питер, 2001. –256с.

4. Культин Н.Turbo Pascal 7.0. –СПб.: ВНV –Санкт-Петербург, 1998. –336 с.

5. Вальвачёв А.Н., Крисевич В.С. Программирование на языке Паскаль для персональных ЭВМ ЕС: Справ. пособие. –Мн.: Выш. шк. 1989. –223с.

6. Валвьачёв А.Н. Графическое программирование на языке Паскаль: справ. Пособие. –Мн.: Выш. шк. 1992. –143 с.

7. Программирование на персональных ЭВМ: Практикум: Учеб. пособие / Д.В. Офицеров, А.Б. Долгий, В.А. Старых; под ред. Д.В. Офицерова. –Минск: Высшая школа, 1993. –256с.

8. Программирование на языке TURBO PASCAL. / Учебн. Пособие под ред. Б.С. Богумирского и А.Д. Хомоненко. – СПб.: ВИККА им. А.Ф. Можайского, 1994. –326с.

9. Т.Шуп. Решение инженерных задач на ЭВМ: Практическое руководство. Пер. с англ. –М.: Мир, 1982. –238с.

 







Последнее изменение этой страницы: 2016-04-18; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.237.200.21 (0.009 с.)