#include<iostream>
using namespace std;
class Point {
public:
	Point(float x=0,float y=0 ):x(x),y(y){}
	float getX() const {
		return x;
	}
	float getY() const{
		return y;
	}
private:
	float x, y;
};
float lineFit(const Point Points[], int nPoints) {
	float avgX = 0, avgY = 0;
	float lxx = 0, lyy = 0, lxy = 0;
	for (int i = 0; i < nPoints; ++i) {
		avgX += Points[i].getX() / nPoints;
		avgY += Points[i].getY() / nPoints;
	}
	for (int i = 0; i < nPoints; ++i) {
		lxx+=(Points[i].getX() - avgX)*(Points[i].getX() - avgX);
		lxy+=(Points[i].getX() - avgX)*(Points[i].getY() - avgY);
		lyy+=(Points[i].getY() - avgY)*(Points[i].getY() - avgY);
	}
	cout << \"这条直线可设为y=ax+b\" << endl;
	cout << \"a= \" << lxy / lxx << \" \";
	cout << \"b= \" << avgY - lxy*avgX / lxx << \" \";
	return static_cast<float>(lxy / sqrt(lxx*lyy));
}
int main(void) {
	Point p[10] = { Point(6,10),Point(14,20),Point(26,30),Point(33,40),
		Point(46,50),Point(54,60),Point(67,70),Point(75,80),
		Point(84,90),Point(100,100)
	};
	float r = lineFit(p, 10);
	cout << \"线性拟合程度\" << r << endl;
	return 0;
}
收藏 打印