Понимание функции matlab

Я довольно широко использовал matlabFunction в своем классе вычислительной физики и надеялся, что кто-нибудь поможет мне понять, что именно происходит с этой командой (является ли matlabFunction командой?). Я прочитал что предоставляет веб-сайт MathWorks относительно matlabFunction, но надеялся на некоторые разъяснения .

Например, мы имели дело с уравнениями Лоренца, хаотической системой. Это система дифференциальных уравнений:

dx/dt = s*(y-x), dy/dt = -x*z+r*x-y, dz/dt = x*y-b*z.

Мы использовали matlabFunction как таковой:

matlabFunction([s*(y-x);-x*z+r*x-y; x*y-b*z],...
    'vars', {t,[x;y;z],[s;r;b]},...
    'file', 'Example2');

Я понимаю, что [s*(y-x);-x*z+r*x-y; x*y-b*z] — это вектор-столбец, содержащий наши неизвестные функции (в данном случае они являются производными по времени), которые мы используем для аппроксимации функций x(t), y(t) и z(t) с помощью ode45 .

Мой вопрос в том, как [s*(y-x);-x*z+r*x-y; x*y-b*z] связано с {t,[x;y;z],[s;r;b]}? Очевидно, порядок имеет значение, но я не совсем понимаю это. Я думаю, что понял бы это, если бы знал отношения между ними.

Если вы считаете, что я предоставил недостаточно информации, пожалуйста, дайте мне знать.


person Mack    schedule 09.03.2014    source источник


Ответы (1)


Ваш код (за исключением параметра file) генерирует следующий вывод:

matlabFunction([s*(y-x);-x*z+r*x-y; x*y-b*z],'vars',{t,[x;y;z],[s;r;b]})

ans = 

    @(t,in2,in3)[-in3(1,:).*(in2(1,:)-in2(2,:));-in2(2,:)+in3(2,:).*in2(1,:)-in2(1,:).*in2(3,:);-in3(3,:).*in2(3,:)+in2(1,:).*in2(2,:)]

Ячейка {t,[x;y;z],[s;r;b]} определяет, что первым входным аргументом функции является t. Второй входной аргумент in2 представляет собой трехэлементный вектор, содержащий [x;y;z], а третий входной аргумент in3 представляет собой трехэлементный вектор, содержащий [s;r;b].

Сравните вывод со следующим, чтобы увидеть связь между вашими символьными переменными и входными аргументами:

    matlabFunction([s*(y-x);-x*z+r*x-y; x*y-b*z],'vars',{t,x,y,z,s,r,b})

ans = 

    @(t,x,y,z,s,r,b)[-s.*(x-y);-y+r.*x-x.*z;-b.*z+x.*y]
person Daniel    schedule 09.03.2014
comment
Хорошо. Теперь у меня вопрос, который относится к ode45. Когда я передаю эту функцию через ode45 с некоторыми начальными условиями, читает ли ode45 производную -s.*(xy) как аппроксимацию неизвестной функции x; то же самое говорится о -y+r.*x-x.*z и y и -b.*z+x.*y и z? Кроме того, вектор [s;r;b] — это просто вектор параметров. - person Mack; 10.03.2014