Почему scipy предоставляет ненулевой результат для интеграла, где результат должен быть нулевым? - PullRequest
0 голосов
/ 03 июля 2018

С учетом следующей функции:

d = y-a*sin(b*x-c)

Я интегрирую эту функцию по определенным границам для a, b и c, используя nquad из scipy:

def Iper(x,y,alb,aub,blb,bub,clb,cub):
    return nquad(lambda a,b,c: y-a*np.sin(b*x-c), [[alb,aub],[blb,bub], [clb,cub]], full_output=True)

используя границы ниже:

print(Iper(5.0,3.0,
           1.5,2.0,
           4.3,4.5,
           7.5,8.0))

Я получаю следующий результат:

(0.09107123193614816, 1.2123921401960992e-14, {'neval': 9261})

Однако результат должен быть (насколько мне известно) нулевым. Построение результирующих значений d для данных границ дает область, которая ни в коем случае не пересекается функцией d. Ниже вы видите функцию d с осями b, c и d. Кривая зеленого и фиолетового цвета для значений a a = 1.5 и a = 2.0 Восемь точек представляют «прямоугольник» / область, охватываемую границами a, b, c и d ... ни одна из двух нарисованных функций не пересекается с этой областью прямоугольника. Как получилось, что у нас есть интеграл, который не равен нулю?

enter image description here

1 Ответ

0 голосов
/ 03 июля 2018

Я думаю, вы неправильно истолковываете, что измеряет трехмерный многомерный интегральный показатель. Это не трехмерный объем пересечения области и кривых (это то, что представляет собой 2-мерные многомерные интегральные меры), а 4-мерный гипервольм.


Рассматривая этот интегральный шаг за шагом, сначала интегрируем по a:

http://www.wolframalpha.com/input/?i=integrate+y-a*sin(b*x-c)+with+respect+to+a+between+1.5+and+2

Тогда b:

http://www.wolframalpha.com/input/?i=integrate+0.5+y+%2B+0.875+sin(c+-+b+x)+with+respect+to+b+between+4.3+and+4.5

Тогда c:

http://www.wolframalpha.com/input/?i=integrate+0.1+y+%2B+(0.875+(cos(c+-+4.5+x)+-+cos(c+-+4.3+x)))%2Fx+with+respect+to+c+between+7.5+and+8

Мы видим, что интеграл ненулевой для данных значений x и y.


Примечание: когда я оценил это, я получил:

(0.06749972471060735, 1.031215181499445e-14, {'neval': 9261})

вместо вашего ответа.

...