計算相關係數,輸入如下:
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");
}