我问了一个关于matlabFunction如何工作的问题(here),这引发了一个与ode45函数相关的问题。使用我在matlab函数中发布的示例,当我通过ode45传递此函数时,有一些初始条件,ode45读取导数-s。*(x-y)作为近似未知函数x;同样说的是-y + r。* x-x。* z和y,以及-b。* z + x。* y和z?更具体地说,我们有
matlabFunction([s*(y-x);-x*z+r*x-y; x*y-b*z],
'vars',{t,[x;y;z],[s;r;b]},'file','Example2');
然后我们使用
[tout,yout]=ode45(@(t,Y,p) Example2(t,Y,[10;5;8/3]),[0,50],[1;0;0]);
近似求解未知函数x,y和z。 ode45如何知道将函数定义为变量[x; y; z]并近似它们?我有一种感觉,我的问题很模糊,但我想知道这些事情之间的联系。
答案 0 :(得分:2)
你的命令的语义是x'(t)= s *(y(t)-x(t)),y'(t)= - x(t)* z(t)+ r * x (t)-y(t),和z'(t)= x(t)* y(t)-b * z(t),其中给出了s,r和b的常数。 MATLAB将遵循您给出的命令并计算该系统的数值近似值。我不完全确定你的问题是什么意思,
ode45如何知道接受这些功能,[...]并近似它们?
这正是你告诉它要做的事情,这是ode45
唯一做过的事情。 (当你调用ode45
时,名字x,y,z完全不相关,顺便说一句。该函数只关心值的向量。)如果你问的是近似解决方案背后的算法以这种方式提供ODE,您可以使用谷歌或任何其他搜索引擎轻松找到有关该主题的任意数量的书籍和讲座。
顺便说一下,您可能对函数odeToVectorfield
感兴趣,这简化了从更传统形式编写的微分方程中获取这些函数的效果。