Начиная с 2014b, Matlab имеет эти подпрограммы нормализации, встроенные в функцию histogram
(см. Справочный файл для 6 подпрограмм, предлагаемых этой функцией). Вот пример использования нормализации PDF (сумма всех бинов равна 1).
data = 2*randn(5000,1) + 5; % generate normal random (m=5, std=2)
h = histogram(data,'Normalization','pdf') % PDF normalization
Соответствующий PDF -
Nbins = h.NumBins;
edges = h.BinEdges;
x = zeros(1,Nbins);
for counter=1:Nbins
midPointShift = abs(edges(counter)-edges(counter+1))/2;
x(counter) = edges(counter)+midPointShift;
end
mu = mean(data);
sigma = std(data);
f = exp(-(x-mu).^2./(2*sigma^2))./(sigma*sqrt(2*pi));
Два вместе дают
hold on;
plot(x,f,'LineWidth',1.5)
Улучшение, которое вполне может быть связано с успехом самого вопроса и принятого ответа!
РЕДАКТИРОВАТЬ - Использование hist
и histc
сейчас не рекомендуется , и вместо него следует использовать histogram
. Помните, что ни один из 6 способов создания ячеек с помощью этой новой функции не приведет к получению ячеек hist
и histc
. Существует скрипт Matlab для обновления прежнего кода, чтобы он соответствовал способу вызова histogram
(края бинов вместо центров бинов - ссылка ). Таким образом можно сравнить pdf
методы нормализации @abcd (trapz
и sum
) и Matlab (pdf
).
Метод нормализации 3 pdf
дает почти идентичные результаты (в диапазоне eps
) .
TEST:
A = randn(10000,1);
centers = -6:0.5:6;
d = diff(centers)/2;
edges = [centers(1)-d(1), centers(1:end-1)+d, centers(end)+d(end)];
edges(2:end) = edges(2:end)+eps(edges(2:end));
figure;
subplot(2,2,1);
hist(A,centers);
title('HIST not normalized');
subplot(2,2,2);
h = histogram(A,edges);
title('HISTOGRAM not normalized');
subplot(2,2,3)
[counts, centers] = hist(A,centers); %get the count with hist
bar(centers,counts/trapz(centers,counts))
title('HIST with PDF normalization');
subplot(2,2,4)
h = histogram(A,edges,'Normalization','pdf')
title('HISTOGRAM with PDF normalization');
dx = diff(centers(1:2))
normalization_difference_trapz = abs(counts/trapz(centers,counts) - h.Values);
normalization_difference_sum = abs(counts/sum(counts*dx) - h.Values);
max(normalization_difference_trapz)
max(normalization_difference_sum)
Максимальная разница между новой нормализацией PDF и предыдущей составляет 5,5511e-17.