我需要计算瑞利函数的危险率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
变得有趣。如何提高人力资源的准确性?
答案 0 :(得分:0)
您遇到了数字问题,特别是catastrophic cancellation。尝试在the complementary CDF图上仅绘制危险率函数的分母semilogy
:
x = 0:0.001:2.5;
semilogy(x,1-cdf('rayl',x,sqrt(1/18)))
正如您所看到的,当分母大约为machine epsilon,eps
时,在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
功能也支持此选项。