Постройте кумулятивную функцию распределения в MATLAB

Я получаю странный график из моей функции cdf. Если я использую ecdf, я получаю ожидаемый график. Но я получаю запутанный беспорядок, который выглядит так, как будто он содержит правильные данные, но в каком-то неправильном порядке.

SNR = exprnd(1,1000,1); 
Cap = 1*log2(1+SNR); % unit bandwidth

[f,x] = ecdf(Cap);
figure(2);
plot( x,f);

cdf_Cap = cdf('Exponential', Cap, 1);
figure(3);
plot( Cap, cdf_Cap);

figure(4);
cdfplot(Cap);

На рисунке 2 показан ожидаемый результат: введите здесь описание изображения

и на рис. 3 показано: введите здесь описание изображения

Я уверен, что это правильные данные, и им просто требуется какая-то абсолютная функция или функция сортировки. Я просто понятия не имею, что это будет. Любая помощь приветствуется.


person Duck    schedule 20.07.2015    source источник
comment
Просто к вашему сведению, вам не обязательно сортировать его. Вы можете построить функцию без соединительных линий, таких как plot( Cap, cdf_Cap,'o'), хотя для cdf вы, вероятно, захотите отсортировать ее и соединить линии.   -  person Justin    schedule 20.07.2015


Ответы (1)


Похоже, Cap не увеличивается монотонно. Я думаю, вы могли бы разобраться с этим, прежде чем заговор.

На figure(3) замените это:

plot( Cap, cdf_Cap);

С этим:

[~, idx] = sort(Cap);
plot( Cap(idx), cdf_Cap(idx));

Теперь данные будут отображаться в правильном порядке.

person Rafael Monteiro    schedule 20.07.2015
comment
Спасибо! Это то, чего я ожидал. Привет =) - person Duck; 20.07.2015