Matlab的ode45没有将初始条件发送到函数中

时间:2013-11-24 09:16:04

标签: matlab indexing ode numerical-integration

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

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

1 个答案:

答案 0 :(得分:0)

ODE集成函数are of the form y' = f(t,y),即它们必须将时间作为它们的第一个输入参数,将状态向量作为它们的第二个(在ODE仅依赖于时间的极少数情况下可以省略状态向量) 。你不是这样做的。你的myFunction只接受状态向量作为输入,这很好。但是,您已经错误地定义了匿名函数,以便它以及x传递给myFunction。您需要撤销tx

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

希望这能解决所有问题。

相关问题