【问题标题】:Why does scipy provide a nonzero result for the integral where the result should be zero?为什么 scipy 为结果应该为零的积分提供非零结果?
【发布时间】:2018-07-03 18:22:37
【问题描述】:

给定以下函数:

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

我使用来自scipynquad 将这个函数集成到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 的边界所包围的“盒子”/区域……两个绘制的函数都没有与该盒子区域相交。为什么我们这里有一个不等于零的积分?

【问题讨论】:

    标签: python scipy integral


    【解决方案1】:

    我认为您误解了 3 维多元积分的测量值。它不是域和曲线相交的 3d 体积(这是 2d 多元积分测量的),而是 4 维超体积。


    一步步看这个积分,先积分相对于a

    然后b:

    然后c:

    对于给定的 x 和 y 值,我们看到积分不为零。


    注意:当我评估这个时,我得到:

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

    而不是你的答案。

    【讨论】:

    • 啊,因为我们有一个四维空间 (a,b,c,d),a 维通过两个图表示,我在这个表示中错过了一个事实,即- 存在我无法在此表示中掌握的超体积。在这种情况下,问题出现了:如何在低维投影中可视化超体积以“直观地”查看 4d 超体积是否与曲线相交?
    • @Daniyal 很难,我认为这是这里唯一的答案。不幸的是,我不知道任何技巧来获得像这样可视化 4 维空间的直觉。您可以逐步进行积分,以了解为什么(数学上)它会导致非零项。
    • 感谢您的详细回复。关于结果:你是对的,我得到了一行到下一个测试用例。你的计算值是正确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多