Lines Matching full:polynomial
32 #include "ceres/polynomial.h"
102 void BuildCompanionMatrix(const Vector& polynomial,
107 const int degree = polynomial.size() - 1;
112 companion_matrix.col(degree - 1) = -polynomial.reverse().head(degree);
124 void FindLinearPolynomialRoots(const Vector& polynomial,
127 CHECK_EQ(polynomial.size(), 2);
130 (*real)(0) = -polynomial(1) / polynomial(0);
138 void FindQuadraticPolynomialRoots(const Vector& polynomial,
141 CHECK_EQ(polynomial.size(), 3);
142 const double a = polynomial(0);
143 const double b = polynomial(1);
144 const double c = polynomial(2);
186 LOG(ERROR) << "Invalid polynomial of size 0 passed to FindPolynomialRoots";
190 Vector polynomial = RemoveLeadingZeros(polynomial_in);
191 const int degree = polynomial.size() - 1;
193 VLOG(3) << "Input polynomial: " << polynomial_in.transpose();
194 if (polynomial.size() != polynomial_in.size()) {
195 VLOG(3) << "Trimmed polynomial: " << polynomial.transpose();
198 // Is the polynomial constant?
201 << "polynomial in FindPolynomialRoots";
202 // We return true with no roots, not false, as if the polynomial is constant
210 FindLinearPolynomialRoots(polynomial, real, imaginary);
216 FindQuadraticPolynomialRoots(polynomial, real, imaginary);
224 const double leading_term = polynomial(0);
225 polynomial /= leading_term;
227 // Build and balance the companion matrix to the polynomial.
229 BuildCompanionMatrix(polynomial, &companion_matrix);
253 Vector DifferentiatePolynomial(const Vector& polynomial) {
254 const int degree = polynomial.rows() - 1;
258 // not result in a smaller degree polynomial, just a degree zero
259 // polynomial with value zero.
266 derivative(i) = (degree - i) * polynomial(i);
272 void MinimizePolynomial(const Vector& polynomial,
277 // Find the minimum of the polynomial at the two ends.
283 *optimal_value = EvaluatePolynomial(polynomial, *optimal_x);
285 const double x_min_value = EvaluatePolynomial(polynomial, x_min);
291 const double x_max_value = EvaluatePolynomial(polynomial, x_max);
297 // If the polynomial is linear or constant, we are done.
298 if (polynomial.rows() <= 2) {
302 const Vector derivative = DifferentiatePolynomial(polynomial);
306 << "the interpolating polynomial.";
318 const double value = EvaluatePolynomial(polynomial, root);
377 const Vector polynomial = FindInterpolatingPolynomial(samples);
378 MinimizePolynomial(polynomial, x_min, x_max, optimal_x, optimal_value);
385 const double value = EvaluatePolynomial(polynomial, sample.x);