【发布时间】:2015-04-15 11:40:43
【问题描述】:
我接受了一个编码练习,以帮助我快速掌握 MATLAB,但我在获取所需内容时遇到了一些问题。
我正在尝试对给定间隔(可变箱)上的高斯概率函数进行数值积分。我试图通过使用梯形规则来做到这一点。我希望所有这些积分的总和接近 1,但是我得到的结果越来越小(例如,当我将变量 bin 设置为 100 时达到 0.5 的值)。
我实际上所做的是将 x 轴细分为“箱”,并沿箱中包含的点对高斯 PDF 进行积分。例如,假设我的 x 轴从 0 到 19.9,递增 0.1,所以我有 200 个“点”。现在,假设我想要十个垃圾箱。然后,每个 bin 将包含 20 个点,我需要在每个 bin 中的每个点之间进行积分逼近。
现在,到目前为止,我遇到了以下情况;
clear
%Sets location of the Gaussian PDF
s_1 = 5;
s_2 = 15;
%Sets the domain of the x-axis
x = [0:0.1:19.9];
%Sets the number of bins, and the size of each bin
b = 100;
points = numel(x);
binsize = (points)/b;
%Arranges all of the prescribed x-values into their necessary bins
t = reshape(x,binsize,b);
%Calculates p(r_n|s_n)
for i = 1:b
r_s1(i) = trapz(t(:,i),normpdf(t(:,i),s_1));
r_s2(i) = trapz(t(:,i),normpdf(t(:,i),s_2));
end
现在,对于少数 bin(例如 10 个),近似值非常好,并且 r_s1 和 r_s2 的元素之和都相对接近 1(因为高斯 PDF 的积分应该为 1)。然而,当我开始增加我的垃圾箱的大小时,这个总和的值开始下降。考虑到所有因素,我预计它会保持在相同的值附近。
这是我对我提出的问题的数学方法中的错误,还是我搞砸了我的代码?
【问题讨论】:
-
您确定不想使用正态累积分布函数normcdf?另外:您并没有真正指定您实际要解决的问题(数学)。
-
我真的不知道你的实际问题是什么,但关于为什么值会变小:与梯形规则积分你很可能会高估积分,因为你积分大多是函数的凸部分。因此,更精细的集成将提供更准确的结果。如果您不进行从
-Inf到Inf的集成,您显然不应该真正到达1,因为GPDF 的支持是无限的。所以基本上你的集成规则是高估的,并且会随着更精细的 bin 变得更准确。 -
我想我的问题实际上是在问我做错了什么,从某种意义上说。输入 bin 大小为 10 的代码给我一个大约 0.9 的值。但是,如果将 bin 大小增加到 100,我会得到一个更接近 0.5 的值。我的印象是,bin 的增加会导致近似精度的提高,或者至少不会太显着地改变它。我觉得我写的东西有一个错误,使估计下降了这么多。
-
0.5是哪个值?要问:我做错了什么,你必须先说明你的目标是什么。我在你的问题中找不到。 -
r_s1 数组所有元素的总和。 r_s2 也一样。
标签: matlab