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为一个分组变量
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)