在Matlab中将密度(分布)拟合到直方图

时间:2016-11-07 19:23:01

标签: matlab distribution

我有一个矩阵M(mx2)。第一列是我的箱子,第二列是与每个箱子相关的频率。我想在matlab中为这个直方图拟合一条平滑的曲线,但我所尝试的大多数(如kdensity)需要真正的数据分布,我没有它们。

是否有任何功能可以采取垃圾箱及其频率,并给我一个平滑的bin-freq曲线。 ?

1 个答案:

答案 0 :(得分:0)

这是一个适合你的黑客攻击:从你的直方图中生成一个样本,然后在样本上运行ksdensity。

rng(42) % seed RNG to make reproducible

% make example histogram
N = 1e3;
bins = -5:5;
counts = round(rand(size(bins))*N);
M = [bins' counts'];

figure
hold on
bar(M(:,1), M(:,2));


% draw a sample from it
sampleCell = arrayfun( @(i) repmat(M(i,1), M(i,2), 1), 1:size(M,1), 'uniformoutput', false )';
sample = cat(1, sampleCell{:});
[f, x] = ksdensity(sample);
plot(x, f*sum(M(:,2)));