我想通过在f(t)
上使用for循环找到t
的值。管理f
的等式是:
df/dt = cos(f) g(x,y,t)
x
和y
是2D坐标。我写了下面的代码:
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
但是我不确定这种方法是否正确,或者是否可以更好地编写它。谁能帮助我知道它是否正确?
答案 0 :(得分:1)
您实际上是在尝试使用单位步长($h = 1$)
来实现Euler方法。推进$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 $函数的快速变化,对于大步长,euler方法很可能会失败。
如何解决系统问题?你可以做一些事情。
如果我是你,我会做分析路线。祝你好运