Linear Regression.cpp
/*
  Josh Santomieri
  Santomieri Systems

  Line of best fit - Linear Regression
  Calculates the line of best fit given a group of (x,y) points.

Function Prototype:
	void CreateLineOfBestFit(int *x, int *y, int points, TCHAR *eq, rsize_t maxLen);

Usage:
	int x[] = {1, 2, 3, 4, 5};
	int y[] = {11100, 10910, 11450, 11520, 11420};
	TCHAR eq[100];
	
	CreateLineOfBestFit(x, y, sizeof(x)/sizeof(int), (TCHAR*)&eq, sizeof(eq)/sizeof(TCHAR));
*/


void CreateLineOfBestFit(int *x, int *y, int points, TCHAR *eq, rsize_t maxLen)
{
	int ix1;
	double xAvg = 0, yAvg = 0;
	double b1 = 0, b2 = 0;

	if(points < 2)
	{
		wcscpy_s(eq, maxLen, L"2 or more points needed.");
		return;
	}

	for(ix1 = 0; ix1 < points; ix1++)
	{
		xAvg += *(x+ix1);
		yAvg += *(y+ix1);
	}
	xAvg /= points;
	yAvg /= points;

	for(ix1 = 0; ix1 < points; ix1++)
	{
		b1 += (*(x+ix1) - xAvg) * (*(y+ix1) - yAvg);
		b2 += pow((*(x+ix1) - xAvg), 2);
	}

	if(b2 > 0)
	{
		b1 = b1/b2;
		b2 = yAvg - (b1 * xAvg);
	}
	else
	{
		b1 = 0;
		b2 = 0;
	}

	swprintf_s(eq, maxLen, L"y = %.3f * x + %.3f", b1, b2);
	return;
}