Poisson Gl. durch Fouriertrafo mit Python lösen
Verfasst: Freitag 30. April 2021, 21:33
Hallo,
ich bin gerade dabei mir das lösen von Differentialgleichungen mit Python etwas näher zu bringen und wollte dafür die Poissongleichung mit Hilfe der diskreten Fourier-Transformation(DFT) lösen.
dazu verwende ich die DFT:
Wenn ich die DFT auf die PoissonGl anwende, dann komm ich auf das Ergebnis:
Jetzt habe ich also eine Ladungsverteilung erstellt. Zum Anfang eine einzelne Ladung in der Mitte meines Feldes. Danach wurde durch Numpy eine FFT auf das Array durchgeführt und ich habe alle Werte des Transformierten Arrays mit dem Faktor von Oben geteilt. Danach wurde die inverse FFT angewendet und sollte damit die Lösung für erhalten.
Das bekomme ich als Ergebnis raus:
Man erkennt eine nicht symmetrische Verteilung für , wobei die Lösung doch Gaußglockenförmig um der Position der Ladung sein sollte.
Hat Jemand eine Idee was ich falsch gemacht habe?
Das ist der Code den ich verwende:
Vielen Dank für eure Tipps und
viele Grüße
Stefan
ich bin gerade dabei mir das lösen von Differentialgleichungen mit Python etwas näher zu bringen und wollte dafür die Poissongleichung mit Hilfe der diskreten Fourier-Transformation(DFT) lösen.
dazu verwende ich die DFT:
Wenn ich die DFT auf die PoissonGl anwende, dann komm ich auf das Ergebnis:
Jetzt habe ich also eine Ladungsverteilung erstellt. Zum Anfang eine einzelne Ladung in der Mitte meines Feldes. Danach wurde durch Numpy eine FFT auf das Array durchgeführt und ich habe alle Werte des Transformierten Arrays mit dem Faktor von Oben geteilt. Danach wurde die inverse FFT angewendet und sollte damit die Lösung für erhalten.
Das bekomme ich als Ergebnis raus:
Man erkennt eine nicht symmetrische Verteilung für , wobei die Lösung doch Gaußglockenförmig um der Position der Ladung sein sollte.
Hat Jemand eine Idee was ich falsch gemacht habe?
Das ist der Code den ich verwende:
Code: Alles auswählen
import numpy as np
import matplotlib.pyplot as plt
length = 10
steps = 100
rho = np.zeros((steps,steps))
rho[steps//2-1:steps//2,steps//2-1:steps//2] = -1
plt.imshow(rho, origin='lower', interpolation='none')
plt.show()
rho_fft = np.fft.fft2(rho)
for x in range(len(rho_fft)):
for y in range(len(rho_fft)):
if x==0 and y==0: rho_fft[x,y]=0
else:
k_sqr = (2 * np.pi * x / length)**2 + (2 * np.pi * y / length)**2
rho_fft[x,y] = -rho_fft[x,y] / k_sqr
phi = np.fft.ifft2(rho_fft)
phi_abs = np.real(phi)
plt.imshow(phi_abs,extent=(0,length,0,length ))
plt.show()
Vielen Dank für eure Tipps und
viele Grüße
Stefan