home *** CD-ROM | disk | FTP | other *** search
- C PROG5 PR500100
- C C.L.LAWSON AND R.J.HANSON, JET PROPULSION LABORATORY, 1973 JUN 12 PR500200
- C TO APPEAR IN 'SOLVING LEAST SQUARES PROBLEMS', PRENTICE-HALL, 1974PR500300
- C EXAMPLE OF THE USE OF SUBROUTINES BNDACC AND BNDSOL TO SOLVE PR500400
- C SEQUENTIALLY THE BANDED LEAST SQUARES PROBLEM WHICH ARISES IN PR500500
- C SPLINE CURVE FITTING. PR500600
- C PR500700
- DIMENSION X(12),Y(12),B(10),G(12,5),C(12),Q(4),COV(12) PR500800
- C PR500900
- C DEFINE FUNCTIONS P1 AND P2 TO BE USED IN CONSTRUCTING PR501000
- C CUBIC SPLINES OVER UNIFORMLY SPACED BREAKPOINTS. PR501100
- C PR501200
- P1(T)=.25*T**2*T PR501300
- P2(T)=-(1.-T)**2*(1.+T)*.75+1. PR501400
- CALL MPBRQQ
- ZERO=0. PR501500
- C PR501600
- WRITE (6,230) PR501700
- MDG=12 PR501800
- NBAND=4 PR501900
- M=12 PR502000
- C SET ORDINATES OF DATA PR502100
- Y(1)=2.2 PR502200
- Y(2)=4.0 PR502300
- Y(3)=5.0 PR502400
- Y(4)=4.6 PR502500
- Y(5)=2.8 PR502600
- Y(6)=2.7 PR502700
- Y(7)=3.8 PR502800
- Y(8)=5.1 PR502900
- Y(9)=6.1 PR503000
- Y(10)=6.3 PR503100
- Y(11)=5.0 PR503200
- Y(12)=2.0 PR503300
- C SET ABCISSAS OF DATA PR503400
- DO 10 I=1,M PR503500
- 10 X(I)=2*I PR503600
- C PR503700
- C BEGIN LOOP THRU CASES USING INCREASING NOS OF BREAKPOINTS. PR503800
- C PR503900
- DO 150 NBP=5,10 PR504000
- NC=NBP+2 PR504100
- C SET BREAKPOINTS PR504200
- B(1)=X(1) PR504300
- B(NBP)=X(M) PR504400
- H=(B(NBP)-B(1))/FLOAT(NBP-1) PR504500
- IF (NBP.LE.2) GO TO 30 PR504600
- DO 20 I=3,NBP PR504700
- 20 B(I-1)=B(I-2)+H PR504800
- 30 CONTINUE PR504900
- WRITE (6,240) NBP,(B(I),I=1,NBP) PR505000
- C PR505100
- C INITIALIZE IR AND IP BEFORE FIRST CALL TO BNDACC. PR505200
- C PR505300
- IR=1 PR505400
- IP=1 PR505500
- I=1 PR505600
- JT=1 PR505700
- 40 MT=0 PR505800
- 50 CONTINUE PR505900
- IF (X(I).GT.B(JT+1)) GO TO 60 PR506000
- C PR506100
- C SET ROW FOR ITH DATA POINT PR506200
- C PR506300
- U=(X(I)-B(JT))/H PR506400
- IG=IR+MT PR506500
- G(IG,1)=P1(1.-U) PR506600
- G(IG,2)=P2(1.-U) PR506700
- G(IG,3)=P2(U) PR506800
- G(IG,4)=P1(U) PR506900
- G(IG,5)=Y(I) PR507000
- MT=MT+1 PR507100
- IF (I.EQ.M) GO TO 60 PR507200
- I=I+1 PR507300
- GO TO 50 PR507400
- C PR507500
- C SEND BLOCK OF DATA TO PROCESSOR PR507600
- C PR507700
- 60 CONTINUE PR507800
- CALL BNDACC (G,MDG,NBAND,IP,IR,MT,JT) PR507900
- IF (I.EQ.M) GO TO 70 PR508000
- JT=JT+1 PR508100
- GO TO 40 PR508200
- C COMPUTE SOLUTION C() PR508300
- 70 CONTINUE PR508400
- CALL BNDSOL (1,G,MDG,NBAND,IP,IR,C,NC,RNORM) PR508500
- C WRITE SOLUTION COEFFICIENTS PR508600
- WRITE (6,180) (C(L),L=1,NC) PR508700
- WRITE (6,210) RNORM PR508800
- C PR508900
- C COMPUTE AND PRINT X,Y,YFIT,R=Y-YFIT PR509000
- C PR509100
- WRITE (6,160) PR509200
- JT=1 PR509300
- DO 110 I=1,M PR509400
- 80 IF (X(I).LE.B(JT+1)) GO TO 90 PR509500
- JT=JT+1 PR509600
- GO TO 80 PR509700
- C PR509800
- 90 U=(X(I)-B(JT))/H PR509900
- Q(1)=P1(1.-U) PR510000
- Q(2)=P2(1.-U) PR510100
- Q(3)=P2(U) PR510200
- Q(4)=P1(U) PR510300
- YFIT=ZERO PR510400
- DO 100 L=1,4 PR510500
- IC=JT-1+L PR510600
- 100 YFIT=YFIT+C(IC)*Q(L) PR510700
- R=Y(I)-YFIT PR510800
- WRITE (6,170) I,X(I),Y(I),YFIT,R PR510900
- 110 CONTINUE PR511000
- C PR511100
- C COMPUTE RESIDUAL VECTOR NORM. PR511200
- C PR511300
- IF (M.LE.NC) GO TO 150 PR511400
- SIGSQ=(RNORM**2)/FLOAT(M-NC) PR511500
- SIGFAC=SQRT(SIGSQ) PR511600
- WRITE (6,220) SIGFAC PR511700
- WRITE (6,200) PR511800
- C PR511900
- C COMPUTE AND PRINT COLS. OF COVARIANCE. PR512000
- C PR512100
- DO 140 J=1,NC PR512200
- DO 120 I=1,NC PR512300
- 120 COV(I)=ZERO PR512400
- COV(J)=1. PR512500
- CALL BNDSOL (2,G,MDG,NBAND,IP,IR,COV,NC,RDUMMY) PR512600
- CALL BNDSOL (3,G,MDG,NBAND,IP,IR,COV,NC,RDUMMY) PR512700
- C PR512800
- C COMPUTE THE JTH COL. OF THE COVARIANCE MATRIX. PR512900
- DO 130 I=1,NC PR513000
- 130 COV(I)=COV(I)*SIGSQ PR513100
- 140 WRITE (6,190) (L,J,COV(L),L=1,NC) PR513200
- 150 CONTINUE PR513300
- STOP PR513400
- 160 FORMAT (4H0 I,8X,1HX,10X,1HY,6X,4HYFIT,4X,8HR=Y-YFIT/1X) PR513500
- 170 FORMAT (1X,I3,4X,F6.0,4X,F6.2,4X,F6.2,4X,F8.4) PR513600
- 180 FORMAT (4H0C =,10F10.5/(4X,10F10.5)) PR513700
- 190 FORMAT (3(02X,2I4,E15.7)) PR513800
- 200 FORMAT (46H0COVARIANCE MATRIX OF THE SPLINE COEFFICIENTS.) PR513900
- 210 FORMAT (9H0RNORM =,E15.8) PR514000
- 220 FORMAT (9H0SIGFAC =,E15.8) PR514100
- 230 FORMAT (50H1PROG5. EXECUTE A SEQUENCE OF CUBIC SPLINE FITS,27H PR514200
- 1TO A DISCRETE SET OF DATA.) PR514300
- 240 FORMAT (1X////,11H0NEW CASE..,/47H0NUMBER OF BREAKPOINTS, INCLUDINPR514400
- 1G ENDPOINTS, IS,I5/14H0BREAKPOINTS =,10F10.5,/(14X,10F10.5)) PR514500
- END PR514600