【发布时间】: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