Я пытаюсь вычислить простой двойной определенный интеграл в Python: функция Max (0, (4-12x) + (6-12y)) в квадрате [0,1] x [0,1].
Мы можем сделать это с Mathematica и получить точный результат:
Integrate[Max[0, 4-12*u1 + 6-12*u2], {u1, 0, 1}, {u2, 0,1}] = 125/108.
С помощью простого моделирования Монте-Карло я могу подтвердить этот результат.Однако, используя scipy.integrate.dblquad
, я получаю значение 0,0005772072907971 с ошибкой 0,0000000000031299
from scipy.integrate import dblquad
def integ(u1, u2):
return max(0, (4 - 12*u1) + (6 - 12*u2))
sol_int, err = dblquad(integ, 0, 1, lambda _:0, lambda _:1, epsabs=1E-12, epsrel=1E-12)
print("dblquad: %0.16f. Error: %0.16f" % (sol_int, err) )
Согласна, что функция не выводима, но она непрерывна, и я не вижу причин, по которым этот конкретный интеграл может быть проблематичным.
Я подумал, что, возможно, dblquad
имеет аргумент 'options', в котором я могу попробовать разные численные методы, но я ничего подобного не нашел.
Итак, что я делаю не так?