1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA)
INTEGER N,LDFJAC,INFO,LWA
DOUBLE PRECISION TOL
DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),WA(LWA)
EXTERNAL FCN
C **********
C
C SUBROUTINE HYBRJ1
C
C THE PURPOSE OF HYBRJ1 IS TO FIND A ZERO OF A SYSTEM OF
C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION
C OF THE POWELL HYBRID METHOD. THIS IS DONE BY USING THE
C MORE GENERAL NONLINEAR EQUATION SOLVER HYBRJ. THE USER
C MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE FUNCTIONS
C AND THE JACOBIAN.
C
C THE SUBROUTINE STATEMENT IS
C
C SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA)
C
C WHERE
C
C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH
C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST
C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER
C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS.
C
C SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG)
C INTEGER N,LDFJAC,IFLAG
C DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N)
C ----------
C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND
C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC.
C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND
C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC.
C ---------
C RETURN
C END
C
C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS
C THE USER WANTS TO TERMINATE EXECUTION OF HYBRJ1.
C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER.
C
C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER
C OF FUNCTIONS AND VARIABLES.
C
C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN
C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X
C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR.
C
C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS
C THE FUNCTIONS EVALUATED AT THE OUTPUT X.
C
C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE
C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION
C OF THE FINAL APPROXIMATE JACOBIAN.
C
C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N
C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC.
C
C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS
C WHEN THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR
C BETWEEN X AND THE SOLUTION IS AT MOST TOL.
C
C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS
C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE)
C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE,
C INFO IS SET AS FOLLOWS.
C
C INFO = 0 IMPROPER INPUT PARAMETERS.
C
C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR
C BETWEEN X AND THE SOLUTION IS AT MOST TOL.
C
C INFO = 2 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS
C REACHED 100*(N+1).
C
C INFO = 3 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN
C THE APPROXIMATE SOLUTION X IS POSSIBLE.
C
C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS.
C
C WA IS A WORK ARRAY OF LENGTH LWA.
C
C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN
C (N*(N+13))/2.
C
C SUBPROGRAMS CALLED
C
C USER-SUPPLIED ...... FCN
C
C MINPACK-SUPPLIED ... HYBRJ
C
C MINPACK. VERSION OF JULY 1979.
C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE
C
C **********
INTEGER J,LR,MAXFEV,MODE,NFEV,NJEV,NPRINT
DOUBLE PRECISION FACTOR,ONE,XTOL,ZERO
DATA FACTOR,ONE,ZERO /1.0D2,1.0D0,0.0D0/
INFO = 0
C
C CHECK THE INPUT PARAMETERS FOR ERRORS.
C
IF (N .LE. 0 .OR. LDFJAC .LT. N .OR. TOL .LT. ZERO
* .OR. LWA .LT. (N*(N + 13))/2) GO TO 20
C
C CALL HYBRJ.
C
MAXFEV = 100*(N + 1)
XTOL = TOL
MODE = 2
DO 10 J = 1, N
WA(J) = ONE
10 CONTINUE
NPRINT = 0
LR = (N*(N + 1))/2
CALL HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,WA(1),MODE,
* FACTOR,NPRINT,INFO,NFEV,NJEV,WA(6*N+1),LR,WA(N+1),
* WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1))
IF (INFO .EQ. 5) INFO = 4
20 CONTINUE
RETURN
C
C LAST CARD OF SUBROUTINE HYBRJ1.
C
END
|