【问题标题】:Strange behaviour in integral function in MATLABMATLAB中积分函数的奇怪行为
【发布时间】:2015-12-10 13:46:25
【问题描述】:

我创建了两个函数 fx 和 fy 如下:

fx = @(x) ncx2pdf(x, 10, 1);
fy = @(y) ncx2pdf(y + 25, 10, 10);

然后,我定义fs函数如下:

shift = 0
fs = @(s) fx(s) .* fy(shift - s)

请注意,fs 始终为正(两个概率密度函数的乘积)。如果我计算:

integral(fs, -Inf, 100)

我得到真值0.0413,但是如果我计算

integral(fs, -Inf, 1000)

我得到 0。为什么使用积分函数会发生这种奇怪的行为?请注意,如果我计算

integral(fs, -Inf, Inf) 

我得到真值0.0413。

【问题讨论】:

  • “为什么”确实是个好问题!但作为第一个解决方法,您可以考虑trapz:例如trapz(fs(-1000:1000))
  • 我相信错误(返回 0)来自试图表示小于 double 能够保持的值。根据 Matlab 文档,最小值约为 Xe-308。在我得到的只是 0 之前,我能够生产 1.9e-323。
  • @Matt 可能是在正确的轨道上。您必须小心具有小值的函数的数值积分。我也在其他语言中看到了这一点。所以为了验证,计算数值积分函数的一个“切片”的值,看看它的值是多少。
  • 你能告诉我们关于ncx2pdf的什么?
  • @transversalitycondition 它在统计工具箱中 radio.feld.cvut.cz/matlab/toolbox/stats/ncx2pdf.html 。向 MathWorks 说“谢谢”,因为它收取了国王的赎金以获得额外的功能。

标签: matlab integration


【解决方案1】:

“数值求积通过迭代地将区间分开并近似每个分区的积分来工作。近似是通过离散子区间并使用某种形式的积分近似(黎曼和等)来完成的。由于存在一些离散化,因此会有一些误差,这取决于分区,因此我们最好将积分限制保持在对积分贡献最大的点附近。”,Brendan Hamm

参考:http://www.mathworks.com/matlabcentral/answers/242910-strange-behaviour-in-integral-function-in-matlab#answer_192302

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    相关资源
    最近更新 更多