
- •Глава 4 Решение обыкновенных дифференциальных уравнений
- •4.1. Метод Эйлера.
- •4.2. Метод Эйлера усовершенствованный.
- •4.3. Метод Эйлера модифицированный
- •4.4. Оценки порядка точности методов Эйлера (э), Эйлера модифицированного (эм) и Эйлера усовершенствованного (эу).
- •4.5. Метод Рунге-Кутта 3гопорядка.
- •4.6. Метод Рунге-Кутта 4гопорядка
- •4.7. Оценки точности методов Рунге-Кутта в процессе вычислений
- •Приведем примеры программ на matlab для расчета правых частей систем оду в скалярной и векторно-матричной формах
- •Приведем программу интегрирования системы дифференциальных уравнений методом Рунге-Кутта 4-го порядка:
Приведем примеры программ на matlab для расчета правых частей систем оду в скалярной и векторно-матричной формах
Файл dX5.m:
function dZ=dX5 (T,Z);
%Система из 3 уравнений, вектор производных столбец.
Tau=[0 0.1 1];
K=0.2; Td=5;
dx1=K*(1-Z(3));
dx2=(Td*dx1+Z(1)-Z(2))/Tau(2);
dx3=(Z(2)-Z(3))/Tau(3);
dZ=[dx1;dx2;dx3];
Файл AXB.m:
function dZ=AXB(T,Z)
%Система из 3 уравнений, вектор производных столбец.
%Пример составления матриц А, В и С
K=0.5; Tau2=0.5; Tau3=0.5; X0=1;
A=[0 0 -K;1/Tau2 -1/Tau2 0;0 1/Tau3 -1/Tau3];
B=[K 0 0]';
C=[0 0 1];
dZ=[A*Z+B*X0];
Y=C*Z;
4.9. Краткий обзор методов интегрирования систем ОДУ с помощью MATLAB.
Для решения систем ОДУ в MATLAB имеется 7 солверов: ode45, ode23, ode113,
оde15s, ode23s, ode23t, ode23tb.
ode45 использует метод Рунге-Кутта 4-го порядка;
ode23 использует метод Рунге-Кутта 2-го порядка;
ode113 использует метод Адамса переменного порядка;
Добавление s означает, что метод можно использовать для жестких систем.
ode15s использует многошаговый метод Гира с изменением порядка;
ode23s использует одношаговый метод Розенброка 2-го порядка;
ode23t использует неявный метод 2-го порядка с интерполяцией. Его можно использовать для умеренно жестких задач.
оde23tb использует неявный метод 2-го порядка с дифференцированием назад. Он может быть эффективнее, чем оde15s.
Обращение к любой стандартной функции одинаково, например:
[t,x]=ode45(fun, interval_t, x0) , где
t – вектор-столбец (время),
x – вектор-столбец интегрируемых переменных,
fun – вектор- столбец производных (правые части дифференциальных уравнений),
interval_t – интервал времени, например, от 0 до 10 сек [0,10],
x0 – начальные значения переменных (вектор-столбец), например, нулевые [0;0;0].
Для решения большинства задач ТАУ солвер ode45 дает хорошие результаты. Солвер
ode23 следует применять для задач с умеренно жесткими системами, когда требуется относительно невысокая точность. Для нежестких систем, когда требуются расчеты с высокой степенью точности, следует применять ode113. Он особенно эффективен для систем со сложными выражениями правых частей дифференциальных уравнений.
Для жестких систем наиболее подходит солвер ode15s. Если требования к точности слабее следует применять ode23s.
По умолчанию
для всех солверов относительная точность
,
а абсолютная
.
Все солверы допускают использование параметров для контроля и управления вычислениями. Приведем некоторые из них.
Таблица 4.1.
Назначение параметра |
Имя параметра |
Контроль точности вычислений |
RelTol, AbsTol, NormControl |
Шаг интегрирования |
InitialStep, MaxStep |
Выходные данные |
OutputFcp, OutputSel, Refine, Stats |
Якобиан |
Jacobian, JPattern, Vectorized |
События |
Events |
Значение параметров задается в управляющей структуре, создаваемой функцией odeset: оptions = odeset(…, “Имя параметра“, Значение,… ). Например:
options = odeset(‘RelTol’,1.0e-04);
[t,x] = ode45(‘AXB’ ,[0 10],[ 0 0 0],options)
Если заданы выходные параметры, то они выдаются на экран. Если они не заданы, то на экран выдаются графики результатов расчета.
Для детального знакомства с возможностями управления результатами решения систем дифференциальных уравнений следует обращаться к более подробным описаниям MATLAB.