MATLAB - 集成逼近的麻烦

时间:2015-02-14 14:06:09

标签: matlab

我已经接受过编码练习,以帮助我快速掌握MATLAB,但我在解决我需要的问题时遇到了一些问题。

我试图在给定的间隔(变量区间)上数值积分高斯概率函数。我试图通过使用梯形规则来做到这一点。我希望所有这些积分的总和接近于1,但是我在结果中得到的变小(例如,当我将变量bin设置为100时,达到0.5的值)。

我基本上做的是将x轴细分为" bins",并沿着箱内包含的点获取高斯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

现在,对于少量的二进制位(比如说10),近似得到很好的结果,并且r_s1和r_s2的元素之和都相对接近1(因为高斯PDF的积分应该是是1)。然而,当我开始增加我的箱子的大小时,这个总和的价值开始下降。考虑到所有事情,我预计它会保持在同一个值附近。

这是我在解决我所提出的问题的数学方法中的错误,还是我搞砸了我的代码?

1 个答案:

答案 0 :(得分:1)

您正在使用的bins不要对间隔[0, 19.9]进行分区。 查看变量t

t = 
         0    0.2000    0.4000    0.6000    ...
    0.1000    0.3000    0.5000    0.7000    ...

您看到第一个bin以0.1结束,但第二个bin仅在0.2处开始,所以在这种情况下,您只积累了超过一半的间隔,结果{{1} }。

更改代码最少的解决方案可能是添加

~0.5

t = [x(1), t(end,1:end-1); t]; 重塑一行之后。