2015-11-05 4 views
0

Мне нужно рассчитать степень опасности, PDF/(1-CDF), функции Рэлея над x.Как правильно рассчитать уровень опасности в 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. Как повысить точность HR?

+0

Для тех, кто считает это неясным, что непонятно? Просто определение «смешно»? Я думаю, что это довольно ясно, что это числовая проблема. – horchler

+0

Описание «funny», конечно, не полезно, и чтобы выяснить, в каком смысле это «смешно», нужно запустить код Matlab (который сам по себе требует доступа к инструменту «Статистика» в дополнение к Matlab). Вы сокращаете, кто может и кто хочет выяснить, каков реальный вопрос из-за того, как это написано. Предполагается, что вопросы должны быть самодостаточными, чтобы избежать этого и предоставить значение архива. Как оказалось, этот вопрос не имеет ничего общего с Matlab, поэтому лучший письменный вопрос будет иметь потенциальную ценность для многих пользователей. – Brick

+0

@ Кирпич: Я вижу ваши точки. Это мой первый пост здесь. Я постараюсь быть более конкретным в следующий раз! – 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

Как вы можете видеть, есть вопросы немного, прежде чем х = 2, когда знаменатель равен примерно machine epsilon , eps. Это когда cdf('rayl',x,sqrt(1/18)) около 1.

К счастью, Matlab обеспечивает способ обойти это с опцией, которая вычисляет комплементарную 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 также поддерживает эту опцию.

Смежные вопросы