球形贝塞尔函数导致 "invalid __array_struct__"
Spherical Bessel Functions causing "invalid __array_struct__"
我正在尝试计算散射问题中的微分截面(函数和角度以及“阶数”l)。
我想对不同的 l 值执行此操作并绘制横截面。
我认为贝塞尔函数的划分是问题,但我不知道如何解决。
有 solutions/tips 吗?
谢谢
这是我的代码:
import numpy as np
import scipy as sp
from scipy import special
def j_l(l,k):
sp.special.spherical_jn(l, k)
return np.ndarray
def j_l1(l,k):
sp.special.spherical_jn(l, k, True)
return np.ndarray
def n_l(l, k):
sp.special.spherical_yn(l, k)
return np.ndarray
def n_l1(l, k):
sp.special.spherical_yn(l, k, True)
return np.ndarray
def delta_l(k_1, k_2,r, l):
np.arctan(np.divide(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*j_l(l,k_2)-k_2*r*j_l1(l,k_2)),(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*n_l(l,k_2)-k_2*r*n_l1(l,k_2)))
def dcross(l,t,k_2,k_1):
(1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2
t=np.linspace(0, 10, 10000)
fig = plt.figure()
plt.plot(t,dcross(1,t,1,0.5))
fig.savefig('dcross.png')
plt.show() ```
我的物理学有点生疏,所以我无法检查公式,但有两个问题:delta_l(外部真实分界线)中的括号错误和正确的 returns贝塞尔函数及其导数:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from scipy import special
def j_l(l,k):
return sp.special.spherical_jn(l, k)
#return np.ndarray
def j_l1(l,k):
return sp.special.spherical_jn(l, k, True)
#return np.ndarray
def n_l(l, k):
return sp.special.spherical_yn(l, k)
#return np.ndarray
def n_l1(l, k):
return sp.special.spherical_yn(l, k, True)
#return np.ndarray
def delta_l(k_1, k_2,r, l):
return np.arctan(np.divide(k_1*np.divide(j_l1(l, k_1), j_l(l ,k_1))*j_l(l, k_2)-k_2*r*j_l1(l, k_2),
(k_1*np.divide(j_l1(l,k_1), j_l(l,k_1))*n_l(l, k_2)-k_2*r*n_l1(l, k_2))))
def dcross(l,t,k_2,k_1):
return (1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2
t=np.linspace(0, 10, 10000)
fig = plt.figure()
plt.plot(t,dcross(1,t,1,0.5))
#fig.savefig('dcross.png')
plt.show()
制作中(如果这是您要找的):
我正在尝试计算散射问题中的微分截面(函数和角度以及“阶数”l)。 我想对不同的 l 值执行此操作并绘制横截面。 我认为贝塞尔函数的划分是问题,但我不知道如何解决。 有 solutions/tips 吗? 谢谢
这是我的代码:
import numpy as np
import scipy as sp
from scipy import special
def j_l(l,k):
sp.special.spherical_jn(l, k)
return np.ndarray
def j_l1(l,k):
sp.special.spherical_jn(l, k, True)
return np.ndarray
def n_l(l, k):
sp.special.spherical_yn(l, k)
return np.ndarray
def n_l1(l, k):
sp.special.spherical_yn(l, k, True)
return np.ndarray
def delta_l(k_1, k_2,r, l):
np.arctan(np.divide(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*j_l(l,k_2)-k_2*r*j_l1(l,k_2)),(k_1*np.divide(j_l1(l,k_1),j_l(l,k_1))*n_l(l,k_2)-k_2*r*n_l1(l,k_2)))
def dcross(l,t,k_2,k_1):
(1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2
t=np.linspace(0, 10, 10000)
fig = plt.figure()
plt.plot(t,dcross(1,t,1,0.5))
fig.savefig('dcross.png')
plt.show() ```
我的物理学有点生疏,所以我无法检查公式,但有两个问题:delta_l(外部真实分界线)中的括号错误和正确的 returns贝塞尔函数及其导数:
import matplotlib.pyplot as plt
import numpy as np
import scipy as sp
from scipy import special
def j_l(l,k):
return sp.special.spherical_jn(l, k)
#return np.ndarray
def j_l1(l,k):
return sp.special.spherical_jn(l, k, True)
#return np.ndarray
def n_l(l, k):
return sp.special.spherical_yn(l, k)
#return np.ndarray
def n_l1(l, k):
return sp.special.spherical_yn(l, k, True)
#return np.ndarray
def delta_l(k_1, k_2,r, l):
return np.arctan(np.divide(k_1*np.divide(j_l1(l, k_1), j_l(l ,k_1))*j_l(l, k_2)-k_2*r*j_l1(l, k_2),
(k_1*np.divide(j_l1(l,k_1), j_l(l,k_1))*n_l(l, k_2)-k_2*r*n_l1(l, k_2))))
def dcross(l,t,k_2,k_1):
return (1/k_2*(2*l+1)*np.exp(delta_l(k_1,k_2,2,l))*np.sin(delta_l(k_1,k_2,2,l))*sp.special.lpmv(0, l, np.cos(t)))**2
t=np.linspace(0, 10, 10000)
fig = plt.figure()
plt.plot(t,dcross(1,t,1,0.5))
#fig.savefig('dcross.png')
plt.show()
制作中(如果这是您要找的):