/**协方差计算
*****注意数据类型
*参数 data[] 数据
*使用注意 需要重定义数据类型
typedef unsigned int uint16;
*提示数组传递都是按地址传递 所以可以不需要返回值
*计算标准差需要引用头文件math.h
*宏定义说明
#define COUNT 5 //数据个数
#define METHOD 0 //METHOD = 0 总体协方差
//METHOD = 1 样本协方差
**/
#define COUNT 5 //数据个数
#define METHOD 0 //METHOD = 0 总体协方差
//METHOD = 1 样本协方差
float getCovariance(int dataX[], int dataY[])
{
float aveX = 0;//X的平均值
float aveY = 0;//y的平均值
float sum = 0;//和
uint16 i = 0;
//遍历,先求x和y的平均值
for(i = 0; i < COUNT; i++)
{
aveX += dataX[i];
aveY += dataY[i];
}
//求X和y的平均值
aveX = aveX / COUNT;
aveY = aveY / COUNT;
//遍历求数组元素与平均值差值
for(i = 0; i < COUNT; i++)
{
sum += (dataX[i] - aveX) * (dataY[i] - aveY);
}
#if(METHOD == 0)
//求总体协方差,并返回
return sum / COUNT;
#elif(METHOD == 1)
//求样本协方差,并返回
return sum / (COUNT - 1);
#endif
}
/**协方差计算
*****注意数据类型
*参数 dataX[] x坐标数据
*参数 dataY[] y坐标数据
*参数 *Pxy 相关系数 存放相关系数数据的地址
*使用注意 需要重定义数据类型
typedef unsigned int uint16;
*提示数组传递都是按地址传递 所以可以不需要返回值
*计算标准差需要引用头文件math.h
*宏定义说明
#define COUNT 5 //数据个数
#define METHOD 0 //METHOD = 0 总体协方差
//METHOD = 1 样本协方差
**/
#define METHOD 0 //METHOD = 0 总体协方差
//METHOD = 1 样本协方差
float getCovariance(int dataX[], int dataY[], float *Pxy)
{
float aveX = 0;//X的平均值
float aveY = 0;//y的平均值
float sum = 0;//和
uint16 i = 0;
//遍历,先求x和y的平均值
for(i = 0; i < COUNT; i++)
{
aveX += dataX[i];
aveY += dataY[i];
}
//求X和y的平均值
aveX = aveX / COUNT;
aveY = aveY / COUNT;
//遍历求数组元素与平均值差值
for(i = 0; i < COUNT; i++)
{
sum += (dataX[i] - aveX) * (dataY[i] - aveY);
}
#if(METHOD == 0)
//求相关系数 协方差/x坐标数据的标准差/y坐标数据的标准差
*Pxy = sum / COUNT / getVariance(dataX) / getVariance(dataY);
//求总体协方差
return sum / COUNT;
#elif(METHOD == 1)
//求相关系数 协方差/x坐标数据的标准差/y坐标数据的标准差
*Pxy = sum / (COUNT - 1) / getVariance(dataX) / getVariance(dataY);
//求样本协方差
return sum / (COUNT - 1);
#endif
}
getVariance(dataX) 看不懂的点击C语言实现总体方差,总体标准差,样本方差,样本标准差