2015-11-05 93 views
0

我需要通过x计算瑞利函数的危险率PDF /(1-CDF)。如何在Matlab中准确计算危险率?

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

对于标记不清楚的人,有什么不清楚的地方?只是“有趣”的定义?我认为这很明显,这是一个数字问题。 – horchler

+0

“有趣”的描述当然没有什么帮助,并且要弄清楚它的“有趣”需要运行Matlab代码(除了Matlab之外,本身还需要访问统计工具箱)。你正在削减谁能和谁愿意弄清楚真正的问题是什么,因为这是写的方式。问题应该是独立的,以避免这种情况并提供存档价值。事实证明,这个问题与Matlab无关,所以一个更好的书面问题对许多用户都有潜在的价值。 – Brick

+0

@ Brick:我明白你的观点。这是我在此的头一篇博文。我会尽量在下次更具体! – Matt

回答

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

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

幸运的是,MATLAB提供解决的办法与CDF的计算互补CDF选项或尾概率,经由'upper'选项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函数也支持这个选项。