用matlab编写一个高斯核密度函数上面是高斯核密度函数的形式,h为窗宽,x1,x2,.xn是样本的点,用matlab编写的程序如下:function c=yanyan(x,y,z)n=length(y) zz=vectorize(sum(exp(-(x-y)^2)/(2*z^2)))yux=n*z*(2*pi)^0.5c=zz/
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/06 05:14:21
![用matlab编写一个高斯核密度函数上面是高斯核密度函数的形式,h为窗宽,x1,x2,.xn是样本的点,用matlab编写的程序如下:function c=yanyan(x,y,z)n=length(y) zz=vectorize(sum(exp(-(x-y)^2)/(2*z^2)))yux=n*z*(2*pi)^0.5c=zz/](/uploads/image/z/1157286-30-6.jpg?t=%E7%94%A8matlab%E7%BC%96%E5%86%99%E4%B8%80%E4%B8%AA%E9%AB%98%E6%96%AF%E6%A0%B8%E5%AF%86%E5%BA%A6%E5%87%BD%E6%95%B0%E4%B8%8A%E9%9D%A2%E6%98%AF%E9%AB%98%E6%96%AF%E6%A0%B8%E5%AF%86%E5%BA%A6%E5%87%BD%E6%95%B0%E7%9A%84%E5%BD%A2%E5%BC%8F%2Ch%E4%B8%BA%E7%AA%97%E5%AE%BD%2Cx1%2Cx2%2C.xn%E6%98%AF%E6%A0%B7%E6%9C%AC%E7%9A%84%E7%82%B9%2C%E7%94%A8matlab%E7%BC%96%E5%86%99%E7%9A%84%E7%A8%8B%E5%BA%8F%E5%A6%82%E4%B8%8B%EF%BC%9Afunction+c%3Dyanyan%28x%2Cy%2Cz%29n%3Dlength%28y%29+zz%3Dvectorize%28sum%28exp%28-%28x-y%29%5E2%29%2F%282%2Az%5E2%29%29%29yux%3Dn%2Az%2A%282%2Api%29%5E0.5c%3Dzz%2F)
用matlab编写一个高斯核密度函数上面是高斯核密度函数的形式,h为窗宽,x1,x2,.xn是样本的点,用matlab编写的程序如下:function c=yanyan(x,y,z)n=length(y) zz=vectorize(sum(exp(-(x-y)^2)/(2*z^2)))yux=n*z*(2*pi)^0.5c=zz/
用matlab编写一个高斯核密度函数
上面是高斯核密度函数的形式,h为窗宽,x1,x2,.xn是样本的点,用matlab编写的程序如下:
function c=yanyan(x,y,z)
n=length(y)
zz=vectorize(sum(exp(-(x-y)^2)/(2*z^2)))
yux=n*z*(2*pi)^0.5
c=zz/yux
end
x----未知数
y----x1,x2.xn这个向量
z-----窗宽
zz是指这些相加
yux是指
,但是matlab现实too many input,
用matlab编写一个高斯核密度函数上面是高斯核密度函数的形式,h为窗宽,x1,x2,.xn是样本的点,用matlab编写的程序如下:function c=yanyan(x,y,z)n=length(y) zz=vectorize(sum(exp(-(x-y)^2)/(2*z^2)))yux=n*z*(2*pi)^0.5c=zz/
1、你是怎样调用的?照理说,如果是正常的调用,例如
yanyan(1.5,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)/(2*z^2)
应为
exp(-(x-y)^2/(2*z^2))
4、可以简单修改如下:
function c=yanyan(x,y,z)
n=length(y);
zz=sum(exp(-(x-y).^2/(2*z^2)));
yux=n*z*(2*pi)^0.5;
c=zz/yux;
但这样的写法不支持x为向量的情况,可以考虑改成
function c=yanyan(x,y,z)
n=length(y);
yux=n*z*(2*pi)^0.5;
c=arrayfun(@(x)sum(exp(-(x-y).^2/(2*z^2))),x)/yux;