SUBROUTINE PCOEF( N, XN, YN, CN )
      INTEGER, INTENT(IN   ) :: N            ! length of input vector
      REAL   , INTENT(IN   ) :: XN( N )      ! input vector of X-values
      REAL   , INTENT(IN   ) :: YN( N )      ! input vector of Y-values
      REAL   , INTENT(  OUT) :: CN( N )      ! output vector of polynomial coefficients
PCOEF() finds the array CN of coefficients
    for the polynomial P going through the sets of points
    <XN(k),YN(k)>, k = 1,...,N. Must have
    N l< 16; in practice, N should not
    exceed 8, and the points XN(k) should be
    well-spaced-out, or else numerical  instabilities may arise.  To evaluate
    P at X, evaluate the sum
    
    SUM( CN( K ) * X**(K-1) ; K = 1,...,N )
    
        ...
        Y = CN( N )
        DO  K = N-1, 1, -1
            Y = X * Y  +  CN( K )
        END DO
        ...
    
    For modern (deeply-pipelined superscalar) processors, it may be
    significantly more efficient to "unroll" this loop
    in order to obtain a form which pipelines better, e.g.:
    
        ...
        K = MOD( N, 2 )
        IF ( K .EQ. 0 ) THEN
            Y = CN( N )
            M = N
        ELSE
            Y = 0.0
            M = N - 1
        END IF
        X2 = X*X       
        DO  K = M, 1, -2
            Y = X2 * Y  +  X2 * CN( K ) + X * CN( K-1 ) + CN( K-1 )
        END DO
        ...
    
    (If N is fixed and known in advance, there are
    (processor specific) forms that are better yet, if the operation
    of polynomial-evaluation is to be performed many, many times.)
    See also POLY().
To: Models-3/EDSS I/O API: The Help Pages