我一直在计算物理课中广泛使用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]}
的关系如何?显然,顺序很重要,但我不太明白这一点。如果我知道两者之间的关系,我想我会理解这一点。
如果您认为我没有提供足够的信息,请告诉我。
答案 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]