Посмотрите еще раз на строку документации для scipy.integrate.quad
. В частности, посмотрите на раздел «Возвраты». Вы увидите, что он возвращает несколько значений. Точнее, он возвращает кортеж значений. Фактическое число значений зависит от параметра full_output
, но оно всегда включает как минимум два значения, численно вычисленный интеграл и оценку ошибки.
В этом коде
return (nr/epsilon * 4*np.pi/3 * alpha * hnu *
(abs(R * np.sqrt(1/2**betai*gamma(betai + 1))*
np.sqrt(1/2**betaf*gamma(betaf + 1)) *
quad(func, 0, np.infty))**2 *
hbar * gamma_C/(Ef - Ei - hnu)**2 + ( hbar * gamma_C)**2))
вы используйте возвращаемое значение quad
, но это кортеж, поэтому он не будет работать правильно в этом выражении. Чтобы это исправить, просто вытащите первое значение кортежа, возвращенное quad
. То есть замените quad(func, 0, np.infty)
на quad(func, 0, np.infty)[0]
:
return (nr/epsilon * 4*np.pi/3 * alpha * hnu *
(abs(R * np.sqrt(1/2**betai*gamma(betai + 1))*
np.sqrt(1/2**betaf*gamma(betaf + 1)) *
quad(func, 0, np.infty)[0])**2 *
hbar * gamma_C/(Ef - Ei - hnu)**2 + ( hbar * gamma_C)**2))