【问题标题】:MATLAB - Trouble with an integration approximationMATLAB - 积分近似的问题
【发布时间】: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?另外:您并没有真正指定您实际要解决的问题(数学)。
  • 我真的不知道你的实际问题是什么,但关于为什么值会变小:与梯形规则积分你很可能会高估积分,因为你积分大多是函数的凸部分。因此,更精细的集成将提供更准确的结果。如果您不进行从-InfInf 的集成,您显然不应该真正到达1,因为GPDF 的支持是无限的。所以基本上你的集成规则是高估的,并且会随着更精细的 bin 变得更准确。
  • 我想我的问题实际上是在问我做错了什么,从某种意义上说。输入 bin 大小为 10 的代码给我一个大约 0.9 的值。但是,如果将 bin 大小增加到 100,我会得到一个更接近 0.5 的值。我的印象是,bin 的增加会导致近似精度的提高,或者至少不会太显着地改变它。我觉得我写的东西有一个错误,使估计下降了这么多。
  • 0.5 是哪个值?要问:我做错了什么,你必须先说明你的目标是什么。我在你的问题中找不到。
  • r_s1 数组所有元素的总和。 r_s2 也一样。

标签: matlab


【解决方案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 开始,因此在这种情况下,您只对超过一半的区间进行积分,因此结果为 ~0.5

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

t = [x(1), t(end,1:end-1); t];

在你的t = reshape(x,binsize,b); 重塑线之后。

【讨论】:

  • 你知道我可以用什么方法来划分集合以包括间隔内的所有间隙吗?我是否只需设置一些内容,将一列中的最后一个值和前一列中的第一个值??
  • @Jack:我为您的问题添加了一个快速解决方案,但我想您会更好,如果您通过两个值 bin(i,:) = [0, 0.1] 表示垃圾箱,然后改用 linspace(bin(i,1), bin(i,2), numberOfPointsYouWant)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多