Free cookie consent management tool by TermsFeed Policy Generator

source: branches/MathNetNumerics-Exploration-2789/HeuristicLab.Algorithms.DataAnalysis.Experimental/642.f @ 15443

Last change on this file since 15443 was 15443, checked in by gkronber, 6 years ago

#2789 added interface to CUBGCV using DllImport of Fortran library

File size: 17.9 KB
Line 
1       MODULE MODCUBGCV
2       CONTAINS
3C     ALGORITHM 642 COLLECTED ALGORITHMS FROM ACM.
4C     ALGORITHM APPEARED IN ACM-TRANS. MATH. SOFTWARE, VOL.12, NO. 2,
5C     JUN., 1986, P. 150.
6C   SUBROUTINE NAME     - CUBGCV
7C
8C--------------------------------------------------------------------------
9C
10C   COMPUTER            - VAX/DOUBLE
11C
12C   AUTHOR              - M.F.HUTCHINSON
13C                         CSIRO DIVISION OF MATHEMATICS AND STATISTICS
14C                         P.O. BOX 1965
15C                         CANBERRA, ACT 2601
16C                         AUSTRALIA
17C
18C   LATEST REVISION     - 15 AUGUST 1985
19C
20C   PURPOSE             - CUBIC SPLINE DATA SMOOTHER
21C
22C   USAGE               - CALL CUBGCV (X,F,DF,N,Y,C,IC,VAR,JOB,SE,WK,IER)
23C
24C   ARGUMENTS    X      - VECTOR OF LENGTH N CONTAINING THE
25C                           ABSCISSAE OF THE N DATA POINTS
26C                           (X(I),F(I)) I=1..N. (INPUT) X
27C                           MUST BE ORDERED SO THAT
28C                           X(I) .LT. X(I+1).
29C                F      - VECTOR OF LENGTH N CONTAINING THE
30C                           ORDINATES (OR FUNCTION VALUES)
31C                           OF THE N DATA POINTS (INPUT).
32C                DF     - VECTOR OF LENGTH N. (INPUT/OUTPUT)
33C                           DF(I) IS THE RELATIVE STANDARD DEVIATION
34C                           OF THE ERROR ASSOCIATED WITH DATA POINT I.
35C                           EACH DF(I) MUST BE POSITIVE.  THE VALUES IN
36C                           DF ARE SCALED BY THE SUBROUTINE SO THAT
37C                           THEIR MEAN SQUARE VALUE IS 1, AND UNSCALED
38C                           AGAIN ON NORMAL EXIT.
39C                           THE MEAN SQUARE VALUE OF THE DF(I) IS RETURNED
40C                           IN WK(7) ON NORMAL EXIT.
41C                           IF THE ABSOLUTE STANDARD DEVIATIONS ARE KNOWN,
42C                           THESE SHOULD BE PROVIDED IN DF AND THE ERROR
43C                           VARIANCE PARAMETER VAR (SEE BELOW) SHOULD THEN
44C                           BE SET TO 1.
45C                           IF THE RELATIVE STANDARD DEVIATIONS ARE UNKNOWN,
46C                           SET EACH DF(I)=1.
47C                N      - NUMBER OF DATA POINTS (INPUT).
48C                           N MUST BE .GE. 3.
49C                Y,C    - SPLINE COEFFICIENTS. (OUTPUT) Y
50C                           IS A VECTOR OF LENGTH N. C IS
51C                           AN N-1 BY 3 MATRIX. THE VALUE
52C                           OF THE SPLINE APPROXIMATION AT T IS
53C                           S(T)=((C(I,3)*D+C(I,2))*D+C(I,1))*D+Y(I)
54C                           WHERE X(I).LE.T.LT.X(I+1) AND
55C                           D = T-X(I).
56C                IC     - ROW DIMENSION OF MATRIX C EXACTLY
57C                           AS SPECIFIED IN THE DIMENSION
58C                           STATEMENT IN THE CALLING PROGRAM. (INPUT)
59C                VAR    - ERROR VARIANCE. (INPUT/OUTPUT)
60C                           IF VAR IS NEGATIVE (I.E. UNKNOWN) THEN
61C                           THE SMOOTHING PARAMETER IS DETERMINED
62C                           BY MINIMIZING THE GENERALIZED CROSS VALIDATION
63C                           AND AN ESTIMATE OF THE ERROR VARIANCE IS
64C                           RETURNED IN VAR.
65C                           IF VAR IS NON-NEGATIVE (I.E. KNOWN) THEN THE
66C                           SMOOTHING PARAMETER IS DETERMINED TO MINIMIZE
67C                           AN ESTIMATE, WHICH DEPENDS ON VAR, OF THE TRUE
68C                           MEAN SQUARE ERROR, AND VAR IS UNCHANGED.
69C                           IN PARTICULAR, IF VAR IS ZERO, THEN AN
70C                           INTERPOLATING NATURAL CUBIC SPLINE IS CALCULATED.
71C                           VAR SHOULD BE SET TO 1 IF ABSOLUTE STANDARD
72C                           DEVIATIONS HAVE BEEN PROVIDED IN DF (SEE ABOVE).
73C                JOB    - JOB SELECTION PARAMETER. (INPUT)
74C                         JOB = 0 SHOULD BE SELECTED IF POINT STANDARD ERROR
75C                           ESTIMATES ARE NOT REQUIRED IN SE.
76C                         JOB = 1 SHOULD BE SELECTED IF POINT STANDARD ERROR
77C                           ESTIMATES ARE REQUIRED IN SE.
78C                SE     - VECTOR OF LENGTH N CONTAINING BAYESIAN STANDARD
79C                           ERROR ESTIMATES OF THE FITTED SPLINE VALUES IN Y.
80C                           SE IS NOT REFERENCED IF JOB=0. (OUTPUT)
81C                WK     - WORK VECTOR OF LENGTH 7*(N + 2). ON NORMAL EXIT THE
82C                           FIRST 7 VALUES OF WK ARE ASSIGNED AS FOLLOWS:-
83C
84C                           WK(1) = SMOOTHING PARAMETER (= RHO/(RHO + 1))
85C                           WK(2) = ESTIMATE OF THE NUMBER OF DEGREES OF
86C                                   FREEDOM OF THE RESIDUAL SUM OF SQUARES
87C                           WK(3) = GENERALIZED CROSS VALIDATION
88C                           WK(4) = MEAN SQUARE RESIDUAL
89C                           WK(5) = ESTIMATE OF THE TRUE MEAN SQUARE ERROR
90C                                   AT THE DATA POINTS
91C                           WK(6) = ESTIMATE OF THE ERROR VARIANCE
92C                           WK(7) = MEAN SQUARE VALUE OF THE DF(I)
93C
94C                           IF WK(1)=0 (RHO=0) AN INTERPOLATING NATURAL CUBIC
95C                           SPLINE HAS BEEN CALCULATED.
96C                           IF WK(1)=1 (RHO=INFINITE) A LEAST SQUARES
97C                           REGRESSION LINE HAS BEEN CALCULATED.
98C                           WK(2) IS AN ESTIMATE OF THE NUMBER OF DEGREES OF
99C                           FREEDOM OF THE RESIDUAL WHICH REDUCES TO THE
100C                           USUAL VALUE OF N-2 WHEN A LEAST SQUARES REGRESSION
101C                           LINE IS CALCULATED.
102C                           WK(3),WK(4),WK(5) ARE CALCULATED WITH THE DF(I)
103C                           SCALED TO HAVE MEAN SQUARE VALUE 1.  THE
104C                           UNSCALED VALUES OF WK(3),WK(4),WK(5) MAY BE
105C                           CALCULATED BY DIVIDING BY WK(7).
106C                           WK(6) COINCIDES WITH THE OUTPUT VALUE OF VAR IF
107C                           VAR IS NEGATIVE ON INPUT.  IT IS CALCULATED WITH
108C                           THE UNSCALED VALUES OF THE DF(I) TO FACILITATE
109C                           COMPARISONS WITH A PRIORI VARIANCE ESTIMATES.
110C
111C                IER    - ERROR PARAMETER. (OUTPUT)
112C                         TERMINAL ERROR
113C                           IER = 129, IC IS LESS THAN N-1.
114C                           IER = 130, N IS LESS THAN 3.
115C                           IER = 131, INPUT ABSCISSAE ARE NOT
116C                             ORDERED SO THAT X(I).LT.X(I+1).
117C                           IER = 132, DF(I) IS NOT POSITIVE FOR SOME I.
118C                           IER = 133, JOB IS NOT 0 OR 1.
119C
120C   PRECISION/HARDWARE  - DOUBLE
121C
122C   REQUIRED ROUTINES   - SPINT1,SPFIT1,SPCOF1,SPERR1
123C
124C   REMARKS      THE NUMBER OF ARITHMETIC OPERATIONS REQUIRED BY THE
125C                SUBROUTINE IS PROPORTIONAL TO N.  THE SUBROUTINE
126C                USES AN ALGORITHM DEVELOPED BY M.F. HUTCHINSON AND
127C                F.R. DE HOOG, 'SMOOTHING NOISY DATA WITH SPLINE
128C                FUNCTIONS', NUMER. MATH. (IN PRESS)
129C
130C-----------------------------------------------------------------------
131C
132       SUBROUTINE CUBGCV(X,F,DF,N,Y,C,IC,VAR,JOB,SE,WK,IER)
133     . BIND(C, NAME='cubgcv')
134      USE ISO_C_BINDING
135C
136C---SPECIFICATIONS FOR ARGUMENTS---
137      INTEGER N,IC,JOB,IER
138      DOUBLE PRECISION X(N),F(N),DF(N),Y(N),C(IC,3),SE(N),VAR,
139     .                 WK(0:N+1,7)
140C
141C---SPECIFICATIONS FOR LOCAL VARIABLES---
142      DOUBLE PRECISION DELTA,ERR,GF1,GF2,GF3,GF4,R1,R2,R3,R4,TAU,RATIO,
143     .                 AVH,AVDF,AVAR,ZERO,ONE,STAT(6),P,Q
144C
145      DATA RATIO/2.0D0/
146      DATA TAU/1.618033989D0/
147      DATA ZERO,ONE/0.0D0,1.0D0/
148C
149C---INITIALIZE---
150      IER = 133
151      IF (JOB.LT.0 .OR. JOB.GT.1) GO TO 140
152      CALL SPINT1(X,AVH,F,DF,AVDF,N,Y,C,IC,WK,WK(0,4),IER)
153      IF (IER.NE.0) GO TO 140
154      AVAR = VAR
155      IF (VAR.GT.ZERO) AVAR = VAR*AVDF*AVDF
156C
157C---CHECK FOR ZERO VARIANCE---
158      IF (VAR.NE.ZERO) GO TO 10
159      R1 = ZERO
160      GO TO 90
161C
162C---FIND LOCAL MINIMUM OF GCV OR THE EXPECTED MEAN SQUARE ERROR---
163   10 R1 = ONE
164      R2 = RATIO*R1
165      CALL SPFIT1(X,AVH,DF,N,R2,P,Q,GF2,AVAR,STAT,Y,C,IC,WK,WK(0,4),
166     .            WK(0,6),WK(0,7))
167   20 CALL SPFIT1(X,AVH,DF,N,R1,P,Q,GF1,AVAR,STAT,Y,C,IC,WK,WK(0,4),
168     .            WK(0,6),WK(0,7))
169      IF (GF1.GT.GF2) GO TO 30
170C
171C---EXIT IF P ZERO---
172      IF (P.LE.ZERO) GO TO 100
173      R2 = R1
174      GF2 = GF1
175      R1 = R1/RATIO
176      GO TO 20
177
178   30 R3 = RATIO*R2
179   40 CALL SPFIT1(X,AVH,DF,N,R3,P,Q,GF3,AVAR,STAT,Y,C,IC,WK,WK(0,4),
180     .            WK(0,6),WK(0,7))
181      IF (GF3.GT.GF2) GO TO 50
182C
183C---EXIT IF Q ZERO---
184      IF (Q.LE.ZERO) GO TO 100
185      R2 = R3
186      GF2 = GF3
187      R3 = RATIO*R3
188      GO TO 40
189
190   50 R2 = R3
191      GF2 = GF3
192      DELTA = (R2-R1)/TAU
193      R4 = R1 + DELTA
194      R3 = R2 - DELTA
195      CALL SPFIT1(X,AVH,DF,N,R3,P,Q,GF3,AVAR,STAT,Y,C,IC,WK,WK(0,4),
196     .            WK(0,6),WK(0,7))
197      CALL SPFIT1(X,AVH,DF,N,R4,P,Q,GF4,AVAR,STAT,Y,C,IC,WK,WK(0,4),
198     .            WK(0,6),WK(0,7))
199C
200C---GOLDEN SECTION SEARCH FOR LOCAL MINIMUM---
201   60 IF (GF3.GT.GF4) GO TO 70
202      R2 = R4
203      GF2 = GF4
204      R4 = R3
205      GF4 = GF3
206      DELTA = DELTA/TAU
207      R3 = R2 - DELTA
208      CALL SPFIT1(X,AVH,DF,N,R3,P,Q,GF3,AVAR,STAT,Y,C,IC,WK,WK(0,4),
209     .            WK(0,6),WK(0,7))
210      GO TO 80
211
212   70 R1 = R3
213      GF1 = GF3
214      R3 = R4
215      GF3 = GF4
216      DELTA = DELTA/TAU
217      R4 = R1 + DELTA
218      CALL SPFIT1(X,AVH,DF,N,R4,P,Q,GF4,AVAR,STAT,Y,C,IC,WK,WK(0,4),
219     .            WK(0,6),WK(0,7))
220   80 ERR = (R2-R1)/ (R1+R2)
221      IF (ERR*ERR+ONE.GT.ONE .AND. ERR.GT.1.0D-6) GO TO 60
222      R1 = (R1+R2)*0.5D0
223C
224C---CALCULATE SPLINE COEFFICIENTS---
225   90 CALL SPFIT1(X,AVH,DF,N,R1,P,Q,GF1,AVAR,STAT,Y,C,IC,WK,WK(0,4),
226     .            WK(0,6),WK(0,7))
227  100 CALL SPCOF1(X,AVH,F,DF,N,P,Q,Y,C,IC,WK(0,6),WK(0,7))
228C
229C---OPTIONALLY CALCULATE STANDARD ERROR ESTIMATES---
230      IF (VAR.GE.ZERO) GO TO 110
231      AVAR = STAT(6)
232      VAR = AVAR/ (AVDF*AVDF)
233  110 IF (JOB.EQ.1) CALL SPERR1(X,AVH,DF,N,WK,P,AVAR,SE)
234C
235C---UNSCALE DF---
236      DO 120 I = 1,N
237         DF(I) = DF(I)*AVDF
238  120 CONTINUE
239C
240C--PUT STATISTICS IN WK---
241      DO 130 I = 0,5
242         WK(I,1) = STAT(I+1)
243  130 CONTINUE
244      WK(5,1) = STAT(6)/ (AVDF*AVDF)
245      WK(6,1) = AVDF*AVDF
246      GO TO 150
247C
248C---CHECK FOR ERROR CONDITION---
249  140 CONTINUE
250C     IF (IER.NE.0) CONTINUE
251  150 RETURN
252      END
253C     *******************************************************
254      SUBROUTINE SPINT1(X,AVH,Y,DY,AVDY,N,A,C,IC,R,T,IER)
255C
256C INITIALIZES THE ARRAYS C, R AND T FOR ONE DIMENSIONAL CUBIC
257C SMOOTHING SPLINE FITTING BY SUBROUTINE SPFIT1.  THE VALUES
258C DF(I) ARE SCALED SO THAT THE SUM OF THEIR SQUARES IS N
259C AND THE AVERAGE OF THE DIFFERENCES X(I+1) - X(I) IS CALCULATED
260C IN AVH IN ORDER TO AVOID UNDERFLOW AND OVERFLOW PROBLEMS IN
261C SPFIT1.
262C
263C SUBROUTINE SETS IER IF ELEMENTS OF X ARE NON-INCREASING,
264C IF N IS LESS THAN 3, IF IC IS LESS THAN N-1 OR IF DY(I) IS
265C NOT POSITIVE FOR SOME I.
266C
267C---SPECIFICATIONS FOR ARGUMENTS---
268      INTEGER N,IC,IER
269      DOUBLE PRECISION X(N),Y(N),DY(N),A(N),C(IC,3),R(0:N+1,3),
270     .                 T(0:N+1,2),AVH,AVDY
271C
272C---SPECIFICATIONS FOR LOCAL VARIABLES---
273      INTEGER I
274      DOUBLE PRECISION E,F,G,H,ZERO
275      DATA ZERO/0.0D0/
276C
277C---INITIALIZATION AND INPUT CHECKING---
278      IER = 0
279      IF (N.LT.3) GO TO 60
280      IF (IC.LT.N-1) GO TO 70
281C
282C---GET AVERAGE X SPACING IN AVH---
283      G = ZERO
284      DO 10 I = 1,N - 1
285         H = X(I+1) - X(I)
286         IF (H.LE.ZERO) GO TO 80
287         G = G + H
288   10 CONTINUE
289      AVH = G/ (N-1)
290C
291C---SCALE RELATIVE WEIGHTS---
292      G = ZERO
293      DO 20 I = 1,N
294         IF (DY(I).LE.ZERO) GO TO 90
295         G = G + DY(I)*DY(I)
296   20 CONTINUE
297      AVDY = DSQRT(G/N)
298C
299      DO 30 I = 1,N
300         DY(I) = DY(I)/AVDY
301   30 CONTINUE
302C
303C---INITIALIZE H,F---
304      H = (X(2)-X(1))/AVH
305      F = (Y(2)-Y(1))/H
306C
307C---CALCULATE A,T,R---
308      DO 40 I = 2,N - 1
309         G = H
310         H = (X(I+1)-X(I))/AVH
311         E = F
312         F = (Y(I+1)-Y(I))/H
313         A(I) = F - E
314         T(I,1) = 2.0D0* (G+H)/3.0D0
315         T(I,2) = H/3.0D0
316         R(I,3) = DY(I-1)/G
317         R(I,1) = DY(I+1)/H
318         R(I,2) = -DY(I)/G - DY(I)/H
319   40 CONTINUE
320C
321C---CALCULATE C = R'*R---
322      R(N,2) = ZERO
323      R(N,3) = ZERO
324      R(N+1,3) = ZERO
325      DO 50 I = 2,N - 1
326         C(I,1) = R(I,1)*R(I,1) + R(I,2)*R(I,2) + R(I,3)*R(I,3)
327         C(I,2) = R(I,1)*R(I+1,2) + R(I,2)*R(I+1,3)
328         C(I,3) = R(I,1)*R(I+2,3)
329   50 CONTINUE
330      RETURN
331C
332C---ERROR CONDITIONS---
333   60 IER = 130
334      RETURN
335
336   70 IER = 129
337      RETURN
338
339   80 IER = 131
340      RETURN
341
342   90 IER = 132
343      RETURN
344      END
345      SUBROUTINE SPFIT1(X,AVH,DY,N,RHO,P,Q,FUN,VAR,STAT,A,C,IC,R,T,U,V)
346C
347C FITS A CUBIC SMOOTHING SPLINE TO DATA WITH RELATIVE
348C WEIGHTING DY FOR A GIVEN VALUE OF THE SMOOTHING PARAMETER
349C RHO USING AN ALGORITHM BASED ON THAT OF C.H. REINSCH (1967),
350C NUMER. MATH. 10, 177-183.
351C
352C THE TRACE OF THE INFLUENCE MATRIX IS CALCULATED USING AN
353C ALGORITHM DEVELOPED BY M.F.HUTCHINSON AND F.R.DE HOOG (NUMER.
354C MATH., IN PRESS), ENABLING THE GENERALIZED CROSS VALIDATION
355C AND RELATED STATISTICS TO BE CALCULATED IN ORDER N OPERATIONS.
356C
357C THE ARRAYS A, C, R AND T ARE ASSUMED TO HAVE BEEN INITIALIZED
358C BY THE SUBROUTINE SPINT1.  OVERFLOW AND UNDERFLOW PROBLEMS ARE
359C AVOIDED BY USING P=RHO/(1 + RHO) AND Q=1/(1 + RHO) INSTEAD OF
360C RHO AND BY SCALING THE DIFFERENCES X(I+1) - X(I) BY AVH.
361C
362C THE VALUES IN DF ARE ASSUMED TO HAVE BEEN SCALED SO THAT THE
363C SUM OF THEIR SQUARED VALUES IS N.  THE VALUE IN VAR, WHEN IT IS
364C NON-NEGATIVE, IS ASSUMED TO HAVE BEEN SCALED TO COMPENSATE FOR
365C THE SCALING OF THE VALUES IN DF.
366C
367C THE VALUE RETURNED IN FUN IS AN ESTIMATE OF THE TRUE MEAN SQUARE
368C WHEN VAR IS NON-NEGATIVE, AND IS THE GENERALIZED CROSS VALIDATION
369C WHEN VAR IS NEGATIVE.
370C
371C---SPECIFICATIONS FOR ARGUMENTS---
372      INTEGER IC,N
373      DOUBLE PRECISION X(N),DY(N),RHO,STAT(6),A(N),C(IC,3),R(0:N+1,3),
374     .                 T(0:N+1,2),U(0:N+1),V(0:N+1),FUN,VAR,AVH,P,Q
375C
376C---LOCAL VARIABLES---
377      INTEGER I
378      DOUBLE PRECISION E,F,G,H,ZERO,ONE,TWO,RHO1
379      DATA ZERO,ONE,TWO/0.0D0,1.0D0,2.0D0/
380C
381C---USE P AND Q INSTEAD OF RHO TO PREVENT OVERFLOW OR UNDERFLOW---
382      RHO1 = ONE + RHO
383      P = RHO/RHO1
384      Q = ONE/RHO1
385      IF (RHO1.EQ.ONE) P = ZERO
386      IF (RHO1.EQ.RHO) Q = ZERO
387C
388C---RATIONAL CHOLESKY DECOMPOSITION OF P*C + Q*T---
389      F = ZERO
390      G = ZERO
391      H = ZERO
392      DO 10 I = 0,1
393         R(I,1) = ZERO
394   10 CONTINUE
395      DO 20 I = 2,N - 1
396         R(I-2,3) = G*R(I-2,1)
397         R(I-1,2) = F*R(I-1,1)
398         R(I,1) = ONE/ (P*C(I,1)+Q*T(I,1)-F*R(I-1,2)-G*R(I-2,3))
399         F = P*C(I,2) + Q*T(I,2) - H*R(I-1,2)
400         G = H
401         H = P*C(I,3)
402   20 CONTINUE
403C
404C---SOLVE FOR U---
405      U(0) = ZERO
406      U(1) = ZERO
407      DO 30 I = 2,N - 1
408         U(I) = A(I) - R(I-1,2)*U(I-1) - R(I-2,3)*U(I-2)
409   30 CONTINUE
410      U(N) = ZERO
411      U(N+1) = ZERO
412      DO 40 I = N - 1,2,-1
413         U(I) = R(I,1)*U(I) - R(I,2)*U(I+1) - R(I,3)*U(I+2)
414   40 CONTINUE
415C
416C---CALCULATE RESIDUAL VECTOR V---
417      E = ZERO
418      H = ZERO
419      DO 50 I = 1,N - 1
420         G = H
421         H = (U(I+1)-U(I))/ ((X(I+1)-X(I))/AVH)
422         V(I) = DY(I)* (H-G)
423         E = E + V(I)*V(I)
424   50 CONTINUE
425      V(N) = DY(N)* (-H)
426      E = E + V(N)*V(N)
427C
428C---CALCULATE UPPER THREE BANDS OF INVERSE MATRIX---
429      R(N,1) = ZERO
430      R(N,2) = ZERO
431      R(N+1,1) = ZERO
432      DO 60 I = N - 1,2,-1
433         G = R(I,2)
434         H = R(I,3)
435         R(I,2) = -G*R(I+1,1) - H*R(I+1,2)
436         R(I,3) = -G*R(I+1,2) - H*R(I+2,1)
437         R(I,1) = R(I,1) - G*R(I,2) - H*R(I,3)
438   60 CONTINUE
439C
440C---CALCULATE TRACE---
441      F = ZERO
442      G = ZERO
443      H = ZERO
444      DO 70 I = 2,N - 1
445         F = F + R(I,1)*C(I,1)
446         G = G + R(I,2)*C(I,2)
447         H = H + R(I,3)*C(I,3)
448   70 CONTINUE
449      F = F + TWO* (G+H)
450C
451C---CALCULATE STATISTICS---
452      STAT(1) = P
453      STAT(2) = F*P
454      STAT(3) = N*E/ (F*F)
455      STAT(4) = E*P*P/N
456      STAT(6) = E*P/F
457      IF (VAR.GE.ZERO) GO TO 80
458      STAT(5) = STAT(6) - STAT(4)
459      FUN = STAT(3)
460      GO TO 90
461
462   80 STAT(5) = DMAX1(STAT(4)-TWO*VAR*STAT(2)/N+VAR,ZERO)
463      FUN = STAT(5)
464   90 RETURN
465      END
466      SUBROUTINE SPERR1(X,AVH,DY,N,R,P,VAR,SE)
467C
468C CALCULATES BAYESIAN ESTIMATES OF THE STANDARD ERRORS OF THE FITTED
469C VALUES OF A CUBIC SMOOTHING SPLINE BY CALCULATING THE DIAGONAL ELEMENTS
470C OF THE INFLUENCE MATRIX.
471C
472C---SPECIFICATIONS FOR ARGUMENTS---
473      INTEGER N
474      DOUBLE PRECISION X(N),DY(N),R(0:N+1,3),SE(N),AVH,P,VAR
475C
476C---SPECIFICATIONS FOR LOCAL VARIABLES---
477      INTEGER I
478      DOUBLE PRECISION F,G,H,F1,G1,H1,ZERO,ONE
479      DATA ZERO,ONE/0.0D0,1.0D0/
480C
481C---INITIALIZE---
482      H = AVH/ (X(2)-X(1))
483      SE(1) = ONE - P*DY(1)*DY(1)*H*H*R(2,1)
484      R(1,1) = ZERO
485      R(1,2) = ZERO
486      R(1,3) = ZERO
487C
488C---CALCULATE DIAGONAL ELEMENTS---
489      DO 10 I = 2,N - 1
490         F = H
491         H = AVH/ (X(I+1)-X(I))
492         G = -F - H
493         F1 = F*R(I-1,1) + G*R(I-1,2) + H*R(I-1,3)
494         G1 = F*R(I-1,2) + G*R(I,1) + H*R(I,2)
495         H1 = F*R(I-1,3) + G*R(I,2) + H*R(I+1,1)
496         SE(I) = ONE - P*DY(I)*DY(I)* (F*F1+G*G1+H*H1)
497   10 CONTINUE
498      SE(N) = ONE - P*DY(N)*DY(N)*H*H*R(N-1,1)
499C
500C---CALCULATE STANDARD ERROR ESTIMATES---
501      DO 20 I = 1,N
502         SE(I) = DSQRT(DMAX1(SE(I)*VAR,ZERO))*DY(I)
503   20 CONTINUE
504      RETURN
505      END
506      SUBROUTINE SPCOF1(X,AVH,Y,DY,N,P,Q,A,C,IC,U,V)
507C
508C CALCULATES COEFFICIENTS OF A CUBIC SMOOTHING SPLINE FROM
509C PARAMETERS CALCULATED BY SUBROUTINE SPFIT1.
510C
511C---SPECIFICATIONS FOR ARGUMENTS---
512      INTEGER IC,N
513      DOUBLE PRECISION X(N),Y(N),DY(N),P,Q,A(N),C(IC,3),U(0:N+1),
514     .                 V(0:N+1),AVH
515C
516C---SPECIFICATIONS FOR LOCAL VARIABLES---
517      INTEGER I
518      DOUBLE PRECISION H,QH
519C
520C---CALCULATE A---
521      QH = Q/ (AVH*AVH)
522      DO 10 I = 1,N
523         A(I) = Y(I) - P*DY(I)*V(I)
524         U(I) = QH*U(I)
525   10 CONTINUE
526C
527C---CALCULATE C---
528      DO 20 I = 1,N - 1
529         H = X(I+1) - X(I)
530         C(I,3) = (U(I+1)-U(I))/ (3.0D0*H)
531         C(I,1) = (A(I+1)-A(I))/H - (H*C(I,3)+U(I))*H
532         C(I,2) = U(I)
533   20 CONTINUE
534      RETURN
535      END
536      END MODULE
Note: See TracBrowser for help on using the repository browser.