matlab中提供了核平滑密度估计函数ksdensity(x):

[f, xi] = ksdensity(x)

返回矢量或两列矩阵x中的样本数据的概率密度估计f。 该估计基于高斯核函数,并且在等间隔的点xi处进行评估,覆盖x中的数据范围。

ksdensity估计单变量数据的100点密度,或双变量数据的900点密度。

ksdensity适用于连续分布的样本。

也可以指定评估点:

[f,xi] = ksdensity(x,pts) specifies points (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'); %红色为参考

参考:

https://ww2.mathworks.cn/help/stats/ksdensity.html

https://zhidao.baidu.com/question/176640010444765324.html

02-10 00:54