+++ /dev/null
-*
-* $Id$
-*
-* $Log$
-* Revision 1.1.1.1 1996/04/01 15:02:20 mclareni
-* Mathlib gen
-*
-*
-#include "gen/pilot.h"
- SUBROUTINE MINSQ (M,N,F,X,E,IPRINT,NFUN ,NW,W,COV,XSTEP)
- DIMENSION F(M),X(N),E(N),W(NW)
- IFLAG=1
- ESCALE=1.
- MAXFUN=NFUN
- MPLUSN=M+N
- KST=N+MPLUSN
- NPLUS=N+1
- KINV=NPLUS*(MPLUSN+1)
- KSTORE=KINV-MPLUSN-1
- CALL FCN1(M,N,F,X,IFLAG,NW,W,KEND,KEND2N)
- IFLAG=4
- NN=N+N
- K=NN
- DO 1 I=1,M
- K=K+1
- W(K)=F(I)
- 1 CONTINUE
- IINV=2
- K=KST
- I=1
- 2 X(I)=X(I)+E(I)
- CALL FCN1(M,N,F,X,IFLAG,NW,W,KEND,KEND2N)
- X(I)=X(I)-E(I)
- DO 3 J=1,N
- K=K+1
- W(K)=0.
- W(J)=0.
- 3 CONTINUE
- SUM=0.
- KK=NN
- DO 4 J=1,M
- KK=KK+1
- F(J)=F(J)-W(KK)
- SUM=SUM+F(J)*F(J)
- 4 CONTINUE
- IF (SUM) 5,5,6
- 5 WRITE(6,7)I
- 7 FORMAT(5X,'E(',I3,') UNREASONABLY SMALL')
- RETURN
- 6 SUM=1./SQRT (SUM)
- J=K-N+I
- W(J)=E(I)*SUM
- DO 9 J=1,M
- K=K+1
- W(K)=F(J)*SUM
- KK=NN+J
- DO 11 II=1,I
- KK=KK+MPLUSN
- W(II)=W(II)+W(KK)*W(K)
- 11 CONTINUE
- 9 CONTINUE
- ILESS=I-1
- IGAMAX=N+I-1
- INCINV=N-ILESS
- INCINP=INCINV+1
- IF (ILESS) 13,13,14
- 13 W(KINV)=1.
- GO TO 15
- 14 B=1.
- DO 16 J=NPLUS,IGAMAX
- W(J)=0.
- 16 CONTINUE
- KK=KINV
- DO 17 II=1,ILESS
- IIP=II+N
- W(IIP)=W(IIP)+W(KK)*W(II)
- JL=II+1
- IF (JL-ILESS) 18,18,19
- 18 DO 20 JJ=JL,ILESS
- KK=KK+1
- JJP=JJ+N
- W(IIP)=W(IIP)+W(KK)*W(JJ)
- W(JJP)=W(JJP)+W(KK)*W(II)
- 20 CONTINUE
- 19 B=B-W(II)*W(IIP)
- KK=KK+INCINP
- 17 CONTINUE
- B=1./B
- KK=KINV
- DO 21 II=NPLUS,IGAMAX
- BB=-B*W(II)
- DO 22 JJ=II,IGAMAX
- W(KK)=W(KK)-BB*W(JJ)
- KK=KK+1
- 22 CONTINUE
- W(KK)=BB
- KK=KK+INCINV
- 21 CONTINUE
- W(KK)=B
- 15 GO TO (27,24),IINV
- 24 I=I+1
- IF (I-N) 2,2,25
- 25 IINV=1
- FF=0.
- KL=NN
- DO 26 I=1,M
- KL=KL+1
- F(I)=W(KL)
- FF=FF+F(I)*F(I)
- 26 CONTINUE
- ICONT = 1
- ISS=1
- MC=N+1
- IPP=IPRINT*(IPRINT-1)
- ITC=0
- IPS=1
- IPC=0
- 27 IPC=IPC-IPRINT
- IF (IPC) 28,29,29
- 28 WRITE(6,30)ITC,MC,FF
- 30 FORMAT(//5X,'ITERATION',I4,I9,' CALLS OF FCN ',5X,'F=',E24.14)
- WRITE(6,31)(X(I),I=1,N)
- 31 FORMAT(5X,'VARIABLES',/(5E24.14))
- WRITE(6,32)(F(I),I=1,M)
- 32 FORMAT(5X,'FUNCTIONS',/(5E24.14))
- IPC=IPP
- GO TO (29,33),IPS
- 29 GO TO (34,35),ICONT
- 35 IF (CHANGE-1.) 10,10,36
- 10 CONTINUE
-C*UL 37 WRITE(6,38)
- WRITE(6,38)
- 38 FORMAT(//5X,' FINAL VALUES OF FUNCTIONS AND VARIABLES')
- IPS=2
- GO TO 28
- 33 IFLAG=3
- CALL FCN1(M,N,F,X,IFLAG,NW,W,KEND,KEND2N)
- IF(COV.EQ.0.) RETURN
- IWC1 = 2*N+N*(N+M)
- IWC=IWC1
- DO 91 I=1,N
- DO 91 J=1,I
- IWC=IWC+1
- W(IWC)=0.
- DO 90 MR=1,N
- JCOV=N+J+MR*(N+M)
- ICOV=N+I+MR*(N+M)
- 90 W(IWC)=W(IWC)+W(ICOV)*W(JCOV)
- 91 CONTINUE
- WRITE(6,1000)
- 1000 FORMAT(///40X,'VARIANCE-COVARIANCE MATRIX'///)
- IB=IWC1
- DO 92 I=1,N
- IA=IB+1
- IB=IB+I
- 92 WRITE(6,1001)(W(J),J=IA,IB)
- 1001 FORMAT(10X,5G20.6//)
- RETURN
- 36 ICONT=1
- 34 ITC=ITC+1
- K=N
- KK=KST
- DO 39 I=1,N
- K=K+1
- W(K)=0.
- KK=KK+N
- W(I)=0.
- DO 40 J=1,M
- KK=KK+1
- W(I)=W(I)+W(KK)*F(J)
- 40 CONTINUE
- 39 CONTINUE
- DM=0.
- K=KINV
- DO 41 II=1,N
- IIP=II+N
- W(IIP)=W(IIP)+W(K)*W(II)
- JL=II+1
- IF (JL-N) 42,42,43
- 42 DO 44 JJ=JL,N
- JJP=JJ+N
- K=K+1
- W(IIP)=W(IIP)+W(K)*W(JJ)
- W(JJP)=W(JJP)+W(K)*W(II)
- 44 CONTINUE
- K=K+1
- 43 IF (DM-ABS (W(II)*W(IIP))) 45,41,41
- 45 DM=ABS (W(II)*W(IIP))
- KL=II
- 41 CONTINUE
- II=N+MPLUSN*KL
- CHANGE=0.
- DO 46 I=1,N
- JL=N+I
- W(I)=0.
- DO 47 J=NPLUS,NN
- JL=JL+MPLUSN
- W(I)=W(I)+W(J)*W(JL)
- 47 CONTINUE
- II=II+1
- W(II)=W(JL)
- W(JL)=X(I)
- IF (ABS (E(I)*CHANGE)-ABS (W(I))) 48,48,46
- 48 CHANGE=ABS (W(I)/E(I))
- 46 CONTINUE
- DO 49 I=1,M
- II=II+1
- JL=JL+1
- W(II)=W(JL)
- W(JL)=F(I)
- 49 CONTINUE
- FC=FF
- ACC=0.1/CHANGE
- IT=3
- XC=0.
- XL=0.
- IS=3
- IF (CHANGE-1.) 50,50,51
- 50 ICONT=2
- 51 CALL VD01A (IT,XC,FC,20,ACC,0.1,XSTEP)
- GO TO (52,53,53,53),IT
- 52 MC=MC+1
- IF (MC-MAXFUN) 54,54,55
- 55 WRITE(6,56)MAXFUN
- 56 FORMAT(5X,I6,' CALLS OF FCN')
- ISS=2
- GO TO 53
- 54 XL=XC-XL
- DO 57 J=1,N
- X(J)=X(J)+XL*W(J)
- 57 CONTINUE
- XL=XC
- CALL FCN1(M,N,F,X,IFLAG,NW,W,KEND,KEND2N)
- FC=0.
- DO 58 J=1,M
- FC=FC+F(J)*F(J)
- 58 CONTINUE
- GO TO (59,59,60),IS
- 60 K=N
- IF (FC-FF) 61,51,62
- 61 IS=2
- FMIN=FC
- FSEC=FF
- GO TO 63
- 62 IS=1
- FMIN=FF
- FSEC=FC
- GO TO 63
- 59 IF (FC-FSEC) 64,51,51
- 64 K=KSTORE
- GO TO (75,74),IS
- 75 K=N
- 74 IF (FC-FMIN) 65,51,66
- 66 FSEC=FC
- GO TO 63
- 65 IS=3-IS
- FSEC=FMIN
- FMIN=FC
- 63 DO 67 J=1,N
- K=K+1
- W(K)=X(J)
- 67 CONTINUE
- DO 68 J=1,M
- K=K+1
- W(K)=F(J)
- 68 CONTINUE
- GO TO 51
- 53 K=KSTORE
- KK=N
- GO TO (69,70,69),IS
- 70 K=N
- KK=KSTORE
- 69 SUM=0.
- DM=0.
- JJ=KSTORE
- DO 71 J=1,N
- K=K+1
- KK=KK+1
- JJ=JJ+1
- X(J)=W(K)
- W(JJ)=W(K)-W(KK)
- 71 CONTINUE
- DO 72 J=1,M
- K=K+1
- KK=KK+1
- JJ=JJ+1
- F(J)=W(K)
- W(JJ)=W(K)-W(KK)
- SUM=SUM+W(JJ)*W(JJ)
- DM=DM+F(J)*W(JJ)
- 72 CONTINUE
- GO TO (73,10),ISS
- 73 J=KINV
- KK=NPLUS-KL
- DO 76 I=1,KL
- K=J+KL-I
- J=K+KK
- W(I)=W(K)
- W(K)=W(J-1)
- 76 CONTINUE
- IF (KL-N) 77,78,78
- 77 KL=KL+1
- JJ=K
- DO 79 I=KL,N
- K=K+1
- J=J+NPLUS-I
- W(I)=W(K)
- W(K)=W(J-1)
- 79 CONTINUE
- W(JJ)=W(K)
- B=1./W(KL-1)
- W(KL-1)=W(N)
- GO TO 88
- 78 B=1./W(N)
- 88 K=KINV
- DO 80 I=1,ILESS
- BB=B*W(I)
- DO 81 J=I,ILESS
- W(K)=W(K)-BB*W(J)
- K=K+1
- 81 CONTINUE
- K=K+1
- 80 CONTINUE
- IF (FMIN-FF) 82,83,83
- 83 CHANGE=0.
- GO TO 84
- 82 FF=FMIN
- CHANGE=ABS (XC)*CHANGE
- 84 XL=-DM/FMIN
- SUM=1./SQRT (SUM+DM*XL)
- K=KSTORE
- DO 85 I=1,N
- K=K+1
- W(K)=SUM*W(K)
- W(I)=0.
- 85 CONTINUE
- DO 86 I=1,M
- K=K+1
- W(K)=SUM*(W(K)+XL*F(I))
- KK=NN+I
- DO 87 J=1,N
- KK=KK+MPLUSN
- W(J)=W(J)+W(KK)*W(K)
- 87 CONTINUE
- 86 CONTINUE
- GO TO 14
- END