用matlab编写一个高斯核密度函数

用matlab编写一个高斯核密度函数,第1张

1、你是怎样调用的?照理说,如果是正常的调用,例如

yanyan(15,1:10,1)

应该会出现Matrix must be square的提示,而不会是too many  input。

 

2、vectorize不是这样用的,它只能把一个char类型的表达式或sym、inline对象给替换成点运算,而对于一个double类型的数值,会强制转换为char类型,可能导致丢失精度(因为char的表示范围有限,即使在中文环境下,范围也只是0-65535,而且只能是整数)。

 

3、表达式写错了,把2h^2给放到指数函数外面了,也就是说

exp(-(x-y)^2)/(2z^2)

应为

exp(-(x-y)^2/(2z^2))

 

4、可以简单修改如下:

function c=yanyan(x,y,z)

n=length(y);

zz=sum(exp(-(x-y)^2/(2z^2)));

yux=nz(2pi)^05;

c=zz/yux;

但这样的写法不支持x为向量的情况,可以考虑改成

function c=yanyan(x,y,z)

n=length(y);

yux=nz(2pi)^05;

c=arrayfun(@(x)sum(exp(-(x-y)^2/(2z^2))),x)/yux;

KDE是个广泛应用的算法,从你提供的这些注释不能太清楚你程序应用的场景(图像处理还是?)所以不能很清晰的解释,但大概意义我可以猜测一下

point是一个NM的样值矩阵,N是维数M是每维的样值。因为具体意义不明,我用图像举例,Ndim就是RGB三色,Npoints就是对应RGB的一系列样值。

weights既然是[1Npoints],就是上述那一系列样值对应的权值矩阵

type就是核函数的种类,高斯还是拉普拉斯什么的

ksize说实话没看懂。。。不好意思

密度估计是用于估计随机变量概率密度函数的一种非参数方法,是一种用来观察 连续型变量分布 的有效方法

density(x, bw = "nrd0", adjust = 1,kernel = c("gaussian", "epanechnikov", "rectangular", "triangular", "biweight", "cosine", "optcosine"),weights = NULL, window = kernel, width,giveRkern = FALSE,n = 512, from, to, cut = 3, narm = FALSE, )

使用sm包中的smdensitycompare()函数可以想图形叠加两组或者更多的核密度图,使用格式为: smdensitycompare(x,factor) ,其中x为一个数值型变量,factor为一个分组变量

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12184739.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存