0
我試圖解決使用龍格庫塔4方法(RK4)的ODE系統。我正在對下面的算法進行代碼測試,並發現該解決方案不等於解析解決方案(並且錯誤很大)。下面我已經包含了我對I.V.P.的代碼測試。 dy/dt = f(t,y)。我試圖在這段代碼中發現錯誤,但無法找到它們。任何幫助深表感謝。 全局 [噸 DT 生長速率]Runge-Kutta 4解決方案中的錯誤
turtles-own [ state ]
to setup
clear-all
create-turtles 1 [ set state 1]
set dt .01
set growth-rate .05
reset-ticks
end
to go
tick
set t t + dt
ask turtles [ set state rk4 t state dt ] ;integrate the diff eq.
end
;differential equation to be integrated using rk4
to-report df [ t_n state_n ] ; i.v.p. y(dot) = f(t_n, y_n)
report growth-rate * (state_n)
end
;;;;;;;function calls
to-report rk4 [ t_n state_n h ]
let k1 df t_n state_n
let k2 df (t_n + 0.5 * h) (state_n + ((h/2) * k1))
let k3 df (t_n + 0.5 * h) (state_n + ((h/2) * k2))
let k4 df (t_n + h) (state_n + k3)
let state_n+1 state_n + ((h/6) * (k1 + (2 * k2) + (2 * k3) + k4))
report state_n+1
end
積分這個函數至t = 100,我> 7的誤差(數值解〜156,和分析溶液〜148)
另外,我應該評論,這個錯誤是獨立的時間步驟。因此讓我相信這是算法實現的問題。 – user3887089