### 28.3 Products of Polynomials

Function File: conv (a, b)
Function File: conv (a, b, shape)

  Convolve two vectors a and b.

  The output convolution is a vector with length equal to `length (a) + length (b) - 1`. When a and b are the coefficient vectors of two polynomials, the convolution represents the coefficient vector of the product polynomial.

  The optional shape argument may be

  shape = `"full"`

    Return the full convolution. (default)

  shape = `"same"`

    Return the central part of the convolution with the same size as a.

  See also: deconv, conv2, convn, fftconv.

Built-in Function: C = convn (A, B)
Built-in Function: C = convn (A, B, shape)

  Return the n-D convolution of A and B. The size of the result is determined by the optional shape argument which takes the following values

  shape = `"full"`

    Return the full convolution. (default)

  shape = `"same"`

    Return central part of the convolution with the same size as A. The central part of the convolution begins at the indices `floor ([size(B)/2] + 1)`.

  shape = `"valid"`

    Return only the parts which do not include zero-padded edges. The size of the result is `max (size (A) - size (B) + 1, 0)`.

  See also: conv2, conv.

Function File: deconv (y, a)

  Deconvolve two vectors.

  `[b, r] = deconv (y, a)` solves for b and r such that `y = conv (a, b) + r`.

  If y and a are polynomial coefficient vectors, b will contain the coefficients of the polynomial quotient and r will be a remainder polynomial of lowest order.

  See also: conv, residue.

Built-in Function: conv2 (A, B)
Built-in Function: conv2 (v1, v2, m)
Built-in Function: conv2 (…, shape)

  Return the 2-D convolution of A and B. The size of the result is determined by the optional shape argument which takes the following values

  shape = `"full"`

    Return the full convolution. (default)

  shape = `"same"`

    Return the central part of the convolution with the same size as A. The central part of the convolution begins at the indices `floor ([size(B)/2] + 1)`.

  shape = `"valid"`

    Return only the parts which do not include zero-padded edges. The size of the result is `max (size (A) - size (B) + 1, 0)`.

  When the third argument is a matrix, return the convolution of the matrix m by the vector v1 in the column direction and by the vector v2 in the row direction.

  See also: conv, convn.

Function File: q = polygcd (b, a)
Function File: q = polygcd (b, a, tol)

  Find the greatest common divisor of two polynomials. This is equivalent to the polynomial found by multiplying together all the common roots. Together with deconv, you can reduce a ratio of two polynomials. The tolerance tol defaults to `sqrt (eps)`.

  Caution: This is a numerically unstable algorithm and should not be used on large polynomials.

  Example code:

      polygcd (poly (1:8), poly (3:12)) - poly (3:8)
      ⇒ [ 0, 0, 0, 0, 0, 0, 0 ]
      deconv (poly (1:8), polygcd (poly (1:8), poly (3:12))) - poly (1:2)
      ⇒ [ 0, 0, 0 ]

  See also: poly, roots, conv, deconv, residue.

Function File: [r, p, k, e] = residue (b, a)
Function File: [b, a] = residue (r, p, k)
Function File: [b, a] = residue (r, p, k, e)

  The first calling form computes the partial fraction expansion for the quotient of the polynomials, b and a.

      B(s)    M       r(m)         N
      ---- = SUM -------------  + SUM k(i)*s^(N-i)
      A(s)   m=1 (s-p(m))^e(m)    i=1

  where M is the number of poles (the length of the r, p, and e), the k vector is a polynomial of order N-1 representing the direct contribution, and the e vector specifies the multiplicity of the m-th residue’s pole.

  For example,

      b = [1, 1, 1];
      a = [1, -5, 8, -4];
      [r, p, k, e] = residue (b, a)
         ⇒ r = [-2; 7; 3]
         ⇒ p = [2; 2; 1]
         ⇒ k = [](0x0)
         ⇒ e = [1; 2; 1]

  which represents the following partial fraction expansion

              s^2 + s + 1       -2        7        3
         ------------------- = ----- + ------- + -----
         s^3 - 5s^2 + 8s - 4   (s-2)   (s-2)^2   (s-1)

  The second calling form performs the inverse operation and computes the reconstituted quotient of polynomials, b(s)/a(s), from the partial fraction expansion; represented by the residues, poles, and a direct polynomial specified by r, p and k, and the pole multiplicity e.

  If the multiplicity, e, is not explicitly specified the multiplicity is determined by the function `mpoles`.

  For example:

      r = [-2; 7; 3];
      p = [2; 2; 1];
      k = [1, 0];
      [b, a] = residue (r, p, k)
         ⇒ b = [1, -5, 9, -3, 1]
         ⇒ a = [1, -5, 8, -4]

      where mpoles is used to determine e = [1; 2; 1]

  Alternatively the multiplicity may be defined explicitly, for example,

      r = [7; 3; -2];
      p = [2; 1; 2];
      k = [1, 0];
      e = [2; 1; 1];
      [b, a] = residue (r, p, k, e)
         ⇒ b = [1, -5, 9, -3, 1]
         ⇒ a = [1, -5, 8, -4]

  which represents the following partial fraction expansion

       -2        7        3         s^4 - 5s^3 + 9s^2 - 3s + 1
      ----- + ------- + ----- + s = --------------------------
      (s-2)   (s-2)^2   (s-1)          s^3 - 5s^2 + 8s - 4

  See also: mpoles, poly, roots, conv, deconv.