Построить интегральную функцию распределения в 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 показано:

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

1 ответ

Решение

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

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

plot( Cap, cdf_Cap);

С этим:

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

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

Другие вопросы по тегам