帮助理解一个明确的积分

时间:2010-09-04 21:14:46

标签: math matlab

我正在尝试使用MATLAB和C#将书中的函数转换为代码。

我首先尝试让函数在MATLAB中正常工作。

以下是说明:

alt text

变量是:

xt and m can be ignored.
zMax = Maximum Sensor Range (100)
zkt = Sensor Measurement (49)
zkt* = What sensor measurement should have been (50)
oHit = Std Deviation of my measurement (5)

我在MATLAB中编写了第一个公式N(zkt; zkt *,oHit):

hitProbabilty = (1/sqrt( 2*pi * (oHit^2) ))...
                * exp(-0.5 * (((zkt- zktStar) ^ 2) / (oHit^2))  );

这给了我期望的高斯曲线。

我在下面有一个定积分的问题,我不明白如何把它变成一个实数,因为我的代码得到了可怕的值,这就是:

func = @(x) hitProbabilty * zkt * x;
normaliser = quad(func, 0, max) ^ -1;  
hitProbabilty = normaliser * hitProbabilty;

有人可以帮我解决这个问题吗?它应该标准化我的曲线,但它只是变得疯狂....(我正在为zkt 0:1:100做这个,其他一切都相同,并绘制它应该输出的概率。)

3 个答案:

答案 0 :(得分:4)

您应该使用error function ERF(在基本MATLAB中提供)


<强> EDIT1:

@Jim Brissom所述,累积分布函数(CDF)与误差函数有关:

normcdf(X) = (1 + erf(X/sqrt(2)) / 2 ,   where X~N(0,1)

请注意,NORMCDF需要统计工具箱


<强> EDIT2:

我认为看到评论时出现了一些小小的混淆..上面只计算了归一化因子,所以如果你想计算某个值范围内的最终概率,你应该这样做:

zMax = 100;                         %# Maximum Sensor Range
zktStar = 50;                       %# What sensor measurement should have been
oHit = 5;                           %# Std Deviation of my measurement

%# p(0<z<zMax) = p(z<zMax) - p(z<0)
ncdf = diff( normcdf([0 zMax], zktStar, oHit) );
normaliser = 1 ./ ncdf;

zkt = linspace(0,zMax,500);         %# Sensor Measurement, 500 values in [0,zMax]
hitProbabilty = normpdf(zkt, zktStar, oHit) * normaliser;

plot(zkt, hitProbabilty)
xlabel('z^k_t'), ylabel('P_{hit}(z^k_t)'), title('Measurement Probability')

alt text

答案 1 :(得分:2)

代码中的N只是众所周知的高斯分布或正态分布。我之所以提到这一点,是因为你在Matlab中重新实现了它,看起来你错过了它,看看它是如何在Matlab中实现的。

对正态分布进行积分将产生累积分布函数,可在Matlab中通过normcdf进行正态分布。 ncdf可以用erf来编写,这可能是Amro所说的。

使用normcdf可以避免手动集成。

答案 2 :(得分:0)

如果你仍然需要积分的结果。

来自Mathematica。 Calc是

hitProbabilty[zkt_] := (1/Sqrt[2*Pi*oHit^2])*Exp[-0.5*(((zkt - zktStar)^2)/(oHit^2))];
Integrate[hitProbabilty[zkt], {zkt, 0, zMax}]; 

结果是(仅用于复制/粘贴)

((1.2533141373155001*oHit*zktStar*Erf[(0.7071067811865476*Sqrt[zktStar^2])/oHit])/
Sqrt[zktStar^2] + 
(1.2533141373155001*oHit*(zMax-zktStar)*Erf[(0.7071067811865476*Sqrt[(zMax-zktStar)^2])/oHit])/
   Sqrt[(zMax-zktStar)^2])/(2*oHit*Sqrt[2*Pi])

其中Erf []是错误函数

HTH!