2
我想使用integrate.ode
模塊在2D中集成粒子路徑。我的情況有點不同的是,我只想整合到某個位置,由粒子的最大允許x座標決定:x_max
。Python中的自適應ODE算法
我的主要問題是,粒子可能先移動得非常慢,然後再收集更多速度。因此,我不想在這個地區花費很少的時間來浪費精力。該算法應該能夠進行調整,以便在粒子速度變高時使用較小的時間步長。
下面我有一些粗糙的僞代碼用於此目的:
backend = "dopri5"
x_max = 1
solver = ode(f)
solver.set_integrator(backend)
solver.set_initial_value(y0, t0)
t, y = [t0], [y0]
k = 1.2
while solver.successful() and solver.y[0] < x_max
solver.integrate(solver.t+dt)
t.append(solver.t)
y.append(solver.y)
v_current = numpy.linalg.norm(y[-1])
v_previous = numpy.linalg.norm(y[-2])
if numpy.abs(v_current-v_previous) > k * v_previous:
dt = 0.8*dt
del y[-1]
else:
dt = dt*1.2
麻煩的是這種算法可能不那麼強勁,因爲選擇的值k, 1.2, 0.8
是有點任意的,可能會導致該算法的一些穩定性問題。
任何人都可以提出一個更好的方法來做到這一點?
的空間真的,這可能是更適合於http://scicomp.stackexchange.com/ –
@AndrewWalker對不起,我應該在那裏重新發布我的問題嗎? – Jack
海事組織它不是脫離主題,但它是相當具體的,我想你可能會從scicomp的觀衆得到更好的答案。 –