Использование решателей систем ОДУ
Решатели используют в списке различные параметры. В приведенной ниже таблице они даны для решателей обычных (в том числе жестких) дифференциальных уравнений.
Параметры | Ode45 | Ode23 | Ode11s | Ode15s | ode23s |
---|---|---|---|---|---|
RelTol,AbsTol | + | + | + | + | + |
OutputFcaOutputSel, Refine, Stats | + | + | + | + | + |
Events | + | + | + | + | + |
MaxStep, InitlalStep | + | + | + | + | + |
Jconstant, Jacobl an, | |||||
Jpattern, Vectorized | + | + | |||
Mass | + | + | |||
MassConstant | + | ||||
MaxOrder, BOF | + |
Решатель bvp4c имеет очень небольшое число параметров, но можно вводить не только матрицу Якоби интегрируемой функции, но и матрицу Якоби, содержащую частные производные функции граничных условий по границам интервала и по неизвестным параметрам.
Покажем применение решателя ОДУ на ставшем классическом примере – решении уравнения Ван-дер-Поля, записанного в виде системы из двух дифференциальных уравнений:
y' 1= y 2;
y' 2= 100*(1-y 1 )^2 * y 2 -y 1
При начальных условиях:
y 1 ,(0) = 0;
y 2 (0) = 1.
Перед решением нужно записать систему дифференциальных уравнений в виде ode-функции. Для этого в главном меню выберем File › New › M-File и введем:
function
dydt
=
vdp100(t,y)
dydt
=
zeros(
2
,
1
);
%
a column vector
dydt(
1
)
=
y(
2
);
dydt(
2
)
=
100
*
(
1
-
y(
1
^
)
2
)
*
y(
2
)
-
y(
1
);
Сохраним m-файл-функцию. Тогда решение решателем ode15s и сопровождающий его график можно получить, используя следующие команды:
>
>
[T,Y]
=
odel5s(@vdp100.[
0
30
].[
2
0
]);
>
>
plot(T,Y)
>
>
hold
on
:gtext(
'yl'
).gtext(
'y2'
)
Последние команды позволяют с помощью мыши нанести на графики решений y1 = y(1) и у2 = y(2) помечающие их надписи.