了解matlabFunction

时间:2014-03-09 23:06:19

标签: matlab function ode

我一直在计算物理课中广泛使用matlabFunction,我希望有人可以帮助我理解这个命令究竟发生了什么(matlabFunction命令是什么?)。关于matlabFunction,我已阅读what the MathWorks website provides,但希望得到一些澄清。

例如,我们处理的是Lorenz方程,一个混沌系统。这是一个微分方程组:

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]}的关系如何?显然,顺序很重要,但我不太明白这一点。如果我知道两者之间的关系,我想我会理解这一点。

如果您认为我没有提供足够的信息,请告诉我。

1 个答案:

答案 0 :(得分: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]的3元素向量,第三个输入参数in3是一个包含[s;r;b]的3元素向量

将输出与以下内容进行比较,以查看符号变量和输入参数之间的关系:

    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]