Bir FFT Zehir çözücü için teorik yakınsama oranı nedir?
Bir Poisson denklemini : ∇ 2 V H ( x , y , z ) = - 4 π n ( x , y , z ) ve n ( x , y , z ) =
İşte NumPy kullanan hesaplamayı yapan bir program.
from numpy import empty, pi, meshgrid, linspace, sum
from numpy.fft import fftn, fftfreq
E_exact = 128/(35*pi)
print "Hartree Energy (exact): %.15f" % E_exact
f = open("conv.txt", "w")
for N in range(3, 384, 10):
print "N =", N
L = 2.
x1d = linspace(0, L, N)
x, y, z = meshgrid(x1d, x1d, x1d)
nr = 3 * ((x-1)**2 + (y-1)**2 + (z-1)**2 - 1) / pi
ng = fftn(nr) / N**3
G1d = N * fftfreq(N) * 2*pi/L
kx, ky, kz = meshgrid(G1d, G1d, G1d)
G2 = kx**2+ky**2+kz**2
G2[0, 0, 0] = 1 # omit the G=0 term
tmp = 2*pi*abs(ng)**2 / G2
tmp[0, 0, 0] = 0 # omit the G=0 term
E = sum(tmp) * L**3
print "Hartree Energy (calculated): %.15f" % E
f.write("%d %.15f\n" % (N, E))
f.close()
Ve burada bir yakınsama grafiği (sadece komplo conv.txt
, yukarıdaki komut burada kendiniz oynamak istiyorsanız bunu yapan bir dizüstü bilgisayar):
Gördüğünüz gibi, yakınsama doğrusaldır, bu benim için bir sürpriz oldu, FFT'nin bundan daha hızlı birleştiğini düşündüm.
Güncelleme :
Çözümün sınırında bir tepe var (bunu daha önce fark etmedim). FFT'nin hızlı bir şekilde birleşmesi için, çözeltinin tüm türevleri pürüzsüz olması gerekir. Bu yüzden aşağıdaki sağ tarafı da denedim:
nr = 3*pi*sin(pi*x)*sin(pi*y)*sin(pi*z)/4
sınırsız bir şekilde ayırt edilebilir olmalıdır. Bu durumda tam integral. Yine de, FFT çözücü yukarıdaki komut dosyasını çalıştırarak ve yakınsama ( grafiklerle güncellenmiş not defteri ) çizilerek kontrol edilebileceği gibi, hala sadece tam olarak bu kesin çözüme doğru yakınsar .
Doğrusaldan daha hızlı yakınsama görebilmek için 3B'de herhangi bir kıyaslama yapan var mı?