美文网首页
使用EIGEN实现曲线拟合

使用EIGEN实现曲线拟合

作者: Young1217 | 来源:发表于2018-10-17 14:25 被阅读0次
    double polyeval(Eigen::VectorXd coeffs, double x) {
      double result = 0.0;
      for (int i = 0; i < coeffs.size(); i++) {result += coeffs[i]*pow(x, i);}
      return result;
    }
    
    Eigen::VectorXd polyfit(Eigen::VectorXd xvals, Eigen::VectorXd yvals, int order) {
      assert(xvals.size() == yvals.size());
      assert(order >= 1 && order <= xvals.size() - 1);
      Eigen::MatrixXd A(xvals.size(), order + 1);
      for (int i = 0; i < xvals.size(); i++) {
        A(i, 0) = 1.0;
      }
      for (int j = 0; j < xvals.size(); j++) {
        for (int i = 0; i < order; i++) {
          A(j, i + 1) = A(j, i) * xvals(j);
        }
      }
      auto Q = A.householderQr();
      auto result = Q.solve(yvals);
      return result;
    }
    
    Eigen::VectorXd xvals(6);
    Eigen::VectorXd yvals(6);
    xvals << 9.261977, -2.06803, -19.6663, -36.868, -51.6263, -66.3482;
    yvals << 5.17,     -2.25,    -15.306,  -29.46,  -42.85,   -57.6116;
    auto coeffs= polyfit(xvals,yvals,3);
    std::cout<< "Y(16)=" << polyeval(coeffs,16) << endl;
    

    相关文章

      网友评论

          本文标题:使用EIGEN实现曲线拟合

          本文链接:https://www.haomeiwen.com/subject/zufrzftx.html