Math 帮助理解确定积分

Math 帮助理解确定积分,math,matlab,Math,Matlab,我正试图用MATLAB和C#将书中的函数翻译成代码 我首先尝试让函数在MATLAB中正常工作 以下是说明: 变量包括: 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) 我在M

我正试图用MATLAB和C#将书中的函数翻译成代码

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

以下是说明:

变量包括:

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进行此操作,其他所有操作都相同,并绘制它应该输出的概率。)

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


EDIT1:

如上所述,累积分布函数(CDF)通过以下方式与误差函数相关:

normcdf(X) = (1 + erf(X/sqrt(2)) / 2 ,   where X~N(0,1)
注意,这需要统计工具箱


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')
zMax=100;%#最大传感器范围
zktStar=50%#传感器测量值应该是什么
oHit=5;%#我测量的标准偏差
%#p(0您应该使用(在基本MATLAB中提供)


EDIT1:

如上所述,累积分布函数(CDF)通过以下方式与误差函数相关:

normcdf(X) = (1 + erf(X/sqrt(2)) / 2 ,   where X~N(0,1)
注意,这需要统计工具箱


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')
zMax=100;%#最大传感器范围
zktStar=50;%#传感器测量值应为多少
oHit=5;%#我的测量标准偏差

%#p(0代码中的N就是众所周知的高斯分布或正态分布。我之所以提到这一点,是因为您在Matlab中重新实现了它,似乎您忽略了这一点,因为它显然已经在Matlab中实现了

积分正态分布将产生一个累积分布函数,可在Matlab中通过
normcdf
获得正态分布。ncdf可以用
erf
编写,这可能就是Amro所说的


使用normcdf可以避免手动积分。

代码中的N就是众所周知的高斯分布或正态分布。我之所以提到这一点,是因为您在Matlab中实现了它,似乎忽略了这一点,因为它显然已经在Matlab中实现了

积分正态分布将产生一个累积分布函数,可在Matlab中通过
normcdf
获得正态分布。ncdf可以用
erf
编写,这可能就是Amro所说的


使用normcdf可避免手动积分。

以防您仍然需要积分结果

来自Mathematica.计算是

hitProbabilty[zkt_] := (1/Sqrt[2*Pi*oHit^2])*Exp[-0.5*(((zkt - zktStar)^2)/(oHit^2))];
Integrate[hitProbabilty[zkt], {zkt, 0, zMax}]; 
结果是(仅用于复制/粘贴)

其中Erf[]是错误函数


HTH!

如果您仍然需要积分的结果

来自Mathematica.计算是

hitProbabilty[zkt_] := (1/Sqrt[2*Pi*oHit^2])*Exp[-0.5*(((zkt - zktStar)^2)/(oHit^2))];
Integrate[hitProbabilty[zkt], {zkt, 0, zMax}]; 
结果是(仅用于复制/粘贴)

其中Erf[]是错误函数


HTH!

对不起,我应该用错误函数替换我的代码的哪一部分?你的意思是不是不计算normaliser?我应该等到我计算了所有命中概率之后,再对该数组执行ERF吗?然后我用ERF的输出乘以原始数组?n=1。/(normcdf((zMax zktStar)/oHit)-0.5)总是给我2的值,对于所有的值,0~100?Erf()总是给我2?不是真的,试试:<代码>图(1)/(NoMCDCDF((0:ZMAX-ZKTSTAR)/OHIT)-0.5),你会看到一个曲线(<代码> INF中间,因为我们除以零!)它给了我一个非常奇怪的图,就像一个上边的L,但是水平和垂直镜像。对不起,但是我应该用错误函数替换我的代码的哪一部分?你的意思是不是要代替计算normaliser?我应该等到我计算完所有命中概率之后,再对该数组进行ERF吗?然后我是不是要用out乘以原始数组Erf?n=1。/(OnMyCDF((ZMAX ZKTSTAR)/OHIT)-0.5);总是给我2的值,对于所有的值,0~100?Erf()总是给我2?不是真的,试试:<代码>图(1)/(NoMCDCDF((0:ZMAX)-ZKTSTAR)/OHIT)-<代码>,你会看到一个曲线(<代码> INF中间,因为我们在除以0!)它给了我一个非常奇怪的图形,像一个上边的L,但是水平和垂直镜像。我看到了,所以在我的100个值的循环中,我应该在数组上使用,这给了我另一个数组。文章将法线乘以值,我应该这样做,还是函数为我这样做?--你的意思是我可以重新编写我的高斯函数吗还有什么?我该怎么做呢?我不是真正的数学方向的人,只是出于必要才被迫这么做,请原谅我的无知。你不需要实现正态分布,至少在Matlab中是这样。不过,你必须在C#中这样做(除非你使用库,但这是另一回事).至于标准化:累积分布函数f(x)表示随机变量位于区间内的概率(-inf,x),这基本上与随机变量小于或等于x的说法相同。normalcdf已经包括积分部分,但不包括负一部分的幂。这部分可能指的是百分比点函数,它只是inver