计算相关系数,输入如下:
23 4
41.868 250 0.67 10
83.74 900 0.37 25
108.86 600 0.72 65
108.86 700 0.62 60
125.60 730 0.68 79
146.54 670 0.88 84
150.72 800 0.75 90
157.01 700 0.89 111
171.66 600 1.14 77
184.22 1000 0.73 130
175.85 700 1.00 104
205.15 480 1.70 87
167.47 240 2.78 24
167.47 350 1.90 43
196.78 140 5.60 12
213.53 170 5.00 7
276.33 230 4.78 24
280.52 145 7.70 7
292.14 450 2.40 73
293.08 1050 1.11 150
272.14 1400 0.78 245
314.01 1800 0.70 320
334.94 2000 0.67 330
第一行两个数,一个是行数,一个是列数
// RelativeMatrix.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "math.h"
#include "stdlib.h"
#include <iomanip>
#include <iostream>
using namespace std;
void _tmain(int argc, _TCHAR* argv[])
{
char m_file[] = "Table5-3.txt";
int m_iCount = 0; // 样本个数
int m_vCount = 0; // 变量个数
FILE*fp;
if((fp = fopen(m_file,"r")) == NULL){
printf("Cannot open the file\n");
exit(0);
}
fscanf(fp,"%d %d",&m_iCount,&m_vCount);
float** m_data;
m_data = new float*[m_iCount];
for(int i = 0;i < m_iCount;i++)
m_data[i] = new float[m_vCount];
int i = 0;
while(!feof(fp)){
for(int j = 0;j < m_vCount;j++)
fscanf(fp,"%f",&m_data[i][j]);
i++;
}
fclose(fp);
// 根据公式计算变量之间的相关系数
float sumX = 0.0,sumY = 0.0;
float sumXX = 0.0,sumYY = 0.0,sumXY = 0.0;
float** m_relative = new float*[m_vCount];
for (int i = 0;i < m_vCount;i++)
m_relative[i] = new float[m_vCount];
for(int i = 0;i < m_vCount;i++){
for(int k = 0;k < m_iCount;k++){
sumX += m_data[k][i];
sumXX += m_data[k][i] * m_data[k][i];
}
for(int j = 0;j < m_vCount;j++){
if(i != j){
for(int k = 0;k < m_iCount;k++){
sumY += m_data[k][j];
sumYY += m_data[k][j] * m_data[k][j];
sumXY += m_data[k][i] * m_data[k][j];
}
m_relative[i][j] = (sumXY - sumX * sumY/m_iCount)/sqrt((sumXX - sumX * sumX/m_iCount) *
(sumYY - sumY * sumY/m_iCount));
}
else
m_relative[i][j] = 1.0;
sumY = 0.0,sumYY = 0.0,sumXY = 0.0;
}
sumX = 0.0,sumXX = 0.0;
}
// 屏幕输出
for(int i = 0;i < m_vCount;i++){
for(int j = 0;j < m_vCount;j++)
cout << setw(15) << setprecision(5) << m_relative[i][j];
cout << endl << endl;
}
system("pause");
}