matlab中提供了核平滑密度估计函数ksdensity(x):
[f, xi] = ksdensity(x)
返回矢量或两列矩阵x中的样本数据的概率密度估计f。 该估计基于高斯核函数,并且在等间隔的点xi处进行评估,覆盖x中的数据范围。
ksdensity估计单变量数据的100点密度,或双变量数据的900点密度。
ksdensity适用于连续分布的样本。
也可以指定评估点:
[
specifies points (f
,xi
] = ksdensity(x
,pts
)pts
) to evaluate f
. Here, xi
and pts
contain identical values。
核密度估计方法:
代码实现,对比:
clear all; clc; n=100; % 生成一些正态分布的随机数 x=normrnd(0,1,1,n); minx = min(x); maxx = max(x); dx = (maxx-minx)/n; x1 = minx:dx:maxx-dx; h=0.5; f=zeros(1,n); for j = 1:n for i=1:n f(j)=f(j)+exp(-(x1(j)-x(i))^2/2/h^2)/sqrt(2*pi); end f(j)=f(j)/n/h; end plot(x1,f); %用系统函数计算比较 [f2,x2] = ksdensity(x); hold on; plot(x2,f2,'r'); %红色为参考
参考: