
- •1. Этапы подготовки и решения задач на эвм. Понятие алгоритма.
- •2. Элементарные базовые управляющие структуры
- •3. Состав и работа системы программирования Турбо Паскаль
- •4. Алфавит языка
- •5. Простейшие конструкции и типы данных
- •6. Структура программ на Паскале
- •7. Ввод и вывод данных
- •8. Программирование линейных структур в Паскале
- •Var b,y,z: real;
- •Var day: integer;
- •Var X,y: real; к: integer;
- •11. Программирование циклов с неизвестным числом повторений
- •Var X: integer;
- •Var X,a,p: real; k:integer;
- •12. Программирование вложенных циклов. Массивы.
- •Var amin:real; I, j : integer; a:array[1..100] of real;
- •13. Процедуры и функции в Паскале
- •Var a,b,c,s1,s2,s3,k,r,z:real;
- •Var c,n,m,l: integer;
- •Var p,I: integer;
- •14. Записи в Паскале.
- •15. Работа с файлами в Паскале
- •I:byte;
- •16. Программирование в графическом режиме
- •17. Анимация изображений в Паскале
- •X,y,dy,dx,time,delta,radius,Gd,Gm: integer;
- •18. Построение графика аналитически заданной функции
- •Xn, xk, X, y, Ymin, Ymax, dx:real;
- •19. Численные методы вычисления определённого интеграла
- •I, n: integer;
- •20. Численные методы решения нелинейных уравнений. Общие принципы.
- •22. Численные методы решения нелинейных уравнений. Метод Ньютона (метод касательных).
- •23. Численные методы решения нелинейных уравнений. Метод хорд (метод ложного положения).
- •24. Численные методы решения обыкновенных дифференциальных уравнений. Общие принципы.
- •25. Численные методы решения обыкновенных дифференциальных уравнений. Метод Эйлера.
- •Xn,xk,yn,h,X,y:real;
- •I:integer;
- •26. Численные методы решения обыкновенных дифференциальных уравнений. Модифицированный метод Эйлера.
- •Xn,xk,yn,yw,h:real;
- •I,n:integer;
- •X,y:array [1..20] of real;
- •27. Численные методы решения обыкновенных дифференциальных уравнений. Метод Рунге-Кутта.
- •Xn,xk,yn,h,k0,k1,k2,k3:real;
- •I,n:integer;
- •X,y:array [1..20] of real;
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.
26. Численные методы решения обыкновенных дифференциальных уравнений. Модифицированный метод Эйлера.
Точность метода Эйлера можно существенно повысить, улучшив аппроксимацию производной. Это можно сделать, например, используя среднее значение производной в начале и в конце интервала. В модифицированном методе Эйлера сначала по методу Эйлера вычисляется значение функции в следующей точке:
y*i+1 = yi + h*f(xi,yi)
Оно используется для вычисления приближённого значения производной в конце интервала f(i+1, y*i+1). Вычислив среднее между этим значением производной и её значением в начале интервала, найдём более точное значение yi+1:
yi+1 = yi + h/2*[f(xi,yi) + f(xi+1, y*i+1)] .
Принцип метода проиллюстрирован на рисунке. Для получения новой точки в нём требуется информация о двух других точках – предыдущей и промежуточной.
Ошибка этого метода на каждом шаге имеет порядок h2.
Пример: Разработать, сохранить и выполнить программу для решения дифференциального уравнения из предыдущего примера (раздел 25) модифицированным методом Эйлера. При выполнении расчетов использовать хранение результатов в массивах.
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.
27. Численные методы решения обыкновенных дифференциальных уравнений. Метод Рунге-Кутта.
Для повышения точности вычисления значений функции требуется проведение дополнительных вычислений внутри интервала h, то есть между xi и xi+1. Метод Рунге-Кутта даёт набор формул для расчёта координат внутренних точек, требуемых для достижения точности, то есть ошибки на каждом шаге, порядка h4. Расчёты при использовании этого метода производятся по формуле
yi+1=yi+(k0+2k1+2k2+k3)/6
Здесь 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. Допустимая погрешность на шаге определяет его максимальную величину.
Пример: Приведём фрагмент программы для решения дифференциального уравнения из предыдущего примера (раздел 26) методом Рунге-Кутта.
Program Runge;
Uses Crt;
Var