Presentation is loading. Please wait.

Presentation is loading. Please wait.

Polynomials Jordi Cortadella Department of Computer Science.

Similar presentations


Presentation on theme: "Polynomials Jordi Cortadella Department of Computer Science."— Presentation transcript:

1 Polynomials Jordi Cortadella Department of Computer Science

2 Outline How to represent a polynomial? Evaluation of a polynomial. Basic operations: sum, product and division. Greatest common divisor. Introduction to Programming© Dept. CS, UPC2

3 Representation of polynomials Introduction to Programming© Dept. CS, UPC3 typedef vector Polynomial;

4 Polynomial evaluation (Horner’s scheme) Introduction to Programming© Dept. CS, UPC4

5 Polynomial evaluation (Horner’s scheme) // Returns the evaluation of P(x) double PolyEval(const Polynomial& P, double x) { double eval = 0; / Invariant: the polynomial has been evaluated up to the coefficient i+1 using Horner’s scheme / for (int i = P.size()-1; i >= 0; --i) { eval = evalx + P[i]; } return eval; } Introduction to Programming© Dept. CS, UPC5

6 Product of polynomials Example: Introduction to Programming© Dept. CS, UPC6 // Returns PQ Polynomial PolyProduct(const Polynomial& P, const Polynomial& Q);

7 Product of polynomials Key point: Given P(x) = a n x n + a n-1 x n-1 + … + a 1 x + a 0 and Q(x) = b m x m + b m-1 x m-1 + … + b 1 x + b 0, what is the coefficient c i of x i in (P  Q)(x) ? We obtain x i+j whenever we multiply a i x i · b j x j Idea: for every i and j, add a i ·b j to the (i+j)-th coefficient of the product polynomial. Introduction to Programming© Dept. CS, UPC7

8 Product of polynomials // Returns PQ Polynomial PolyProduct(const Polynomial& P, const Polynomial& Q) { // Special case for a polynomial of size 0 if (P.size()Q.size() == 0) return Polynomial(0); Polynomial R(P.size() + Q.size() - 1, 0); for (int i = 0; i < P.size(); ++i) { for (int j = 0; j < Q.size(); ++j) { R[i + j] += P[i]Q[j]; } } return R; } Introduction to Programming© Dept. CS, UPC8

9 Sum of polynomials Note that over the real numbers, degree(P  Q) = degree(P) + degree(Q) (except if P = 0 or Q = 0). So we know the size of the result vector a priori. This is not true for the polynomial sum, e.g. degree((x + 5) + (-x - 1)) = 0 Introduction to Programming© Dept. CS, UPC9

10 Sum of polynomials A function to normalize a polynomial might be useful in some algorithms, i.e., remove the leading zeros to guarantee the most significant coefficient is not zero. Introduction to Programming© Dept. CS, UPC10 // Resizes the polynomial to guarantee that the // leading coefficient is not zero. void PolyNormalize(Polynomial& P) { while (P.size() > 0 and P[P.size()-1] == 0) P.pop_back(); }

11 Sum of polynomials // Returns P+Q Polynomial PolySum(const Polynomial& P, const Polynomial& Q) { int maxsize = max(P.size(), Q.size()); Polynomial R; // Inv: R[0..i-1] = (P+Q)[0..i-1] for (int i = 0; i = P.size()) s = Q[i]; else if (i >= Q.size()) s = P[i]; else s = P[i] + Q[i]; R.push_back(s); } // Remove zeros from the leading locations PolyNormalize(R); return R; } Introduction to Programming© Dept. CS, UPC11

12 Euclidean division of polynomials Introduction to Programming© Dept. CS, UPC12

13 Polynomial long division // Calculates de quotient (Q) and remainder (R) // of the Euclidean division A/B. The result is // returned through the parameters Q and R. void PolyDivision(const Polynomial& A, const Polynomial& B, Polynomial& Q, Polynomial& R); Introduction to Programming© Dept. CS, UPC13 ABRQ

14 Polynomial long division Introduction to Programming© Dept. CS, UPC14 26-310201 13-2 5432103210 210 R: B: Q: 6-420-43 5-3 A Invariant: A = B  Q+R

15 Polynomial long division void PolyDivision(const Polynomial& A, const Polynomial& B, Polynomial& Q, Polynomial& R) { R = A; if (A.size() < B.size()) { // Special case: degree(A) < degree(B) Q = Polynomial(0); return; } Q = Polynomial(A.size() - B.size() + 1, 0); int iR = R.size() - 1; // index of the leading coef. of R // Every iteration performs a step of the division // Invariant: A = B  Q + R for (int iQ = Q.size() - 1; iQ >= 0; --iQ) { Q[iQ] = R[iR]/B[B.size() – 1]; // new coef. Of Q R[iR] = 0; // Guarantees an “exact” zero at the leading coef. for (int k = B.size() - 2; k >= 0; --k) R[k+iQ] -= Q[iQ]*B[k]; --iR; // Index to the next leading coef. of Q } PolyNormalize(R); } Introduction to Programming© Dept. CS, UPC15

16 GCD of two polynomials Introduction to Programming© Dept. CS, UPC16 Example:

17 Re-visiting Euclidean algorithm for gcd // gcd(a, 0) = a // gcd(a, b) = gcd(b, a%b) // Returns gcd(a, b) int gcd(int a, int b) { while (b > 0) { int r = a%b; a = b; b = r; } return a; } For polynomials: a and b are polynomials. a%b is the remainder of the Euclidean division. Introduction to Programming© Dept. CS, UPC17

18 Euclidean algorithm for gcd // Returns gcd(A, B) Polynomial gcd(Polynomial A, Polynomial B) { while (B.size() > 0) { Polynomial Q, R; PolyDivision(A, B, Q, R); A = B; B = R; } // Converts to monic polynomial (e.g., 3x-6  x-2) double c = A[A.size() – 1]; for (int i = 0; i < A.size(); ++i) A[i] = A[i]/c; return A; } Introduction to Programming© Dept. CS, UPC18

19 Euclidean algorithm for gcd monic polynomial Introduction to Programming© Dept. CS, UPC19

20 Conclusions Polynomials are used very often in numerical analysis. Polynomial functions have nice properties: continuous and simple derivatives and antiderivatives. There are simple root-finding algorithms to find approximations of the roots. Introduction to Programming© Dept. CS, UPC20


Download ppt "Polynomials Jordi Cortadella Department of Computer Science."

Similar presentations


Ads by Google