Я пытаюсь вычислить два интеграла, используя scipy.integrate.quad.
Однако, поскольку гамма функции с отрицательным первым параметром не определены в scipy
, мне пришлось выбрать версию из mpmath
. После запуска следующего кода
from scipy.integrate import *
from mpmath import *
low, up = 5.630e5, 1.167e12
alpha, threshold = 1.05 , 2.15e10
beta = 274
def g(x, beta, low, up):
return gamma(-2/3) * (gammainc(-2/3, beta*(x/low)**3) - gammainc(-2/3, beta*(x/up)**3))
def Integrand1(x, low, threshold, alpha):
return pow(x/threshold, alpha) * g
def Integrand2(x, up, threshold):
return g
Integral1 = quad(Integrand1, low, threshold, args=(low, up, threshold, alpha, beta))
Integral2 = quad(Integrand2, threshold, up, args=(low, up, threshold, beta))
print(Integral1)
print(Integral2)
Вот сообщение об ошибке, с которым я не знаю, как справиться, и мне нужна помощь:
Трассировка (последний последний вызов): файл "test.py", строка 19, в Integral1 = quad(Integrand1, low, threshold, args=(low, up, threshold, alpha, beta)) File "/home/username/ anaconda3/lib/python3.6/site-packages/mpmath/calculus/quadrature.py", строка 748, в quad points[0], prec, epsilon, m, verbose) File "/home/username/anaconda3/lib/ python3.6/site-packages/mpmath/calculus/quadrature.py", строка 215, в сумме для i в xrange(len(points)-1): TypeError: объект типа 'float' не имеет len()
Я могу только догадываться, что причина может быть в том, что quad
функция несовместима с интегралами, определенными с помощью mpmath.