我试图扩展我的wavefunction是QHO基础,需要在python中定义以下函数:
def basis(i,x):
if i == 0:
b=math.exp(-x**2/(2*hbar))/(hbar**(1/4)*math.pi**(1/4))
if i == 1:
b=math.sqrt(2)*x*math.exp(-x**2/(2*hbar))/(hbar**(3/4)*math.pi**(1/4))
if i == 2:
b=math.sqrt(2)*(4*x**2/hbar - 2)*math.exp(-x**2/(2*hbar))/(4*hbar**(1/4)*math.pi**(1/4))
if i == 3:
b= math.sqrt(3)*(8*x**3/hbar**(3/2) - 12*x/math.sqrt(hbar))\
*math.exp(-x**2/(2*hbar))/(12*hbar**(1/4)*math.pi**(1/4))
if i == 4:
b= math.sqrt(6)*(16*x**4/hbar**2 - 48*x**2/hbar + 12)*math.exp(-x**2/(2*hbar))/(48*hbar**(1/4)*math.pi**(1/4))
if i == 5:
b= math.sqrt(15)*(32*x**5/hbar**(5/2) - 160*x**3/hbar**(3/2) + 120*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(240*hbar**(1/4)*math.pi**(1/4))
if i == 6:
b= math.sqrt(5)*(64*x**6/hbar**3 - 480*x**4/hbar**2 + 720*x**2/hbar - 120)*math.exp(-x**2/(2*hbar))/(480*hbar**(1/4)*math.pi**(1/4))
if i == 7:
b= math.sqrt(70)*(128*x**7/hbar**(7/2) - 1344*x**5/hbar**(5/2) + 3360*x**3/hbar**(3/2) - 1680*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(6720*hbar**(1/4)*math.pi**(1/4
if i == 8:
b= math.sqrt(70)*(256*x**8/hbar**4 - 3584*x**6/hbar**3 + 13440*x**4/hbar**2 - 13440*x**2/hbar + 1680)*math.exp(-x**2/(2*hbar))/(26880*hbar**(1/4)*math.pi**(1/4))
if i == 9:
b= math.sqrt(35)*(512*x**9/hbar**(9/2) - 9216*x**7/hbar**(7/2) + 48384*x**5/hbar**(5/2) - 80640*x**3/hbar**(3/2) + 30240*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(80640*hbar**(1/4)*math.pi**(1/4))
if i == 10:
b= math.sqrt(7)*(1024*x**10/hbar**5 - 23040*x**8/hbar**4 + 161280*x**6/hbar**3 - 403200*x**4/hbar**2 + 302400*x**2/hbar - 30240)*math.exp(-x**2/(2*hbar))/(161280*hbar**(1/4)*math.pi**(1/4))
if i == 11:
b= math.sqrt(154)*(2048*x**11/hbar**(11/2) - 56320*x**9/hbar**(9/2) + 506880*x**7/hbar**(7/2) - 1774080*x**5/hbar**(5/2) + 2217600*x**3/hbar**(3/2) - 665280*x/math.sqrt(hbar))*math.exp(-x**2/(2*hbar))/(3548160*hbar**(1/4)*math.pi**(1/4))
return(b)
我发现我不能使用超过4次。我应该怎么做呢?
答案 0 :(得分:5)
if
的数量没有限制,但为了提高效率,您应该用elif
替换除dict
之外的所有内容。在这种情况下,作为khelwood pointed out,您的代码中的问题是拼写错误,而不是其他任何问题。
然而,这不是一种非常有效的方法;在Python中,switch
是其他语言case
/ FUNCS = {
0: lambda x: math.exp(-x**2/(2*hbar))/(hbar**(1/4)*math.pi**(1/4)),
1: lambda x: math.sqrt(2)*x*math.exp(-x**2/(2*hbar))/(hbar**(3/4)*math.pi**(1/4)),
...
}
def basis(i, x):
return FUNCS[i](x)
语句的规范替代品:
{{1}}