MC01MD

The leading coefficients of the shifted polynomial for a given real polynomial

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

Purpose

  To calculate, for a given real polynomial P(x) and a real scalar
  alpha, the leading K coefficients of the shifted polynomial
                                                            K-1
     P(x) = q(1) + q(2) * (x-alpha) + ... + q(K) * (x-alpha)   + ...

  using Horner's algorithm.

Specification
      SUBROUTINE MC01MD( DP, ALPHA, K, P, Q, INFO )
C     .. Scalar Arguments ..
      INTEGER           DP, INFO, K
      DOUBLE PRECISION  ALPHA
C     .. Array Arguments ..
      DOUBLE PRECISION  P(*), Q(*)

Arguments

Input/Output Parameters

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

  ALPHA   (input) DOUBLE PRECISION
          The scalar value alpha of the problem.

  K       (input) INTEGER
          The number of coefficients of the shifted polynomial to be
          computed.  1 <= K <= DP+1.

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

  Q       (output) DOUBLE PRECISION array, dimension (DP+1)
          The leading K elements of this array contain the first
          K coefficients of the shifted polynomial in increasing
          powers of (x - alpha), and the next (DP-K+1) elements
          are used as internal workspace.

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

Method
  Given the real polynomial
                                      2                    DP
     P(x) = p(1) + p(2) * x + p(3) * x  + ... + p(DP+1) * x  ,

  the routine computes the leading K coefficients of the shifted
  polynomial
                                                                K-1
     P(x) = q(1) + q(2) * (x - alpha) + ... + q(K) * (x - alpha)

  as follows.

  Applying Horner's algorithm (see [1]) to P(x), i.e. dividing P(x)
  by (x-alpha), yields

     P(x) = q(1) + (x-alpha) * D(x),

  where q(1) is the value of the constant term of the shifted
  polynomial and D(x) is the quotient polynomial of degree (DP-1)
  given by
                                      2                     DP-1
     D(x) = d(2) + d(3) * x + d(4) * x  + ... +  d(DP+1) * x    .

  Applying Horner's algorithm to D(x) and subsequent quotient
  polynomials yields q(2) and q(3), q(4), ..., q(K) respectively.

  It follows immediately that q(1) = P(alpha), and in general
             (i-1)
     q(i) = P     (alpha) / (i - 1)! for i = 1, 2, ..., K.

References
  [1] STOER, J. and BULIRSCH, R.
      Introduction to Numerical Analysis.
      Springer-Verlag. 1980.

Numerical Aspects
  None.

Further Comments
  None
Example

Program Text

*     MC01MD EXAMPLE PROGRAM TEXT
*     Copyright (c) 2002-2017 NICONET e.V.
*
*     .. Parameters ..
      INTEGER          NIN, NOUT
      PARAMETER        ( NIN = 5, NOUT = 6 )
      INTEGER          DPMAX
      PARAMETER        ( DPMAX = 20 )
*     .. Local Scalars ..
      DOUBLE PRECISION ALPHA
      INTEGER          DP, I, INFO, K
*     .. Local Arrays ..
      DOUBLE PRECISION P(DPMAX+1), Q(DPMAX+1)
*     .. External Subroutines ..
      EXTERNAL         MC01MD
*     .. Executable Statements ..
      WRITE ( NOUT, FMT = 99999 )
*     Skip the heading in the data file and read the data.
      READ ( NIN, FMT = '()' )
      READ ( NIN, FMT = * ) DP, ALPHA, K
      IF ( DP.LE.-1 .OR. DP.GT.DPMAX ) THEN
         WRITE ( NOUT, FMT = 99995 ) DP
      ELSE
         READ ( NIN, FMT = * ) ( P(I), I = 1,DP+1 )
*        Compute the leading K coefficients of the shifted polynomial.
         CALL MC01MD( DP, ALPHA, K, P, Q, INFO )
*
         IF ( INFO.NE.0 ) THEN
            WRITE ( NOUT, FMT = 99998 ) INFO
         ELSE
            WRITE ( NOUT, FMT = 99997 ) ALPHA
            DO 20 I = 1, K
               WRITE ( NOUT, FMT = 99996 ) I - 1, Q(I)
   20       CONTINUE
         END IF
      END IF
*
      STOP
*
99999 FORMAT (' MC01MD EXAMPLE PROGRAM RESULTS',/1X)
99998 FORMAT (' INFO on exit from MC01MD = ',I2)
99997 FORMAT (' ALPHA = ',F8.4,//' The coefficients of the shifted pol',
     $       'ynomial are ',//' power of (x-ALPHA)     coefficient ')
99996 FORMAT (5X,I5,15X,F9.4)
99995 FORMAT (/' DP is out of range.',/' DP = ',I5)
      END
Program Data
 MC01MD EXAMPLE PROGRAM DATA
   5     2.0     6
   6.0  5.0  4.0  3.0  2.0  1.0
Program Results
 MC01MD EXAMPLE PROGRAM RESULTS

 ALPHA =   2.0000

 The coefficients of the shifted polynomial are 

 power of (x-ALPHA)     coefficient 
         0                120.0000
         1                201.0000
         2                150.0000
         3                 59.0000
         4                 12.0000
         5                  1.0000

Return to index