代码之家  ›  专栏  ›  技术社区  ›  James

帮助理解定积分

  •  1
  • James  · 技术社区  · 14 年前

    我首先尝试让函数在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;
    

    3 回复  |  直到 14 年前
        1
  •  4
  •   Community CDub    7 年前

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


    编辑1:

    作为 @Jim Brissom

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

    请注意 NORMCDF 需要统计工具箱


    编辑2:

    我想看到这些评论有点困惑。。上面的公式只计算归一化因子,因此如果要计算某个值范围内的最终概率,应执行以下操作:

    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

        2
  •  2
  •   Jim Brissom    14 年前

    积分正态分布将产生一个累积分布函数,可在Matlab中通过 normcdf . ncdf可以用 erf ,这可能就是阿姆罗所说的。

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

        3
  •  0
  •   Dr. belisarius    14 年前

    来自Mathematica。计算结果是

    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])
    

    嗯!