dcosqi(3P)
NAME
dcosqi - initialize the array xWSAVE, which is used in both xCOSQF and xCOSQB.
SYNOPSIS
SUBROUTINE COSQI (N, RWSAVE)
SUBROUTINE DCOSQI (N, DWSAVE)
SUBROUTINE VCOSQI (N, RWSAVE)
SUBROUTINE VDCOSQI (N, DWSAVE)
#include <sunperf.h>
void costi (int n, float ∗rwsave) ;
void dcosti (int n, double ∗dwsave) ;
void vcosti (int n, float ∗rwsave) ;
void vdcosti (int n, float ∗dwsave) ;
ARGUMENTS
N Length of the sequence to be transformed. The method is most efficient when N is a product of small primes.
xWSAVE On entry, an array with a dimension of at least (3 ∗ N + 15) for scalar subroutines or (2 ∗ N + 15) for vector subroutines. The same work array can be used for both xCOSQF and xCOSQB as long as N remains unchanged. Different xWSAVE arrays are required for different values of N. This initialization does not have to be repeated between calls to xCOSQF or xCOSQB as long as N and xWSAVE remain unchanged, thus subsequent transforms can be obtained faster than the first.
SAMPLE PROGRAM
PROGRAM TEST
IMPLICIT NONE
C
INTEGER N
PARAMETER (N = 6)
C
INTEGER I
REAL PI, WSAVE(3 ∗ N + 15), X(N)
C
EXTERNAL COSQB, COSQF, COSQI
INTRINSIC ACOS, COS
C
C Initialize array X to a real even quarter-wave sequence, that is,
C it can be expanded in terms of a cosine series with only odd wave
C numbers.
C
PI = ACOS (-1.0)
DO 100, I=1, N
X(I) = COS((I - 1) ∗ PI / (2.0 ∗ N))
100 CONTINUE
C
CALL COSQI (N, WSAVE)
PRINT 1000
PRINT 1010, (X(I), I = 1, N)
CALL COSQF (N, X, WSAVE)
PRINT 1020
PRINT 1010, (X(I), I = 1, N)
CALL COSQB (N, X, WSAVE)
PRINT 1030
PRINT 1010, (X(I), I = 1, N)
C
1000 FORMAT(1X, ’Original Sequence: ’)
1010 FORMAT(1X, 100(F7.3, 1X))
1020 FORMAT(1X, ’Transformed Sequence: ’)
1030 FORMAT(1X, ’Recovered Sequence: ’)
END
SAMPLE OUTPUT
Original Sequence:
1.000 0.966 0.866 0.707 0.500 0.259
Transformed Sequence:
6.000 0.000 0.000 0.000 0.000 0.000
Recovered Sequence:
24.000 23.182 20.785 16.971 12.000 6.212
SunOS 5.0 — Last change: 10 Dec 1998