#ifndef _POINT_H
#define _POINT_H
class Point {//Piont类的定义
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;
};
#endif
#include <iostream>
#include "Point.h"
#include <cmath>
using namespace std;
//直线线性拟合,points为各点,nPiont为点数
float lineFit(const Point Points[], int nPoint);
float lineFit(const Point Points[], int nPoint) {
float avgX = 0, avgY = 0;
float 1xx = 0, 1yy = 0, 1xy = 0;
for (int i = 0; i < nPoint; i++)
{
avgX += points[i].getX() / nPoint;
avgY += points[i].getY() / nPoint;
}
for (int i = 0; i < nPoint; i++)
{
1xx += (points[i].getX() - avgX) * (points[i].getX - avgX);
1yy += (points[i].getY() - avgY) * (points[i].getY - avgY);
1xy += (points[i].getX() - avgX) * (points[i].getY - avgY);
}
cout << "This line can be fitted by y=ax+b." << endl;
cout << "a=" << 1xy / 1xx << " ";
cout << "b=" << avgY - 1xy * avgX / 1xx << endl;
return static_cast<float>(1xy / sqrt(1xx * 1yy));
}
int main()
{
Point p[10] = { Point(6,10),Point(14,20), Point(26,30), Point(33,40), Point(46,50), Point(56,60), Point(67,70), Point(75,80), Point(84,90), Point(100,100), };
float r = lineFit(p, 10);
cout << "Line coefficient r=" << r << endl;
return 0;
}
1、Points写成了points。
2、还有变量不能以数字开头命名,你写成了1xx
float 1xx = 0, 1yy = 0, 1xy = 0;
3、Points[i].getX写错了,应该写成Points[i].getX()
#include <iostream>
#include <cmath>
using namespace std;
class Point {//Piont类的定义
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;
};
//直线线性拟合,points为各点,nPiont为点数
float lineFit(const Point Points[], int nPoint);
float lineFit(const Point Points[], int nPoint)
{
float avgX = 0, avgY = 0;
float xx = 0, yy = 0, xy = 0;
for (int i = 0; i < nPoint; i++)
{
avgX += Points[i].getX() / nPoint;
avgY += Points[i].getY() / nPoint;
}
for (int i = 0; i < nPoint; i++)
{
xx += (Points[i].getX() - avgX) * (Points[i].getX() - avgX);
yy += (Points[i].getY() - avgY) * (Points[i].getY() - avgY);
xy += (Points[i].getX() - avgX) * (Points[i].getY() - avgY);
}
cout << "This line can be fitted by y=ax+b." << endl;
cout << "a=" << xy / xx << " ";
cout << "b=" << avgY - xy * avgX / xx << endl;
return static_cast<float>(xy / sqrt(xx * yy));
}
int main()
{
Point p[10] = { Point(6,10),Point(14,20), Point(26,30), Point(33,40), Point(46,50), Point(56,60), Point(67,70), Point(75,80), Point(84,90), Point(100,100), };
float r = lineFit(p, 10);
cout << "Line coefficient r=" << r << endl;
return 0;
}