#include<vector> using namespace std; /* 求Sigma_{i = 0 to n}(a_{i}x^{i}) */ double get_polynomial_value(int n, const std::vector<double> &a, double x) { double p = 0.0, xi = 1.0; if (n > (int) a.size() - 1) { n = a.size() - 1; } for (int i = 0; i <= n; ++i) { p += (a[i] * xi); xi *= x; } return p; } /* 用多项式对数据进行最小二乘法曲线拟合 * m为数据组数 * (x,y)为数据点,至少有m组 * w为权函数(用数组表示各点函数值) * n为多项式预期的最高次数 * a为得出的多项式系数(a0到an) * 返回值为平方误差 */ double polynomial_curve_fit(int m, const std::vector<double> &x, const std::vector<double> &y, const std::vector<double> &w, int n, std::vector<double> &a) { /* check for safety */ if (m > (int) x.size() - 1) { m = x.size() - 1; } if (m > (int) y.size() - 1) { m = y.size() - 1; } if (n > m) { n = m; } double delta = 0.0; double wfp = 0.0, wpp = 0.0, wpp_1 = 0.0, wxpp