0

我有一个快速的问题,我希望有一个相当简单的解决方案。我有一个看起来像这样的函数:

function [dx] = myFunction(x)

其中x是一个包含系统配置(位置和动量)的四个元素的列向量。我正在尝试ode45在此配置空间中对一些粒子进行数值积分,如下所示:

[Tout,Yout] = ode45(@(x,t)myFunction(x),[t0 tfinal],x0);

每次我尝试这个我都会失败,收到以下错误:

Index exceeds matrix dimensions
Error in myFunction (line 9)
x2 = x(2);

ode45将单个元素 , 传递给x=0,而不是预期myFunction的四个元素的向量。myFunction这导致索引错误。为什么会发生这种情况,我该如何解决?看来我没有ode45正确使用。

4

1 回答 1

0

ODE 积分函数的形式为y' = f(t,y),即它们必须将时间作为第一个输入参数,将状态向量作为第二个输入参数(在 ODE 的极少数情况下可以省略状态向量只取决于时间)。你不这样做。可以myFunction只将状态向量作为输入。但是,您错误地定义了匿名函数,以至于它及时传递xmyFunction. 您需要反转tx

[Tout,Yout] = ode45(@(t,x)myFunction(x),[t0 tfinal],x0);

希望这能解决一切。

于 2013-11-24T16:59:35.727 回答