อัตราการรวมทางทฤษฎีสำหรับตัวแก้พิษแบบ FFT คืออะไร?
ฉันกำลังแก้สมการปัวซอง: กับ n ( x , y , z ) = 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จากสคริปต์ด้านบนนี่คือโน้ตบุ๊กที่ทำถ้าคุณต้องการเล่นด้วยตัวคุณเอง):

อย่างที่คุณเห็นการบรรจบกันนั้นเป็นเส้นตรงซึ่งทำให้ฉันประหลาดใจฉันคิดว่า FFT ลู่เข้าหาได้เร็วกว่านั้นมาก
อัปเดต :
วิธีแก้ปัญหามีจุดที่ขอบเขต (ฉันไม่ได้ตระหนักถึงสิ่งนี้มาก่อน) เพื่อให้ FFT เข้าหากันอย่างรวดเร็วการแก้ปัญหาจะต้องมีอนุพันธ์ที่ราบรื่นทั้งหมด ดังนั้นฉันจึงลองด้านขวาดังต่อไปนี้:
nr = 3*pi*sin(pi*x)*sin(pi*y)*sin(pi*z)/4
มีใครรู้บ้างว่ามีมาตรฐานในแบบ 3 มิติเพื่อที่ฉันจะได้เห็นการลู่เข้าที่รวดเร็วกว่าเชิงเส้น
 
