- •Лабораторный практикум по информатике
- •Часть 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 программирование в системе турбо паскаль
- •Архангельск
Метод Рунге-Кутта
Для повышения точности вычисления значений функции требуется проведение дополнительных вычислений внутри интервала h, то есть между xi и xi+1. Метод Рунге-Кутта даёт набор формул для расчёта координат внутренних точек, требуемых для достижения точности, то есть ошибки на каждом шаге, порядка h4. Расчёты при использовании этого метода производятся по формуле:
,
где k0=hf(xi,yi), k1=hf(xi+h/2, yi+k0/2), k2=hf(xi+h/2, yi+k1/2), k3=hf(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 x1 и h=0,1 обычным и модифицированным методами Эйлера и методом Рунге-Кутта. Для проверки использовать точное решение этого уравнения y=1,5e2x 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 |