【问题标题】:Matlab's ode45 not sending initial conditions into functionMatlab的ode45没有将初始条件发送到函数中
【发布时间】:2013-11-24 09:16:04
【问题描述】:

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

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

【问题讨论】:

  • 如何初始化变量x0

标签: matlab indexing ode numerical-integration


【解决方案1】:

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

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

希望这能解决所有问题。

【讨论】:

  • @JGSuw:你能让你的代码工作吗?如果我的回答有帮助,请采纳。谢谢。
猜你喜欢
  • 2017-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
相关资源
最近更新 更多