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