
- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Введение
- •Лабораторная работа №1 Создание простейшей программы
- •Начало работы с новой программой
- •Задание 1
- •Сохранение текстового файла программы на диске:
- •Задание 2
- •Задание 3
- •Задание 4
- •Лабораторная работа №2 Ввод данных и вывод результатов
- •Задания
- •Лабораторная работа №3 Программирование линейных алгоритмов
- •Задание
- •Лабораторная работа №4 Программирование разветвляющихся алгоритмов
- •Задание 1
- •Задание 2
- •Лабораторная работа № 5 Программирование циклических алгоритмов с известным числом повторений
- •Задание
- •Лабораторная работа №6 Программирование циклических алгоритмов с неизвестным числом повторений
- •Задания
- •Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •Вариант 9
- •Вариант 10
- •Лабораторная работа №7 Программирование алгоритмов итерационной циклической структуры
- •Задание
- •Лабораторная работа №8 Массивы
- •Лабораторная работа №9 Процедуры и функции пользователя в языке Паскаль
- •Задание
- •Лабораторная работа №10 Записи
- •Задания
- •Лабораторная работа №11 Работа с файлами
- •Лабораторная работа №12 Графический режим в языке Паскаль
- •Лабораторная работа №13 Построение графика функции
- •Задания
- •Лабораторная работа №14 Создание движущихся изображений
- •Задание 1
- •Задание 2
- •Лабораторная работа №15 Вычисление определённого интеграла численными методами
- •Метод прямоугольников
- •Метод трапеций
- •Метод Симпсона
- •Задания
- •Лабораторная работа №16 Решение нелинейных уравнений численными методами
- •Метод половинного деления
- •Метод Ньютона
- •Метод хорд
- •Задания
- •Лабораторная работа №17 Решение обыкновенных дифференциальных уравнений численными методами
- •Метод Эйлера
- •Модифицированный метод Эйлера
- •Метод Рунге-Кутта
- •Задание
- •Приложение
- •Список литературы
- •Оглавление
- •Лабораторный практикум по информатике
- •Часть II программирование в системе турбо паскаль
- •Архангельск
Метод Эйлера
Это простейший метод решения задачи Коши, позволяющий решить дифференциальное уравнение первого порядка. Его точность невелика, поэтому на практике им пользуются редко. Однако на основе этого метода легче понять алгоритм других, более эффективных методов.
Метод Эйлера основан на разложении функции y в ряд Тейлора в окрестности x0:
Если h
мало, то члены, содержащие производные
второго и более высоких порядков, можно
отбросить. Тогда
.
y’(x0)
находим из дифференциального уравнения,
подставив в него начальное условие.
Таким образом, можно получить приближённое
значение y при малом
смещении h от начальной
точки x0. Этот
процесс можно продолжить, используя
следующую рекуррентную формулу:
Рис.17.2. Принцип метода Эйлера
yi+1=yi + hf(xi,yi), i=1,2,…
Графически метод Эйлера показан на рис.17.2. Ошибка метода имеет порядок h2.
Пример 1. Составим программу для решения дифференциального уравнения y=2x2+2y при начальном условии y(0)=1; 0 x1 и h=0,1.
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:=2*x*x+2*y;
end;
Begin
ClrScr;
Writeln(' Решение дифференциального уравнения ');
Writeln(' dy/dx=2x^2+2y методом Эйлера ');
{ Ввод исходных данных }
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*f(x,y);
Writeln('|', i:2, ' |', x:5:2, ' |', y:7:4, ' |');
x:=x+h;
i:=i+1;
Until x>xk;
Writeln('--------------------');
Readln;
End.
Модифицированный метод Эйлера
Точность метода Эйлера можно существенно повысить, улучшив аппроксимацию производной. Это можно сделать, например, используя среднее значение производной в начале и в конце интервала. В модифицированном методе Эйлера сначала по методу Эйлера вычисляется значение функции в следующей точке:
y*i+1 = yi + hf(xi,yi),
которое используется для вычисления приближённого значения производной в конце интервала f(xi+1, y*i+1). Вычислив среднее между этим значением производной и её значением в начале интервала, найдём более точное значение yi+1:
yi+1 = yi + h/2 f(xi,yi) + f(xi+1, y*i+1 )].
Принцип метода проиллюстрирован на рис. 17.3. Для получения новой точки в нём требуется информация о двух других точках – предыдущей и промежуточной. Ошибка этого метода на каждом шаге имеет порядок h2.
Рис.17.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.