matlab求峭度,用公式和自己编写的代码分别求,结果不一样
(1)用公式:x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,...
(1)用公式:
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32];
y=kurtosis(x)
结果:
y =
1.7977
(2)用代码:(按matlab的公式写的)
x=[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32];
a=mean(x);
b=(x-a).*(x-a).*(x-a).*(x-a);
f=sum(b);
c=f/32;
e=std(x).*std(x).*std(x).*std(x);
d=c/e
结果:
d =
1.6871
为什么会这样,自己的代码有错吗?
可以加分! 展开
x=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32];
y=kurtosis(x)
结果:
y =
1.7977
(2)用代码:(按matlab的公式写的)
x=[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32];
a=mean(x);
b=(x-a).*(x-a).*(x-a).*(x-a);
f=sum(b);
c=f/32;
e=std(x).*std(x).*std(x).*std(x);
d=c/e
结果:
d =
1.6871
为什么会这样,自己的代码有错吗?
可以加分! 展开
展开全部
其实都没有错
计算标准差的时候有两种定义
在用matlab的std函数计算x的标准差时
std(x,0) 返回第一种
std(x,1) 返回第二种
由于第一种是默认结果所以std(x),想当于std(x,0),返回第一种定义的标准差
你试一下将你代码里e=std(x).*std(x).*std(x).*std(x);
里面的 std(x) 都改成std(x,1),或者简单点写
e=std(x,1).^4
你会发现结果跟用kurtosis(x)所出来的是一致的
那么就是说kurtosis计算是用的标准差是第二中定义
如果样品数n比较大,那么除以n和除以n-1的结果就相差不大了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询