我试图找到一个积分函数数组,但形状和尺寸存在一些问题。我找到了系数k,然后找到了x =(0,a)间隔的能量,其中a = 1且n =(-Nmax,Nmax)。我也在尝试矢量化它们。但是每次它给我新的错误。我不确定如何解决此问题,因为我需要此集成函数来调用另一个函数来绘制图形。
def k_n(n):
k = fsolve(lambda n : np.tan(n*a/2.) - np.tanh(n*a/2.),n)
return(k)
def E(n):
return(np.piecewise(n,[n<0.,n>=0.],
[lambda n: -k_n(n)**2 ,
lambda n: k_n(n)**2 ]))
def integrand1(x,n):
return(np.sin(k_n(n)*x)**2)
def integrand2(x,n):
return((np.sin(k_n(n)*a/2.))**2*(np.sinh(k_n(n)*(a-x)))**2/2*
np.exp(-a*k_n(n))*(np.sinh(k_n(n)*a/2.))**2)
def integrate(n):
integrand = spi.integrate.quad(integrand1,0,a/2,args=(n))+spi.integrate.quad(integrand2,a/2,a,args=(n))
one = np.true_divide(1, integrand )
return(one)
也许是n_r
和x_r
的问题
n_r = np.arange(-Nmax, Nmax,1)
x_r = np.arange(0,a,.1)
print(k_n(n_r))
print(E(n_r))
print(integrate(n_r))`
TypeError:只能将大小为1的数组转换为Python标量。 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit
答案 0 :(得分:1)
您无法将数组发送到函数进行集成。 Quad函数期望仅从该函数获得一个输出(就像您期望的数学函数一样)。但是您可以遍历n_r数组:
n_r = np.arange(-Nmax, Nmax,1)
x_r = np.arange(0,a,.1)
print(k_n(n_r))
print(E(n_r))
print(np.array([integrate(n) for n in n_r]))
结果是一个二维的numpy数组。