函數功能:線性擬合及相關係數計算。
- 代碼
#include "stdafx.h"
#include
#include
// 函數聲明
double ArrayCorrcoef(int d1[], int d2[], int dataL, int dataW);
void ArrayLinearFit(int x[], int y[], int m, int n, double &a, double &b);
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int a1[5][2] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int b1[5][2] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8 };
cout << "coe=" << ArrayCorrcoef(*a1, *b1, 5, 2) << endl;
double a, b;
ArrayLinearFit(*a1,*b1,5,2,a,b);
cout << "a=" << a << endl;
cout << "b=" << b << endl;
//結束
system("pause");
return 0;
}
// 函數實現過程
double ArrayCorrcoef(int d1[], int d2[], int dataL, int dataW)
{
int i;
int xy = 0, x = 0, y = 0, xsum = 0, ysum = 0;
double corrc;
for (i = 0; i < dataL*dataW; i++)
{
xsum += d1[i];
ysum += d2[i];
}
for (i = 0; i < dataL*dataW; i++)
{
x = x + (dataL*dataW*d1[i] - xsum)*(dataL*dataW*d1[i] - xsum);
y = y + (dataL*dataW*d2[i] - ysum)*(dataL*dataW*d2[i] - ysum);
xy = xy + (dataL*dataW*d1[i] - xsum)*(dataL*dataW*d2[i] - ysum);
}
corrc = double(abs(xy)) / (sqrt(x) * sqrt(y));
return corrc;
}
void ArrayLinearFit(int x[], int y[], int m, int n, double &a, double &b)
{
int i;
int xsum = 0, ysum = 0, xysum = 0, x2sum = 0;
for (i = 0; i < m*n; i++)
{
xsum = xsum + x[i];
ysum = ysum + y[i];
xysum = xysum + x[i] * y[i];
x2sum = x2sum + x[i] * x[i];
}
a = double(m*n*xysum - xsum*ysum) / (m*n*x2sum - xsum*xsum); //這裏一定要進行數據類型轉換
b = double(ysum - a*xsum) / (m*n);
return;
}