53 lines
1.3 KiB
Matlab
53 lines
1.3 KiB
Matlab
|
% Compute the pdf, cdf and rank distributions for a sequence of numbers.
|
||
|
%
|
||
|
% INPUTS: sequence of values: x, (1xn), 'plt' - 'on' or 'off'
|
||
|
% bin - bin size, default is [], then it gets selected
|
||
|
% automatically
|
||
|
% OUTPUTS: pdf, cdf and rank distribution values, plot is optional
|
||
|
%
|
||
|
% Note: pdf = frequency distribution, cdf = cumulative frequency,
|
||
|
% rank = log-log scale of the sorted sequence
|
||
|
% GB: last updated, November 24 2012
|
||
|
|
||
|
function [xpdf,ypdf,xcdf,ycdf,logk,logx]=pdfCdfRank(x,plt='off',bin=[])
|
||
|
|
||
|
xx=unique(x);
|
||
|
|
||
|
if length(bin)==0; bin = length(xx)/5; end
|
||
|
|
||
|
|
||
|
for ii=1:numel(xx)
|
||
|
xcdf(ii) = xx(ii);
|
||
|
ycdf(ii) = length(find(x<=xx(ii)))/numel(x);
|
||
|
|
||
|
% how many x's fall in the interval [xx(ii)-0.5*numel(xx)/bin,xx(ii)+0.5*numel(xx)/bin]
|
||
|
xpdf(ii) = xx(ii);
|
||
|
ypdf(ii) = length(find(abs(xx(ii)-x)<=0.5*numel(xx)/bin))/numel(x);
|
||
|
end
|
||
|
|
||
|
x=-sort(-x);
|
||
|
logk=log(1:length(x));
|
||
|
logx=log(x);
|
||
|
|
||
|
if strcmp(plt,'on')
|
||
|
set(gcf,'color',[1,1,1])
|
||
|
|
||
|
subplot(2,2,1)
|
||
|
hist(x,bin,'facecolor',[0.5 0.5 0.5])
|
||
|
title('histogram')
|
||
|
|
||
|
subplot(2,2,3)
|
||
|
plot(xpdf,ypdf,'k.')
|
||
|
title('pdf')
|
||
|
axis('tight')
|
||
|
|
||
|
subplot(2,2,2)
|
||
|
plot(xcdf,ycdf,'k.')
|
||
|
title('cdf')
|
||
|
axis('tight')
|
||
|
|
||
|
subplot(2,2,4)
|
||
|
plot(logk,logx,'k.')
|
||
|
title('rank')
|
||
|
axis('tight')
|
||
|
end
|