2017-05-24 18 views
0

我想通過在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 

但我不確定此方法是否正確,或者如果可以寫得更好。任何人都可以幫助我知道它是否正確?

+0

相對於'f'和't',x'和'y'是什麼?什麼是已知的'g'? – LutzL

回答

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. 使用另一種解決方法,如龍格庫塔。
  3. 求解析解。

如果我是你,我會做分析路線。祝你好運