Опцию weight='cauchy'
можно использовать для эффективного вычисления основного значения расходящихся интегралов, как этот.Это означает, что функция, предоставленная для quad
, будет неявно умножена на 1/(x-wvar)
, поэтому настройте эту функцию соответствующим образом (умножьте ее на x-wvar
, где wvar - точка сингулярности).
i1 = quad(lambda x: -1./(x+1), 0, 2, weight='cauchy', wvar=1)[0]
i2 = quad(lambda x: -1./(x-1), -2, 0, weight='cauchy', wvar=-1)[0]
result = i1 + i2
результат 1.0986122886681091
.
С помощью такой простой функции вы также можете выполнять символическую интеграцию с SymPy:
from sympy import symbols, integrate
x = symbols('x')
f = integrate(1/(1-x**2), x)
result = (f.subs(x, 2) - f.subs(x, -2)).evalf()
Результат: 1.09861228866811
.Без evalf()
это было бы log(3)
.