Иллюстрированный самоучитель по MatLab

Описание системы ОДУ

Можно использовать 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,y)
dydx = [ y(2)-abs(yd)) ];
function res = twobc(ya.yb) res = [ ya(1)yb(1) + 2 ];

Теперь наберите в командной строке type twobvp и посмотрите само решение уравнения, которое содержится в уже имеющемся в системе файле twobvp. А исполнив команду twodvp, можно наблюдать результат решения в виде графиков. В решении вы найдете структуру узлов начальной сетки решения, которая поясняется ниже.

  • solinit – это структура узлов начальной сетки решения (в любой шкале), но такая, что solinit.x=a, solinit.x – b. И функция у, и функция у' должны быть непрерывны на участке [а b]. Дотадка для начальной итерации so1imt=bvpi-mt(x,yinit.params) в bvp4c отличается тем, что ваше начальное представление о функции у yinit можно вводить не только в виде вектора, но и как символьную функцию.

Рекомендуется просмотреть также пример mat4bvp и дополнительные примеры решения систем дифференциальных уравнений, приведенные в файле odedemo. Во многих случаях решение задач, сводящихся к решению систем дифференциальных уравнений, удобнее осуществлять с помощью пакета расширения Simulink.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.