/*
函数名称:Multinomial
函数作用:最小二乘法求多项式系数
输出参数:Mat_<double>& F 多项式系数
输入参数:double * x 输入数据的特征集合
double * y 输入数据的标签集合
int m 输入数据的数量
int n 多项式系数的个数
*/
void Multinomial(Mat_<double>& F, double * x, double * y, int m, int n)
{
Mat_<double> X = Mat(m, n, CV_64FC1, Scalar(0));
Mat_<double> Y = Mat(m, 1, CV_64FC1, Scalar(0));
double t = 1;
for (int i = 0; i < m; i++)
{
t = 1;
X(i, 0) = 1;
for (int j = 1; j < n; j++)
{
t = t * x[i]; //多项式的j阶项
X(i, j) = t;
}
Y(i, 0) = y[i];
}
F = (X.t() * X).inv() * (X.t() * Y);
F = F.t();
}
void main()
{
double x[1026];
double y[1026];
ReadFile("data.txt", 1026, x, y);
Mat_<double> F;
Multinomial(F, x, y, 1026, 10);
cout << F << endl;
}
运行结果:输出10个系数值