主要内容

平滑直方图

这个例子展示了如何使用曲线拟合工具箱中的样条命令来平滑直方图。

以下是一些随机值的直方图,这些值可能表示在某些测量中收集的数据。

Y = randn(1,5001);嘘(y);

图中包含一个轴对象。axis对象包含一个patch类型的对象。这个对象表示y。

我们想从这个直方图中推导出一个更平滑的近似于基本分布的方法。我们通过构造一个样条函数来做到这一点f它在每个横条区间上的平均值等于该横条的高度。

如果h这些条的高度是多少,它的左右边是多少l而且R,然后我们需要样条f为了满足

积分{f(x): L < x < R}/(R - L) = h

或者,与F不定积分f,也就是说,DF = f

F(R) - F(L) = h*(R - L)

[高度,中心]= hist(y);持有Ax = gca;斧子。XTickLabel = [];N =长度(中心);W = centers(2)-centers(1);T = linspace(centers(1)-w/2,centers(end)+w/2,n+1);P = fix(n/2);填充(t([p p+1 p+1]),[0 height ([p p]),0],' w ') plot(centers([p p]),[0 heights(p)],“:”) h = text(中心(p)- 2,高度(p)/2,“h”);Dep = -70;tL = text(t(p),dep,“L”);tR = text(t(p+1),dep,“R”);持有

图中包含一个轴对象。axis对象包含patch、line、text类型的6个对象。这个对象表示y。

所以,与n格数,t(我)的左边缘th酒吧,dt(我)宽度,和h(我)我们要求它的高度

F(t(i+1)) - F(t(i)) = h(i) * dt(i)对于i = 1:n

或者任意设置F (t (1))= 0,

F (t (i)) ={总和h (j) * dt (j): j = 1:张},我= 1:n + 1

Dt = diff(t);Fvals = cumsum([0,height .*dt]);

再加上两个结束条件DF(t(1)) = 0 = DF(t(n+1)),我们已经有了所有需要的数据F作为完全三次样条插值。

F =样条(t, [0, Fvals, 0]);

第二个参数中的两个额外的零值表示零端斜率条件。

最后,导数,f = DF的样条F是直方图的平滑版本。

DF = fnder(F);%计算一阶导数h.String =“h (i)”;tL.String =“t (i)”;tR.String =“t (i + 1)”;持有fnplt (DF,“r”2) holdylim = ylim;ylim ([0, ylims (2)));

图中包含一个轴对象。axis对象包含patch、line、text类型的7个对象。这个对象表示y。