48 const std::array<Eigen::Vector2d, M>& points,
49 double* ptr_error_square =
nullptr) {
50 Eigen::Matrix<double, M, N + 1> X;
51 Eigen::Matrix<double, M, 1> Y;
52 for (std::size_t i = 0; i < M; ++i) {
53 double x = points[i].x();
54 double y = points[i].y();
57 for (std::size_t j = 1; j < N + 1; ++j) {
58 X(i, j) = X(i, j - 1) * x;
64 Eigen::Matrix<double, N + 1, 1> t =
65 PseudoInverse<double, N + 1, N + 1>(X.transpose() * X) * X.transpose() *
68 std::array<double, N + 1> coefs;
69 for (std::size_t i = 0; i < N + 1; ++i) {
73 if (ptr_error_square !=
nullptr) {
74 *ptr_error_square = 0.0;
75 for (
const Eigen::Vector2d& point : points) {
77 *ptr_error_square += error * error;