【问题标题】:Can I run ode45 backwards in time?我可以及时向后运行 ode45 吗?
【发布时间】:2013-01-03 16:34:34
【问题描述】:

我使用 ode45 来求解微分方程,但 tspan 必须始终使系统及时向前运行。我可以让 ode45 将系统向后运行到负 t 吗?

我遇到的具体问题是使用上升指数函数,即从 t=-infinity 到 t=0 的 a*exp(at),对于所有 t>0,该函数为零。如您所见,在我的问题中不可能翻译此函数并使用区间 t=0 到 t=infinity。所以,我希望 ode45 在负 t 下工作。

谢谢!

编辑:经过一番思考,我意识到我的问题措辞很糟糕,而且我的理解也很差,所以让我在这里重申一下。

我的 ODE 的形式为 x'=f(t)x,其中 f(t)=a*exp(at) 从 -infinity 到 0。系统从 t=-infinity 处的一些初始条件开始。另一方面,ode45 要求 tspan 为正,并且还需要 t=0 时的初始条件。那么我怎样才能改变这两个标准呢?

谢谢你:)

【问题讨论】:

  • 为什么不将-t 替换为一个新的时间变量,比如s,得到s 的新微分方程,求解s,然后将t 代入解决方案?
  • 不,你看这对我展示的功能不起作用。从 0 到无穷大的 aexp(-as) 与从 -infinity 到 0 的 aexp(at) 不同。我认为不可能将此函数“翻译”为正 t间隔。
  • 但是aexp(-as) from infinity to 0 和aexp(at) from -infinity to 0
  • 嗨拉斯曼,那么,tspan 是什么? [无穷大:0]?我用 ode45 试过这个。我只尝试了 [2:0],它给了我一个错误。我们正在尝试的本质上是试图在时间上倒退,不是吗?不幸的是,它不起作用,您能推荐一个替代方案吗?
  • 不确定我的想法是否正确,但是如果你用 s = (-1/t) 代替 [-inf, 0] 上的 t 来代替 s = [0, inf],那行得通吗?

标签: matlab ode


【解决方案1】:

使用向后的 linspace 生成 t。

对于正向 (t),使用类似 t = 0:0.1:2 的值。 对于反向 (rt),使用类似 rt = 2:0-.1:0 的值。

【讨论】:

  • 反向大小写应该是rt = 2:-0.1:0。
猜你喜欢
  • 2021-10-15
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多