Имеет проблему здесь. Вот мой код:Использование nquad для двойного интеграла
from scipy import integrate
import math
import numpy as np
a = 0.250
s02 = 214.0
a_s = 0.0163
def integrand(r, R, s02, a_s, a):
return 2.0 * r * (r/a)**(-0.1) * (1.0 + (r**2/a**2))**(-2.45)\\
*(math.sqrt(r**2 - R**2))**(-1.0) * (a_s/(1 + (R-0.0283)**2/a_s**2))
def bounds_R(s02, a_s, a):
return [0, np.inf]
def bounds_r(R, s02, a_s, a):
return [R, np.inf]
result = integrate.nquad(integrand, [bounds_r(R, s02, a_s, a), bounds_R(s02, a_s, a)])
a, s02 и a_s являются константами. Мне нужно выполнить первый интеграл по r, а затем второй интеграл над R. Задача, на мой взгляд, состоит в том, что R появляется в пределах первого интеграла (что называется преобразованием Абеля). Пробовал несколько вещей и каждый раз получал ошибку, что в граничных функциях слишком мало аргументов или слишком мало.
Пожалуйста, помогите!
Мне нужно вычислить преобразование Абеля, вы можете просто использовать один из уже реализованных алгоритмов в https://github.com/PyAbel/PyAbel, который будет более эффективен с точки зрения вычислительной эффективности, чем использование 'quad'. – rth