Описание
системы ОДУ
Можно использовать
m-файл типа odefunction (или m-file типа odefile для совместимости с прежними
версиями, но последний случай мы рассматривать не будем, чтобы определить систему
дифференциальных уравнений в одной из явных (первая формула) или неявных форм:
y'=
F(t,
у), My' = F(t, у)
или
M(t)y'
=
Y(t, у),
где t — независимая
переменная (скаляр), которая обычно представляет время;
у
— вектор зависимых
переменных; F — функция от
t
и
у,
возвращающая вектор-столбец
такой же длины как и
у;
М и М(£) — матрицы, которые не должны быть
вырожденными. М может быть и константой.
Рассмотрим
пример решения уравнения вида
Оно сводится
к следующей системе уравнений:
Подготовим
m-файл ode-функции vdp.m:
function
[outl.out2.out3] = vdp(t.y.flag)
if
nargin
<
3 | isempty(flag)
outl
= [2.*y(2).*(l-y(2).
^
2)-y(1); y(1)];
else
switch(flag)
case
'inlt'
%
Return tspan. y0 and options
out1
= [0 20];
out2
= [2; 0];
out3
= [ ];
otherwise
error(['
Unknown request ''' flag '''.']);
end
end
Тогда решение
системы с помощью решателя ode23 реализуется следующими командами:
»
[T.Y] = ode23(@vdp.[0 20]. [2 0]);
Еще проще
работать с решателями нового поколения. Рассмотрим систему уравнений: y'+abs(y)=0;
y(0)=0; у(4)=-2.
Для решения
в пределах отрезка [0; 4] с помощью bvp4c достаточно привести эту систему к
виду: y'=-abs(y), y(0)=0; у(4)+2=0. Затем -создаем две ode-функции: twoode и
twobc в разных m-файлах:
function
dydx = twoode(x,у)
dydx = [ у(2)
-abs(yd))];
function
res = twobc(ya.yb) res = [ ya(l)
yb(l)
+ 2];
Теперь наберите
в командной строке type twobvp и посмотрите само решение уравнения, которое
содержится в уже имеющемся в системе файле twobvp. А исполнив команду twodvp,
можно наблюдать результат решения в виде графиков. В решении вы найдете структуру
узлов начальной сетки решения, которая поясняется ниже.
-
solinit
— это структура узлов начальной сетки решения (в любой шкале), но такая,
что solinit.x=a, solinit.x - b. И функция у, и функция у' должны быть непрерывны
на участке [а b]. Дотадка для начальной итерации so1imt=bvpi-mt(x,yinit.params)
в bvp4c отличается тем, что ваше начальное представление о функции у yinit
можно вводить не только в виде вектора, но и как символьную функцию.
Рекомендуется
просмотреть также пример mat4bvp и дополнительные примеры решения систем дифференциальных
уравнений, приведенные в файле odedemo. Во многих случаях решение задач, сводящихся
к решению систем дифференциальных уравнений, удобнее осуществлять с помощью
пакета расширения Simulink.