最近要用C计算一些统计特征,在网络上看了一些帖子,但是并没有实现目标。以前计算这些特征均是使用Matlab计算,于是按照matlab中关于峰度和偏度的函数帮助,自己用C写了一下。
峰度
%在matlab中,使用计算峰度的函数kurtosis默认的flag是等于1,%也就是上面两个式子中的K1。kurtosis_a_1 = kurtosis(a,1);kurtosis_a_0 = kurtosis(a,0);
下面给出使用C语言实现峰度计算的代码
#include<stdio.h>#include<math.h>double mean(double a[128], double len){double sum = 0;double mean = 0;//求和for (int i = 0; i < len; i++){sum += a[i];}//计算均值mean = sum / len;return mean;}double kurtosis(double a[128], double len){//数组的长度要根据自己需求更改double kurtosis_mean = 0;double k1 = 0;double m2 = 0;double m4 = 0;double peakdnees = 0;double section_1 = 0;double section_2 = 0;kurtosis_mean = mean(a, len);//128是数组的长度for (int i = 0; i < 128; i++){m4 = m4 + pow((a[i] - kurtosis_mean),4);m2 = m2 + pow((a[i] - kurtosis_mean),2);}k1 = len * (m4 / (pow(m2,2)));section_1 = (len - 1)/((len - 2) * (len - 3));section_2 = (len + 1) * k1 - 3*(len - 1);peakdnees = section_1*section_2 + 3;//根据要计算的峰度不同,选择返回K1或者peakdnessreturn peakdnees;}