【问题标题】:Discretizing a differential equation and find the value of a parameter in each time step离散微分方程并在每个时间步中找到参数的值
【发布时间】:2017-05-24 17:27:40
【问题描述】:

我想通过在t 上使用for 循环来查找f(t) 的值。支配f 的方程式是:

df/dt = cos(f) g(x,y,t)

xy 是二维坐标。我写了以下代码:

dt=1; a=2;
f(1,1)= a*rand(1,1);
for t = 2:100
    f(1,t)= cos(f(1,t-1)) g(x,y,t) dt;
end

但我不确定这种方法是否正确,或者是否可以写得更好。谁能帮我知道它是否正确?

【问题讨论】:

  • 相对于ftxy 是什么?对“g”有什么了解?

标签: matlab numerical-methods differential-equations


【解决方案1】:

您实际上是在尝试使用单位步长($h = 1$) 实现欧拉方法。推进$f$ are $f_{n+1} = f_{n} + h cos(f_{n}) g(x,y,t_{n})$ 的公式。这里$t_n = t_0 + n h$。所以你在循环中的代码需要改为:

 f(1,t) = f(1,t-1) + cos(f(1,t-1)) g(x,y,t-1) dt

这个方法适用于这个系统吗?坦率地说,这不太可能。欧拉法往往最适用于相对于步长变化不大的平滑函数。鉴于 $cos$ 函数的快速变化,欧拉方法很可能会因步长大而失败。

系统如何解决?您可以做一些事情。

  1. 使用较小的步长(它必须非常小)。
  2. 使用另一种解决方法,例如 Runge-Kutta。
  3. 求解解析解。

如果我是你,我会做分析路线。祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-20
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2020-07-17
    • 2018-08-11
    相关资源
    最近更新 更多