The code I have uses monte carlo techniques to plot points where an electron would be found around a hydrogen atom but when it comes to plotting this the program can take upwards of a few hours to produce the graph I've been looking at ways to reduce this time and have tried using numba I don't know if I'm using it correctly but it hasn't made any difference
(我使用的代码使用蒙特卡洛技术绘制出在氢原子周围发现电子的点,但是当涉及到绘制该程序时,该程序可能要花费几个小时才能生成该图,我一直在研究如何减少该图这次并尝试使用numba,我不知道我是否正确使用它,但没有任何区别)
can someone please help me
(有人可以帮帮我吗)
from scipy.special import genlaguerre, sph_harm
from numpy import random, linspace, sqrt, pi, arccos, exp
from matplotlib.pyplot import plot, figure, show
from numba import jit
n = 2
l = 1
m = -1
Lx = 3*10**-9
Ly = Lx
a_0 = 5.29*10**-11
x = linspace(0,Lx, 100000)
fi = linspace(0,2*pi, 100000)
def fact(x):
if x == 0:
return 1
else:
return x*fact(x-1)
def row(r):
return (2*r)/(n*a_0)
def Hydrograd(r):
return -1*sqrt((2/(n*a_0))**3*(fact(n - l- 1))/(2*n*(fact(n+l))**3))*exp(-1*row(r)/2)*row(r)**l*genlaguerre(n-l-1, 2*l+1)(row(r))
def Hydrogsph(theta, phi):
return sph_harm(m,l,theta,phi).real
@jit
def HydroFunc(r,theta, phi):
return abs(Hydrograd(r))**2*abs(Hydrogsph(theta, phi))**2
def rFinder(x,y,z):
return sqrt(x**2 + y**2 + z**2)
def phiFinder(x,y,z):
return arccos(x/rFinder(x,y,z))
i = 0
p = 50
@jit
def monty(Lx,Ly,x,fi):
i = 0
p = 50
X = []
Y = []
while i < p:
xr = random.uniform(-Lx,Lx)
yr = random.uniform(-Ly,Ly)
if HydroFunc(rFinder(xr,yr,0),0,phiFinder(xr,yr,0))>random.uniform(0,max(HydroFunc(x,0,fi))/100):
X.append(xr)
Y.append(yr)
i += 1
print(i)
figure()
plot(X,Y,'.')
show()
monty(Lx,Ly,x,fi)
ask by Jack Weaver translate from so