- #include <vector>
- void leastSquare(std::vector<double> &x, std::vector<double> &y, int &a, int &b)
- {
- double sx = 0, sy = 0, sxy = 0, sx2 = 0; /*s前缀表示sum*/
- int m = x.size();
- for(int i = 0; i != m, i++)
- {
- sx = sx + x[i];
- sy = sy + y[i];
- sxy = sxy + x[i]*y[i];
- sx2 = sx2 + x[i]*x[i];
- }
- b = (sx2*sy - sxy*sx) / (sx2*m - sx*sx);
- a = (sx*sy - sxy*m) / (sx*sx - m*sx2);
- }
复制代码 大体就是这样子,没调试,自己看吧,传递给函数的参数是换元以后的。因为拟合次数低,所以没用矩阵运算。 |