Ошибка с интеграцией SciPy: только массивы размера 1 могут быть преобразованы в скаляры Python - PullRequest
0 голосов
/ 21 марта 2019

У меня есть следующий простой код, где я использую интеграцию (включая функцию Бесселя) от SciPy.

import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
import scipy.special as sp
from scipy.special import jn


U = np.arange(0.0, 10.0, 0.1)
#U = np.linspace(0,10,100)


def intgl(U):
    #intgl = integrate.quad(lambda x: jn(1,x)/(x*(1.0+np.exp(U*x*0.5))), 0.1, 1000)
    intgl, err = integrate.quad(lambda x: sp.jv(1,x)/(x*(1.0+np.exp(U*x*0.5))), 0, 100)
    return intgl


Del = U - 4.0 + 8.0*intgl(U)



print ("U, Del=",U, Del)
plt.plot(U,Del)
plt.show()

Однако я вижу сообщение об ошибке:

Traceback (most recent call last):
  File "test.py", line 18, in <module>
    Del = U - 4.0 + 8.0*intgl(U)
  File "test.py", line 14, in intgl
    intgl, err = integrate.quad(lambda x: sp.jv(1,x)/(x*(1.0+np.exp(U*x*0.5))), 0, 100)
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadpack.py", line 341, in quad
    points)
  File "/usr/local/lib/python3.7/site-packages/scipy/integrate/quadpack.py", line 448, in _quad
    return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
TypeError: only size-1 arrays can be converted to Python scalars

Что может происходить и как это можно исправить? Надеюсь, я правильно вызываю функцию intgl

...