Python。积分问题。类型错误 : only size-1 arrays can be converted to Python scalars

标签 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: only size-1 arrays can be converted to Python scalars.in _quad return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit

最佳答案

您无法将数组发送到您的函数进行集成。四元函数期望该函数只有一个输出(就像您期望从数学函数获得一样)。但您可以迭代 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 数组。

关于Python。积分问题。类型错误 : only size-1 arrays can be converted to Python scalars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52917924/

相关文章:

python - 计算两个日期之间的年数,但以标准方式四舍五入

python - Python 表达式文档中的 "Slicing"

python - 返回分布的 z 值 - python

python - skimage.util 中的像素值缩放错误(Scipy 中字节缩放的替代方案)

python - 在单元测试中使用 doctests

python - KNeighborsClassifier 分数中出现奇怪的 ValueError

Python 查找数组中最常见的值

python - 为什么点积在 dask 中比在 numpy 中慢

python - 对给定列的 numpy 矩阵进行排序

python - 相当于在 Numpy 中使用 #include <Numeric/arrayobject.h>