एफएफटी ज़हर सॉल्वर के लिए सैद्धांतिक अभिसरण दर क्या है?
मैं एक प्वासों समीकरण को हल कर रहा हूँ: के साथ n ( एक्स , वाई , जेड ) = 3
यहां NumPy का उपयोग करके एक प्रोग्राम है जो गणना करता है।
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()
और यहाँ एक अभिसरण ग्राफ है (बस conv.txt
उपरोक्त स्क्रिप्ट से प्लॉटिंग , यहाँ एक नोटबुक है जो यह करता है यदि आप अपने आप से खेलना चाहते हैं):
जैसा कि आप देख सकते हैं, अभिसरण रैखिक है, जो मेरे लिए आश्चर्य की बात थी, मैंने सोचा कि एफएफटी उससे कहीं अधिक तेजी से परिवर्तित होता है।
अपडेट :
समाधान सीमा पर एक पुच्छल है (मुझे इससे पहले इसका एहसास नहीं था)। एफएफटी के लिए तेजी से अभिसरण करने के लिए, समाधान में सभी डेरिवेटिव सुचारू होने चाहिए। तो मैंने भी निम्नलिखित दाहिने हाथ की कोशिश की:
nr = 3*pi*sin(pi*x)*sin(pi*y)*sin(pi*z)/4
क्या किसी को 3 डी में कोई बेंचमार्क पता है ताकि मैं रैखिक की तुलना में तेजी से अभिसरण देख सकूं?