## MC01WD

### Quotient and remainder polynomials for a quadratic denominator polynomial

[Specification] [Arguments] [Method] [References] [Comments] [Example]

Purpose

      To compute, for a given real polynomial P(x) and a quadratic
      polynomial B(x), the quotient polynomial Q(x) and the linear
      remainder polynomial R(x) such that

         P(x) = B(x) * Q(x) + R(x),

                                  2
      where B(x) = u1 + u2 * x + x , R(x) = q(1) + q(2) * (u2 + x)
      and u1, u2, q(1) and q(2) are real scalars.

Specification

          SUBROUTINE MC01WD( DP, P, U1, U2, Q, INFO )
    C     .. Scalar Arguments ..
          INTEGER           DP, INFO
          DOUBLE PRECISION  U1, U2
    C     .. Array Arguments ..
          DOUBLE PRECISION  P(*), Q(*)

Arguments

Input/Output Parameters

      DP      (input) INTEGER
              The degree of the polynomial P(x).  DP >= 0.

      P       (input) DOUBLE PRECISION array, dimension (DP+1)
              This array must contain the coefficients of P(x) in
              increasing powers of x.

      U1      (input) DOUBLE PRECISION
              The value of the constant term of the quadratic
              polynomial B(x).

      U2      (input) DOUBLE PRECISION
              The value of the coefficient of x of the quadratic
              polynomial B(x).

      Q       (output) DOUBLE PRECISION array, dimension (DP+1)
              If DP >= 1 on entry, then elements Q(1) and Q(2) contain
              the coefficients q(1) and q(2), respectively, of the
              remainder polynomial R(x), and the next (DP-1) elements
              of this array contain the coefficients of the quotient
              polynomial Q(x) in increasing powers of x.
              If DP = 0 on entry, then element Q(1) contains the
              coefficient q(1) of the remainder polynomial R(x) = q(1);
              Q(x) is the zero polynomial.

Error Indicator

      INFO    INTEGER
              = 0:  successful exit;
              < 0:  if INFO = -i, the i-th argument had an illegal
                    value.

Method

      Given the real polynomials

                 DP           i                           2
         P(x) = SUM p(i+1) * x  and B(x) = u1 + u2 * x + x
                i=0

      the routine uses the recurrence relationships

         q(DP+1) = p(DP+1),

         q(DP) = p(DP) - u2 * q(DP+1) and

         q(i)  = p(i) - u2 * q(i+1) - u1 * q(i+2) for i = DP-1, ..., 1

      to determine the coefficients of the quotient polynomial

                DP-2          i
         Q(x) = SUM q(i+3) * x
                i=0

      and the remainder polynomial

         R(x) = q(1) + q(2) * (u2 + x).

Numerical Aspects

      None.

Further Comments

      None

Example

Program Text

    *     MC01WD EXAMPLE PROGRAM TEXT
    *
    *     .. Parameters ..
          INTEGER          NIN, NOUT
          PARAMETER        ( NIN = 5, NOUT = 6 )
          INTEGER          DPMAX
          PARAMETER        ( DPMAX = 10 )
    *     .. Local Scalars ..
          DOUBLE PRECISION U1, U2
          INTEGER          DP, I, INFO
    *     .. Local Arrays ..
          DOUBLE PRECISION P(DPMAX+1), Q(DPMAX+1)
    *     .. External Subroutines ..
          EXTERNAL         MC01WD
    *     .. Executable Statements ..
    *
          WRITE ( NOUT,FMT = 99999 )
    *     Skip the heading in the data file and read the data.
          READ ( NIN, FMT = '()' )
          READ ( NIN, FMT = * ) DP
          IF ( DP.LE.-1 .OR. DP.GT.DPMAX ) THEN
             WRITE ( NOUT, FMT = 99994 ) DP
          ELSE
             READ ( NIN, FMT = * ) ( P(I), I = 1,DP+1 )
             READ ( NIN, FMT = * ) U1, U2
    *        Compute Q(x) and R(x) from P(x) = (x**2+U2*x+U1) * Q(x) + R(x).
             CALL MC01WD( DP, P, U1, U2, Q, INFO )
    *
             IF ( INFO.NE.0 ) THEN
                WRITE ( NOUT, FMT = 99998 ) INFO
             ELSE
                WRITE ( NOUT, FMT = 99997 )
                DO 20 I = 0, DP - 2
                   WRITE ( NOUT, FMT = 99996 ) I, Q(I+3)
       20       CONTINUE
                WRITE ( NOUT, FMT = 99995 ) Q(1) + Q(2)*U2, Q(2)
             END IF
          END IF
    *
          STOP
    *
    99999 FORMAT (' MC01WD EXAMPLE PROGRAM RESULTS',/1X)
    99998 FORMAT (' INFO on exit from MC01WD = ',I2)
    99997 FORMAT (' The coefficients of the quotient polynomial Q(x) are ',
         $       //' power of x     coefficient ')
    99996 FORMAT (2X,I5,9X,F9.4)
    99995 FORMAT (/' The coefficients of the remainder polynomial R(x) are '
         $       ,//' power of x     coefficient ',/'      0         ',F9.4,
         $       /'      1         ',F9.4)
    99994 FORMAT (/' DP is out of range.',/' DP = ',I5)
          END

Program Data

     MC01WD EXAMPLE PROGRAM DATA
       6
       0.62  1.10  1.64  1.88  2.12  1.70  1.00
       0.60  0.80

Program Results

     MC01WD EXAMPLE PROGRAM RESULTS

     The coefficients of the quotient polynomial Q(x) are

     power of x     coefficient
          0            0.6000
          1            0.7000
          2            0.8000
          3            0.9000
          4            1.0000

     The coefficients of the remainder polynomial R(x) are

     power of x     coefficient
          0            0.2600
          1            0.2000

Return to index