|
|
|
Описание системы ОДУ
Можно использовать 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-файлах:
Warning: require_once(/var/www/u0033082/data/www/kokos13.ru/www.matlabsoft.ru/3d40b281efbf7e201223173b1a015a7e/sape.php): failed to open stream: No such file or directory in /var/www/u0033082/data/www/kokos13.ru/matlabsoft.ru/numpag16/Index30.php on line 273
Fatal error: require_once(): Failed opening required '/var/www/u0033082/data/www/kokos13.ru/www.matlabsoft.ru/3d40b281efbf7e201223173b1a015a7e/sape.php' (include_path='.:') in /var/www/u0033082/data/www/kokos13.ru/matlabsoft.ru/numpag16/Index30.php on line 273