如何在Matlab中准确计算出危险率?

时间:2015-11-05 16:02:35

标签: matlab statistics probability-density

我需要计算瑞利函数的危险率PDF /(1-CDF),超过x

x = 0:0.001:2.5;
HR = pdf('rayl',x,sqrt(1/18))./(1-cdf('rayl',x,sqrt(1/18)));
plot(x,HR)

这里的情节在大约x = 2变得有趣。如何提高人力资源的准确性?

1 个答案:

答案 0 :(得分:0)

您遇到了数字问题,特别是catastrophic cancellation。尝试在the complementary CDF图上仅绘制危险率函数的分母semilogy

x = 0:0.001:2.5;
semilogy(x,1-cdf('rayl',x,sqrt(1/18)))

Complementary Rayleigh CDF plot

正如您所看到的,当分母大约为machine epsiloneps时,在x = 2之前会有一些问题。这是cdf('rayl',x,sqrt(1/18))约为1的时间。

幸运的是,Matlab提供了一种方法,可以通过cdf'upper'选项直接计算CDF的补充CDF或尾概率:

x = 0:0.001:2.5;
HR = pdf('rayl',x,sqrt(1/18))./cdf('rayl',x,sqrt(1/18),'upper');
plot(x,HR)

现在返回一条斜率为18的直线,如预期的那样。 raylcdf功能也支持此选项。