
- •Тема 4. Численное дифференцирование и интегрирование
- •4.1. Численное дифференцирование: постановка задачи, вывод формул
- •4.2. Оценка погрешности численного дифференцирования
- •4.3. Обусловленность численного дифференцирования.
- •4.4. Формулы для высших и частных производных
- •4.5. Задача численного интегрирования
- •4.6. Формула трапеций
- •4.7. Формула Симпсона
- •4.7.2. Оценка погрешности формулы Симпсона.
- •4.8. Составные формулы численного интегрирования
- •4.9. Метод дробления шага. Правило Рунге
- •4.10. Обусловленность квадратурных формул
- •Тема 5. Численное решение обыкновенных дифференциальных уравнений (оду)
- •5.1. Основные понятия
- •5.2. Классификация численных методов решения задачи Коши для уравнения 1-го порядка
- •Результаты расчетов примера 5.3
- •5.3. Точность и устойчивость
- •5.3.1. Свойства задачи Коши
- •5.3.2. Свойства численных методов решения задачи Коши
- •5.4.1. Подходы к выводу расчётных формул.
- •5.4.2. Формулы методов 4-го порядка.
- •Метод Адамса-Моултона. Это 3-х шаговый неявный метод.
- •5.5. Методы Рунге-Кутты
- •Методы 4-го порядка точности. Результаты расчетов примера 5.3
- •5.6. Правило Рунге-Ромберга
- •5.7. Системы дифференциальных уравнений
- •Приложение Программа решения системы дифференциальных уравнений
- •Текст программы
Приложение Программа решения системы дифференциальных уравнений
Дана система из двух обыкновенных дифференциальных уравнений.
Для описания принципа построения программы ее решения приведем текст программы ее численного решения модифицированным методом Эйлера. Все другие методы, в частности, 4-го порядка отличаются только количеством обращений к процедуре расчета правых частей уравнений и формулами получения результатов (прогнозируемого и окончательного).
При переходе на другой метод в строке {Прогноз} записываются формулы вычисления всех прогнозируемых точек (по Адамсу-Башфорту или Рунге-Кутте), а в строках {Результат} – итоговая квадратурная формула для вычисления уi+1 с учетом полученного прогноза.
Текст программы
Uses Crt;
const k = 2; { Число уравнений }
type mX = array[1..k] of real;
var x, x0, xN, h : real;
y, f1, f2, yPR : mX;
j, i, N : integer;
procedure fun(x:real; y:mX; var f:mX); { Правые части системы }
begin f[1] := –y[2] + x*x;
f[2] := y[1] + exp(x);
end;
begin ClrScr; { Головная программа }
x0:= 0; xN:= 1; y[1]:= –0.5; y[2]:= –1.5; h:= 0.1;
N:= round( (xN – x0) / h ); { Число точек решения}
x := x0;
writeln(x:10:5, y[1]:12:5, y[2]:10:5);
for i := 1 to N do
begin
fun(x, y, f1);
for j:=1 to k do yPR[j]:= y[j]+ h*f1[j]; { Прогноз }
{ Результат }
fun(x+h, yPR, f2);
for j:=1 to k do y[j]:=y[j]+0.5*h*(f1[j]+f2[j]);
x := x0 + i*h;
writeln(x:10:5,y[1]:12:5,y[2]:10:5);
readln;
end;
end.