計量地理-相關係數

計算相關係數,輸入如下:

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");	
	
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章