我有一个快速的问题,我希望有一个相当简单的解决方案。我有一个看起来像这样的功能:
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
。
答案 0 :(得分:0)
ODE集成函数are of the form y' = f(t,y),即它们必须将时间作为它们的第一个输入参数,将状态向量作为它们的第二个(在ODE仅依赖于时间的极少数情况下可以省略状态向量) 。你不是这样做的。你的myFunction
只接受状态向量作为输入,这很好。但是,您已经错误地定义了匿名函数,以便它以及x
传递给myFunction
。您需要撤销t
和x
:
[Tout,Yout] = ode45(@(t,x)myFunction(x),[t0 tfinal],x0);
希望这能解决所有问题。