为什么scipy会为结果应为零的积分提供非零结果?

时间:2018-07-03 08:25:13

标签: python scipy integral

提供以下功能:

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

我使用nquad中的scipy在a,b和c的特定范围内集成了此功能:

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.5a = 2.0。八个点代表被“ a”,“ b”,“ c”和“ d”的边界所包围的“盒子” /区域。两个绘制函数都没有与此盒子区域相交。怎么会有一个不等于零的积分呢?

enter image description here

1 个答案:

答案 0 :(得分:3)

我认为您在误解3D多元积分测量的含义。不是域和曲线的交点的3d体积(这是2d多元积分所测量的),而是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})

代替您的答案。