Gelen Cevabıma a MSE üzerinde soruya 2D Hamilton fizik simülasyonu ile ilgili olarak, daha yüksek bir dereceden kullanarak sürmüştür simplektik entegratörü .
Daha sonra, farklı zaman adımlarının yöntemlerin farklı siparişlerle küresel doğruluk üzerindeki etkilerini göstermenin iyi bir fikir olabileceğini düşündüm ve bu yönde bir Python / Pylab betiği yazdım ve çalıştırdım. Karşılaştırma için seçtim:
- ( leap2 ) Vikipedi'nin tanıdık olduğum 2. dereceden örneği , birdirbir adıyla bildiğim halde ,
- ( ruth3 ) Ruth'un 3. dereceden sezgisel entegratörü ,
- ( ruth4 ) Ruth'un 4. dereceden sezgisel entegratörü .
Garip olan şey, ne zaman seçersem seçelim, Ruth'un 3. dereceden yöntemi testimde Ruth'un 4. dereceden yönteminden, hatta bir büyüklük sırasına göre daha doğru gibi görünüyor.
Benim sorum şu: Burada neyi yanlış yapıyorum? Detaylar aşağıda.
Yöntem sistemlerde gücünü açığa ayrılabilir , örneğin, aşağıdaki gibi ifade edilebilir olanlar Hamiltonyenlerin
her konum koordinatları içerir,
konjugatı momentumları, içeren
kinetik temsil enerji ve potansiyel enerji.
Bizim düzenimizde, kuvvetleri ve momentumları uygulandıkları kütlelerle normalleştirebiliriz. Böylece kuvvetler ivmeye, anlıklar da hızlara dönüşür.
ve etiketleyeceğim özel (verilen, sabit) katsayılarla birlikte gelir . Bu katsayılar ile zaman sistemin gelişen için bir adım süresi şeklindedir
İçin :
- İşlem vektör tüm ivmelerin verilen vektör tüm pozisyonların
- Tüm hızların vektörünü
- Tüm konumların vektörel değerini
Bilgelik şimdi katsayılarda yatıyor. Bunlar
Test için 1D başlangıç değeri problemini seçtim
ayrılabilir Hamiltonian olan . Burada, ile tespit edilir .
Ben üzerinden yukarıdaki yöntemlerle IVP entegre bir adım boyu ile bir tamsayı ile arasından seçilen bir yerde ve . Artık2'nin hızını dikkate alarak , bu yöntem için üçe katladım . Daha sonra elde edilen eğrileri faz boşluğuna ve eğrilerin ideal olarak tekrar gelmesi gereken yakınlaştırdım .N-(1,0)
ve için çizimler ve yakınlaştırmalar :
İçin , leap2 adım büyüklüğü ile daha yakın ev gelmesi olur ruth4 adım boyutu ile . İçin , ruth4 üzerinden kazanç leap2 . Ancak, ruth4 ile aynı adım büyüklüğüne sahip ruth3 , şimdiye kadar test ettiğim tüm ayarlarda eve her ikisinden de çok daha yakın geliyor. 2π
İşte Python / Pylab betiği:
import numpy as np
import matplotlib.pyplot as plt
def symplectic_integrate_step(qvt0, accel, dt, coeffs):
q,v,t = qvt0
for ai,bi in coeffs.T:
v += bi * accel(q,v,t) * dt
q += ai * v * dt
t += ai * dt
return q,v,t
def symplectic_integrate(qvt0, accel, t, coeffs):
q = np.empty_like(t)
v = np.empty_like(t)
qvt = qvt0
q[0] = qvt[0]
v[0] = qvt[1]
for i in xrange(1, len(t)):
qvt = symplectic_integrate_step(qvt, accel, t[i]-t[i-1], coeffs)
q[i] = qvt[0]
v[i] = qvt[1]
return q,v
c = np.math.pow(2.0, 1.0/3.0)
ruth4 = np.array([[0.5, 0.5*(1.0-c), 0.5*(1.0-c), 0.5],
[0.0, 1.0, -c, 1.0]]) / (2.0 - c)
ruth3 = np.array([[2.0/3.0, -2.0/3.0, 1.0], [7.0/24.0, 0.75, -1.0/24.0]])
leap2 = np.array([[0.5, 0.5], [0.0, 1.0]])
accel = lambda q,v,t: -q
qvt0 = (1.0, 0.0, 0.0)
tmax = 2.0 * np.math.pi
N = 36
fig, ax = plt.subplots(1, figsize=(6, 6))
ax.axis([-1.3, 1.3, -1.3, 1.3])
ax.set_aspect('equal')
ax.set_title(r"Phase plot $(y(t),y'(t))$")
ax.grid(True)
t = np.linspace(0.0, tmax, 3*N+1)
q,v = symplectic_integrate(qvt0, accel, t, leap2)
ax.plot(q, v, label='leap2 (%d steps)' % (3*N), color='black')
t = np.linspace(0.0, tmax, N+1)
q,v = symplectic_integrate(qvt0, accel, t, ruth3)
ax.plot(q, v, label='ruth3 (%d steps)' % N, color='red')
q,v = symplectic_integrate(qvt0, accel, t, ruth4)
ax.plot(q, v, label='ruth4 (%d steps)' % N, color='blue')
ax.legend(loc='center')
fig.show()
Zaten basit hataları kontrol ettim:
- Wikipedia yazım hatası yok. Özellikle referansları kontrol ettim ( 1 , 2 , 3 ).
- Katsayı dizisini doğru buldum. Wikipedia'nın sıralamasıyla karşılaştırırsanız, operatör uygulamasının sıralamasının sağdan sola doğru çalıştığını unutmayın. Numaram Candy / Rozmus ile aynı fikirde . Yine de başka bir sipariş denersem, sonuçlar daha da kötüleşir.
Şüphelerim:
- Yanlış kademeli sipariş: Belki Ruth'un üçüncü dereceden düzeni bir şekilde çok daha küçük zımni sabitlere sahiptir ve adım boyutu gerçekten küçük yapılmışsa, 4. dereceden yöntem kazanırdı? Ama bile denedim ve 3. dereceden yöntem hala üstündür.
- Yanlış test: Testimle ilgili özel bir şey, Ruth'un 3. dereceden yönteminin daha üst düzey bir yöntem gibi davranmasına izin veriyor mu?