蟒蛇。积分问题。 TypeError:仅大小为1的数组可以转换为Python标量

时间:2018-10-21 17:18:55

标签: python numpy scipy numeric

我试图找到一个积分函数数组,但形状和尺寸存在一些问题。我找到了系数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_rx_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

1 个答案:

答案 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数组。