Guest User

Untitled

a guest
Jan 22nd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. #include <Eigen/QR>
  2.  
  3. #include <vector>
  4. #include <iostream>
  5.  
  6.  
  7. void polyfit(const std::vector<double> &xv, const std::vector<double> &yv, std::vector<double> &coeff, int order)
  8. {
  9. Eigen::MatrixXd A(xv.size(), order + 1);
  10. Eigen::VectorXd yv_mapped = Eigen::VectorXd::Map(&yv.front(), yv.size());
  11. Eigen::VectorXd result;
  12.  
  13. assert(xv.size() == yv.size());
  14. assert(xv.size() >= order + 1);
  15.  
  16. for (size_t i = 0; i < xv.size(); i++)
  17. for (size_t j = 0; j < order + 1; j++)
  18. A(i, j) = pow(xv.at(i), j);
  19.  
  20. result = A.householderQr().solve(yv_mapped);
  21.  
  22. coeff.resize(order + 1);
  23. for (size_t i = 0; i < order + 1; i++)
  24. coeff[i] = result[i];
  25. }
  26.  
  27. int main()
  28. {
  29. std::vector<double> x_values, y_values, coeff;
  30.  
  31. x_values = {0.0, 1.0, 2.0, 3.0, 4, 5, 6, 7 };
  32. y_values = {1, -0.5, 2.0, -1, 2, -3, 2 , -3 };
  33.  
  34. polyfit(x_values, y_values, coeff, x_values.size()-1);
  35. for (int i = 0; i <= x_values.size()-1; i++){
  36. if (coeff[i] > 0)
  37. std::cout << "+";
  38. std::cout << coeff[i] << "*x^"<< i << " ";
  39. }
  40.  
  41. system("pause");
  42. return 0;
  43. }
Add Comment
Please, Sign In to add comment