Anda di halaman 1dari 12

ALGORITHM 554 BRENTM, A Fortran Subroutine for the Numerical Solution of Systems of Nonlinear Equations [C5]

JORGE J. MORE~ Argonne National Laboratory and MICHEL Y. COSNARD Universit~ Scientifique et M~dicale de Grenoble Key Words and Phrases nonlinearequations, numer)cal solut,on, Brent's method CR Categories. 4.6, 5,15 Language' Fortran

1. DESCRIPTION
B R E N T M is a s u b r o u t i n e designed to solve a s y s t e m of n n o n l i n e a r e q u a t i o n s in n v a r i a b l e s b y using a m o d i f i c a t i o n of B r e n t ' s m e t h o d [1]. T h i s m o d i f i c a t i o n , a n d n u m e r i c a l r e s u l t s for o u r i m p l e m e n t a t i o n , are discussed in [2]. O u r s u b r o u t i n e does n o t use a n y t e c h n i q u e s which a t t e m p t to o b t a i n global c o n v e r g e n c e , a n d t h e r e f o r e c o n v e r g e n c e is only g u a r a n t e e d if t h e initial e s t i m a t e for t h e s o l u t i o n is close enough. On t h e o t h e r h a n d , o u r code does s e e m to h a v e a large r e g i o n of convergence; convergence o n l y occurs a t a zero of t h e function, a n d if t h e i t e r a t i o n is n o t m a k i n g s a t i s f a c t o r y progress, t h e n B R E N T M will a t t e m p t to d i a g n o s e t h i s s i t u a t i o n a n d s t o p t h e i t e r a t i o n w i t h an a p p r o p r i a t e message. T h e u s e r is only r e q u i r e d to p r o v i d e a s u b r o u t i n e which c a l c u l a t e s c o m p o n e n t s of t h e function. N o t e t h a t b e c a u s e of t h e n a t u r e of B r e n t ' s m e t h o d , it is a d v a n t a g e o u s to a r r a n g e t h e c o m p o n e n t s of t h e function in increasing o r d e r of nonlinearity; in p a r t i c u l a r , a n y l i n e a r c o m p o n e n t s s h o u l d a p p e a r first. T h e a c c u r a c y of B R E N T M is c o n t r o l l e d b y t h e p a r a m e t e r s F T O L a n d X T O L . C o n v e r g e n c e occurs if all r e s i d u a l s are a t m o s t F T O L in m a g n i t u d e . T h u s F T O L Received 7 February 1978; revised 27 August 1979, accepted 11 December 1979. Permission to copy without fee all or part of this materml is granted provided that the copras are not made or distributed for dLrectcommercial advantage, the ACM copyright notme and the title of the pubhcatlon and its date appear, and notme is given that copying is by permission of the Association for Computing Machinery. To copy otherwise, or to republish, requLres a fee and/or specific permission. This work was performed under the auspmes of the U.S Department of Energy. Authors' addresses. J.J. Mor~, Apphed Mathematms Division, Argonne National Laboratory, Argonne, IL 60439; M.Y. Cosnard, Mathematlques Apphqu~es-Informatlque, Universlt~ Scmntifique et M~chcale de Grenoble, Bolte Postal 53, 38041 Grenoble C~dex, France. 1980 ACM 0098-3500/80/0600-0240 $00.75 ACMTransactionson MathematmalSoftware,Vol 6, No 2, June 1980,Pages240-251

Algorithms

241

should be chosen with care since an appropriate value depends on the scaling of the functions. Convergence also occurs if B R E N T M estimates that

II x - x* II = -< T O L II x* I1=
where x* is a solution to the system of nonlinear equations and x is the current estimate of x*. Note that if x* has components of widely different magnitude, then there is a danger that the smaller components of x will have large relative errors, but this usually does not happen because of the fast convergence of the iteration.
2. BRENT1

The complete generality provided by BRENTM is usually not required, and in these cases, the calling sequence can be shortened and simplified. We have incorporated the following simplifications into the easy-to-use driver BRENT1. Note that BRENT1 has 8 parameters in the calling sequence, while B R E N T M has 15. (1) Only allow one tolerance TOL by setting FTOL and XTOL equal to TOL. Unless there is information about the scaling of the function, this is a natural choice. (2) Let MOPT maximize log(k + 1)/(n + 2k + 1) for k ffi 1, 2 . . . . . n. This is the value recommended in [1] and [2]. (3) Set MAXFEV to 50(n + 3). This limit permits 100 iterations of the algorithm, and in our experience B R E N T M has either succeeded or reported unsatisfactory progress before this limit is reached. (4) Eliminate NFEV from the calling sequence. Many users are not interested in the number of function evaluations required by BRENTM, and in any case NFEV can be computed by the user through FCN. (5) Condense all arrays not required by FCN into one work array WA of length LWA. B R E N T M would need LWA to be at least n(n + 3).
REFERENCES

1. BRENT, R.P. Some efficient algorithms for solving systems of nonlinear equations. SIAM J. Numer. Anal. 10 (1973), 327-344. 2. MORE, J.J.,ANDCosl~ARD, M.Y. Numencalslutinfnnlinearequatins'ACMTrans'Math" Soflw. 5, 1 (March 1979), 64-85.

ALGORITHM

[Summary information and subroutines BRENT1 and B R E N T M are printed here. The complete listing is available from the ACM Algorithms Distribution Service (see inside back cover for order form) or may be found in the "Collected Algorithms from ACM."] NAME(n): indicates a Fortran module with n records NAMET(n): indicates "NAME" is included for testing purposes Contents: MAINT(70), BVpT(26), BRENTl(129), BRENTM(382)

ACM

Transactions on Mathematical Software, VoL 6, No. 2, June 1980

242

Algorithms
********** THIS IS A SAMPLE P R O G R A M FOR THE E A S Y - T O - U S E V E R S I O N B R E N T I OF S U B R O U T I N E BRENTM. THIS P R O G R A M SOLVES THE D I S C R E T E B O U N D A R Y VALUE P R O B L E M D E F I N E D BY THE S Y S T E M OF N O N L I N E A R EQUATIONS 2*X(1) - X(l-l) - X(I+l) + 0.5*(H**2)*(X(I) + I*H + 1)*'3 = 0 , I = I,...,N

@@07@ ooce8e 0ee9 1


eeCelle

WHERE H = I/(N+I), A N D X() = X(N+I) = 0.

INTEGER I,INT, I N F O , L W A , N , N F C A L L , N F E V , N W R I T E DOUBLE P R E C I S I O N F N O R M I , F N O R M 2 , H , T E M P , T O L DOUBLE PRECISION X(10),FVEC(10),WA(13) DOUBLE PRECISION DFLOAT E X T E R N A L BVP COMMON /REFNUM/ N F C A L L L O G I C A L OUTPUT UNIT IS A S S U M E D TO BE N U M B E R 6. D A T A N W R I T E /6/ DFLOAT(INT) = INT L W A = 130 TOL = 1.1)-10
N = i@

S T A R T I N G VALUES. H = I.D@/DFLOAT(N+I) DO 10 I = i, N TEMP = DFLOAT(1)*H X(1) = T E M P * ( T E M P - I.D0) CONTINUE INITIAL M A X - N O R M OF THE RESIDUALS.

i0

FNORMI

0-

DO

20

DO 20 I = i, N C A L L BVP (N, X, FVEC, I) FNORMI = D M A X I ( F N O R M I , D A B S ( F V E C ( 1 ) ) ) CONTINUE NFCALL = 0 CALL BRENTI(BVP,N,X, F V E C , T O L , I N F O , W A , L W A ) NFEV = N F C A L L / N F I N A L M A X - N O R M O F THE RESIDUALS.

00i2 @ei3 i4 i5 0016 17 i8 eeeel9 ceeee2 ecece2i OOOOOz2 00000230 00000240 00000250 00000260 00000270 00000280 00000290 00000300 OOOOOBi 00000320 00000330 00000340 000350 00000360 00000370 00000380 00000390 00000400 00000410 00000420 00000430 00000440 00000450 00000460 00000470 00000480 00000490 00000500 OOOO5i
e@@@520 000053 00000540 00000550

FNORM2 = 0.D0 DO 30 1 = i, N
30
CALL BVP(N,X, FVEC,I) FNORM2 = D M A X I ( F N O R M 2 , D A B S ( F V E C ( I ) ) ) CONTINUE WRITE

(NWRITE,I@@) N, FNORM1,FNORM2,NFEV,INFO,(X(I),I=I,N) STOP 1000 FORMAT (5X,ICN DIMENSlON,I5,5X / /


1 2 5X,34H INITIAL M A X - N O R M OF THE R E S I D U A L S , D 1 5 . 7 // 5X,34H FINAL M A X - N O R M OF THE RESIDUALS ,D15.7 //

00000560 00000570 00000580 00000590 00000600 00000610 00000620 00000630

ACMTransac~onsonMathematlc~ Software,Vo| 6, No 2, June1980

Algorithms
5X, 33H NUMBER OF FUNCTION EVALUATIONS ,110 // 5X,15H EXIT PARAMETER ,18X, I10 // 5X,27H FINAL APPROXIMATE SOLUTION // (5X,5DI5.7)) LAST CARD OF SAMPLE PROGRAM. END SUBROUTINE BVP(N,X,FVEC, IFLAG) INTEGER N, IFLAG DOUBLE PRECISION X (N) ,FVEC (N)

243
~00064

07 000007z0 00000720 ~/~00~730


00~b0740

00000750
SUBROUTINE BVP DEFINES THE BOUNDARY VALUE PROBLEM.

INTEGER INT, NFCALL DOUBLE PRECISION H,TEMP,TEMPI, TEME2 DOUBLE PRECISION DFLOAT cOMMON /REFNUM/ NFCALL DFLOAT(INT) = INT H = I.D0/DFLOAT(N+I) TEMP = 0.5D0*((X(IFLAG) + DFLOAT(IFLAG)*H + I.D0)*'3)

0~000760 00000770 00000780 00000790 00000800

000008i0
00000820 00000830 00000840 00000850 00000860 00000870 00000880 00000890 00000900 00000910 00000920 00000930

TEMPi = O. DO
IF (IFLAG .NE. i) TEMPI = X(IFLAG-I) TEMP2 = 0.D0

IF (IFLAG .NE. N) TEMP2 = X(IFLAG+I) FVEC(IFLAG) = 2.D0*X(IFLAG) - TEMPI - TEMP2 + TEMP*H**2 NFCALL = NFCALL + 1 RETURN
LAST CARD OF SUBROUTINE BVP. END SUBROUTINE BRENTI(FCN,N,X,FVEC,TOL,INFO,WA,LWA) INTEGER N,INFO,LWA DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(N),WA(LWA) EXTERNAL FCN

00000940
00000950 00000960

000000z 00000020 00000030 00000040


00000050 00000060 00000070

SUBROUTINE BRENTI THE PURPOSE OF THIS SUBROUTINE IS TO FIND A ZERO OF A SYSTEM OF N NONLINEAR EQUATIONS IN N VARIABLES BY A METHOD DUE TO R. BRENT. THIS IS DONE BY USING THE MORE GENERAL NONLINEAR EQUATION SOLVER BRENTM. THE SUBROUTINE STATEMENT IS SUBROUTINE BRENTI(FCN,N,X, FVEC,TOL,INFO,WA,LWA) WHERE FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH CALCULATES COMPONENTS OF THE FUNCTION. FCN SHOULD BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. SUBROUTINE FUN(N,X, FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) CALCULATE THE IFLAG-TH COMPONENT OF THE FUNCTION

00000080
00000090

00000z0
00000zi0 00000120

0000z30 00000z40
00000i50 00000160 00000170 0000i80 00000z90 00000200

00000210 00000220
00000230

00000240 0000250
00000260 00000270 00000280 00000290

ACMTransactlonsonMa~ematw~So~ware, VoI. 6, No.

00000300 June 1980

244
C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C

Algorithms
AND RETURN THIS VALUE IN FVEC(IFLAG). RETURN END THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS THE USER WANTS TO TERMINATE EXECUTION OF BRENTI. IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER OF EQUATIONS AND VARIABLES. X IS AN ARRAY OF LENGTH N. ON INPUT IT MUST CONTAIN AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. FVEC IS AN ARRAY OF LENGTH N. ON OUTPUT IT CONTAINS THE FINAL RESIDUALS. TOL IS A NONNEGATIVE INPUT VARIABLE. THE ALGORITHM CONVERGES IF EITHER ALL THE RESIDUALS ARE AT MOST TOL IN MAGNITUDE, OR IF THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT MOST TOL. INFO IS AN INTEGER OUTPUT VARIABLE SET AS FOLLOWS. IF THE USER HAS TERMINATED EXECUTION, INFO WILL BE SET TO THE (NEGATIVE) VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE INFO = @ INFO = 1 INFO = 2 IMPROPER INPUT PARAMETERS. ALL RESIDUALS ARE AT MOST TOL IN MAGNITUDE. ALGORITHM ESTIMATES THAT THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT MOST TOL. CONDITIONS FOR INFO = i AND INFO = 2 BOTH HOLD. NUMBER OF FUNCTION EVALUATIONS HAS REACHED OR EXCEEDED 5@*(N+3). APPROXIMATE JACOBIAN MATRIX IS SINGULAR. ITERATION IS NOT MAKING GOOD PROGRESS. ITERATION IS DIVERGING. ITERATION IS CONVERGING, BUT TOL IS TOO SMALL, OR THE CONVERGENCE IS VERY SLOW DUE TO A JACOBIAN SINGULAR NEAR THE OUTPUT X OR DUE TO BADLY SCALED VARIABLES.

@ @ @ @ @ 3 1 @
00@@@320 @@@@@33@

@ @ @ @ @ 3 4 @
@@@@@35@ @@@@@36@ @@@@@37@ @@@@@38@ W~@@@39@ @@@@@4@@ @@@@@41@ @@@@@42@ @@@@@43@ @@@@@44@ @@@@@45@ @@@@@46@ @@@@@47@ 00000480 @@@@@49@ @@@@@5@@ 00@@@51@ @@@@@52@ 00@@53@ ~@54@ @@@@@55@ @@@@@56@ @@@@@57@ @@@@@58@ @@@@@59@ @@@@@6@@ 00006i@ @@@@@62@ @@@@@63@ @@@@@64@ @@@@@65@ @@@@@66@ 00@@@67@ @@@@@68@

INFO = 3 INFO = 4

INFO = 5 INFO = 6 INFO = 7 INFO = 8

WA IS A WORK ARRAY OF LENGTH LWA. LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N*(N+3). SUBPROGRAMS REQUIRED USER-SUPPLIED ...... FCN, BRENTM ... DLOG

FORTRAN-SUPPLIED

0@@0@690 @ @ @ 0 @ 7 @ @ @ @ 0 @ @ 7 1 @ @@@0072@ @@@0@730 @@@0@740 @000075@ 00@@076@ @0000770 00@@@78@ @ 0 @ @ @ 7 9 @ 00000800 00@@8i0 0@0@082@ 00000830 @@0@0840 0@000850 @@@0086@ 00@@087@ 0@0@0880 00@@@89@ 00@0@9@0 @@00091@ OOO@@920 0000@930

ACM Transactions on MathematicalSoftware,Vol.6, No 2, June 1980

Algorithms

245

@O@@@940 INTEGER I, IVAR,MAXFEV,MOPT,NFEV DOUBLE PRECISION EMAX,FTOL,TEMP,XTOL,ZERO DOUBLE PRECISION DFLOAT DATA ZERO /@.DO/ DFLOAT(IVAR) = IVAR INFO = @ CHECK THE INPUT PARAMETERS FOR ERRORS. IF (N .LE. @ .OR. TOL .LT. ZERO .OR. LWA .LT. N*(N+3)) GO TO 30 DETERMINE AN OPTIMAL VALUE FOR MOPT. EMAX = ZERO DO i@ I = i, N TEMP = DLOG(DFLOAT(I+I))/DFLOAT(N+2*I+I) IF (TEMP .LT. EMAX) GO TO 2@ MOPT = I EMAX = TEMP CONTINUE CONTINUE CALL BRENTM. MAXFEV = 5@*(N + 3) FrOL = TOL XTOL = TOL CALL BRENTM(FCN,N,X,FVEC,FTOL,XTOL,MAXFEV,MOPT, 1 INFO,NFEV,WA(3*N+I),N,WA(1),WA(N+I),WA(2*N+I)) 30 CONTINUE RETURN LAST CARD OF SUBROUTINE BRENTI. END S UBROUTI NE B RENTM (FCN, N, X, FVEC, FTOL, XTOL, MAXFEV, MOPT, i INFO, NFEV, Q, LDQ, SIGMA, WAI, WA2) INTEGER N, MAXFEV, MOPT, IN FO, NFEV, LDQ DOUBLE PRECISION FTOL,XTOL DOUBLE PRECISION X (N), FVEC (N), Q (LDQ, N), SIGMA (N), WAI (N), WA2 (N)

@000095@
@@@@@96@ @@@@@97@ @@@@@98@

00000990

00001000 00001010
OOO@I@2@

000@1030 000@1040 00001050 00@01060


00001070

10 20

00001080 00001090 0000110 0@001110 00001120 @0001130 00001140 000@1150 00001160 00001170 00001180 00001190 000012@0 0@@01210 000@1220 00001230 00001240
00001250

@0001260 00001270 00001280


00@01290

SUBROUTINE BRENTM THE PURPOSE OF THIS SUBROUTINE IS TO FIND A ZERO TO A SYSTEM OF N NONLINEAR EQUATIONS IN N VARIABLES BY A METHOD DUE TO R. BRENT. THE SUBROUTINE STATEMENT IS SUBROUTINE BRENTM(FCN,N,X,FVEC,FTOL,XTOL,MAXFEV,MOPT, INFO,NFEV,Q,LDQ,SIGMA,WAI,WA2) WHERE FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH CALCULATES COMPONENTS OF THE FUNCTION. FCN SHOULD BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. SUBROUTINE FCN(N,X, FVEC,IFLAG) INTEGER N, IFLAG

0000010 00000020 00000030 00000040 0000050 0@@@0060 000@0@70 00000080


00000090

00000100 00000110 OOOOO12O @0000130 @0000140 00000150


00000160 0@000170

0000180 00000190 00000200 00000210


0000220 000@@230

0000240 @0@@@250
000@026@

@0000270

ACMTransactlonsonMathemahc~Softw~e,VoL6,No. 2, June 1080.

246
C C C C C C C C c C C C C c C C C C C C C C C C C C C C C C C C c C C C C C C C c c C c C C C C C C C C c C C c C C C c C c c C

Algorithms
DOUBLE PRECISION X(N), FVEC (N) CALCULATE THE IFLAG-TH COMPONENT OF THE FUNCTION AND RETURN THIS VALUE IN FVEC(IFLAG). RETURN END THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS THE USER WANTS TO TERMINATE EXECUTION OF BRENTM. IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER OF EQUATIONS AND VARIABLES. X IS AN ON OF AN ARRAY OF LENGTH N. ON INPUT IT MUST CONTAIN ESTIMATE TO THE SOLUTION OF THE SYSTEM OF EQUATIONS. OUTPUT X CONTAINS THE FINAL ESTIMATE TO THE SOLUTION THE SYSTEM OF EQUATIONS. 00000280 @@@@@29@ @@@@@3@@ @@@@@31@ @@@@@32@ @@@@@33@ @@@@@34@ 00@@@35@ @00@@36@ @@@@@37@ 0000@38@ @@@@@39@ @@@@@4@@ 000004i0 @@@@@42@

@ @ @ @ @ 4 3 @ @ @ @ @ @ 4 4 @
@@@@@45@ @@@@@46@ @@@@@47@ @@@@@48@ @@00@49@ @@@@@5@@ 000005i @@@@@52@ 00@@@53@ @@@@@54@ @@@@@55@ 00@@56@ @@@@@57@ @@@@@58@ 00@@@59@ @@@@@6@@ @@@@61@ @@@@@62@ @@@@@63@ @@@@@64@ 00@@@65@ @@@@@66@

FVEC IS AN ARRAY OF LENGTH N. ON OUTPUT IT CONTAINS THE FINAL RESIDUALS. FrOL IS A NONNEGATIVE INPUT VARIABLE. CONVERGENCE OCCURS IF ALL RESIDUALS ARE AT MOST FTOL IN MAGNITUDE. XTOL IS A NONNEGATIVE INPUT VARIABLE. CONVERGENCE OCCURS IF THE RELATIVE ERROR BETWEEN TWO SUCCESSIVE ITERATES IS AT MOST XTOL. MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION OCCURS IF THE NVMBER OF FUNCTION EVALUATIONS IS AT LEAST MAXFEV BY THE END OF AN ITERATION. IN BRENTM, A FUNCTION EVALUATION CORRESPONDS TO N CALLS TO FCN, MOPT IS A POSITIVE INTEGER INPUT VARIABLE. MOPT SPECIFIES THE NUMBER OF TIMES THAT THE APPROXIMATE JACOBIAN IS USED DURING EACH ITERATION WHICH EMPLOYS ITERATIVE REFINEMENT. IF MOPT IS i, NO ITERATIVE REFINEMENT WILL BE DONE. MAXIMUM EFFICIENCY IS uSUALLY OBTAINED IF MOPT MAXIMIZES LOG(K+I)/(N+2*K+I) FOR K = 1 ..... N. INFO IS AN INTEGER OUTPUT VARIABLE SET AS FOLLOWS. IF THE USER HAS TERMINATED EXECUTION, INFO WILL BE SET TO THE (NEGATIVE) VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE INFO : 0 INFO
= i

@ @ @ @ @ 6 7 @ @ @ @ @ @ 6 8 @ @ @ @ @ @ 6 9 @ @ @ @ @ @ 7 @ @ 00000710 @ @ @ @ @ 7 2 @
@@@@@73@ @@@@@74@ @@@@@75@ @@@@@76@ 00@@@77@ @@@@@78@

IMPROPER INPUT PARAMETERS. ALL RESIDUALS ARE AT MOST FTOL IN MAGNITUDE. RELATIVE ERROR BETWEEN TWO SUCCESSIVE ITERATES IS AT MOST XTOL. CONDITIONS FOR INFO = i AND INFO = 2 BOTH HOLD. NUMBER OF FUNCTION EVALUATIONS HAS REACHED OR EXCEEDED MAXFEV. APPROXIMATE JACOBIAN MATRIX IS SINGULAR. ITERATION IS NOT MAKING GOOD PROGRESS. ITERATION IS DIVERGING.

INFO : 2

INFO = 3 INFO = 4

INFO = 5 INFO = 6 INFO = 7

0000079@ 00000800 00000810 00@@0820 00@00830 @00@@84@ 00000850 00000860 00000870 00000880 00000890
00@009@@

0@0@091@

ACM Transactions on Mathematical Software, Vo] 6, No 2, June 1980

Algorithms

247

C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C

INFO = 8

ITERATION IS CONVERGING, BUT XTOL IS TOO SMALL, OR THE CONVERGENCE IS VERY SLOW DUE TO A JACOBIAN SINGULAR NEAR THE OUTPUT X OR DUE TO BADLY SCALED VARIABLES.

NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF FUNCTION EVALUATIONS USED IN PRODUCING X. IN BRENTM, A FUNCTION EVALUATION CORRESPONDS TO N CALLS TO FCN. Q IS AN N BY N ARRAY. IF JAC DENOTES THE APPROXIMATE JACOBIAN, THEN ON OUTPUT Q IS (A MULTIPLE OF) AN ORTHOGONAL MATRIX SUCH THAT JAC*Q IS A LOWER TRIANGULAR MATRIX. ONLY THE DIAGONAL ELEMENTS OF JAC*Q NEED TO BE STORED, AND THESE CAN BE FOUND IN SIGMA. LDQ IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY Q. SIGMA IS A LINEAR ARRAY OF LENGTH N. ON OUTPUT SIGMA CONTAINS THE DIAGONAL ELEMENTS OF THE MATRIX JAC*Q. SEE DESCRIPTION OF Q. WAI AND WA2 ARE LINEAR WORK ARRAYS OF LENGTH N. SUBPROGRAMS REQUIRED USER-SUPPLIED ...... FCN

@@@@@92@ @@@@@93@ @@@@@94@ @@@@@95@ @@@@@96@ @@@@@97@ @@@@@98@ @@@@@99@ @@@@i@@@ @@@@i@1@

@ @ @ @ i @ 2 @ @ @ @ i @ 3 @ @ @ @ @ i @ 4
@@@@i@5@ @@@@1@6@

@ @ @ @ 1 @ 7 0 @ @ @ @ i 8 @
@@0i09 @@@@li@@ @@@@lli@ @@@@i12@ @@@@113@ @@@@ii4@ @@@@i15@ @@@@ii6@ 00001170 @@@@118@ @@@@119@ @@@@12@@ @@@@121@

FORTRAN-SUPPLIED

... DABS,DMAXI,DSQRT,DSIGN

@ @ @ @ i 2 2 @
INTEGER I,IFLAG,J,K,M, NFCALL,NIER6,NIERT,NIER8,NSING LOGICAL CONV DOUBLE PRECISION DELTA,DIFIT,DIFITI, EPS,EPSMCH,ETA,FKY,FKZ, 1 FNORM,FNORMI, H,P@5,SCALE,SKNORM,TEMP,XNORM, ZERO DATA ZERO,P@5,SCALE /@.D@,5.D-2,1.DI/ @@0@1230 @@@@124@ @@@i25@ @@@@126@

00001270
@@@@i28@ @@@@129@ @@@@13@@ @@@@i3i@ @@@@132@ @@@@133@ @@@@134@ @@@@135@ @@@@136@ @@@@137@ @@@@i38@

C C C C C C C C C C C C C C C C C C C C C C C C

WARNING. THIS IS AN IBM CODE. TO RUN THIS CODE ON OTHER MACHINES IT IS NECESSARY TO CHANGE THE VALUE OF THE MACHINE PRECISION EPSMCH. THE MACHINE PRECISION IS THE SMALLEST FLOATING POINT NUMBER EPSMCH SUCH THAT i + EPSMCH .GT. 1

IN WORKING PRECISION. IF IN DOUBT ABOUT THE VALUE OF EPSMCH, THEN THE FOLLOWING PROGRAM SEGMENT DETERMINES EPSMCH ON MOST MACHINES. EPSMCH = @.5D@ 1 CONTINUE IF (I.D@+EPSMCH .EQ. I.D@) GO TO 2 EPSMCH = @.SD@*EPSMCH GO TO i 2 CONTINUE EPSMCH = 2. D@*EPSMCH THE IBM DOUBLE PRECISION EPSMCH. EPSMCH = 16.D@**(-13) INFO = @

00001390 000014@0 @@@014i0 00001420 @@00143@ 00001440 00@01450 @0001460 00001470 0@0@1480 00@01490 0@@015@@ 00001510 @@001520 @@@0i53@ @ @ @ @ i 5 4 @ @@@@155@

A C M TransacUons on Mathematlcal Software,Vol.6,No. 2,June 1980

248

Algorithms
IFLAG = @ NFEV = @ NFCALL = @ @@@@156@ 0000i57@ @00@i58@ @@@@159@ @@@@16@@ @@@@161@ @@@@162@ @@@@163@ 0@001640 @@@@165@ @ @ @ @ 1 6 6 @ @ @ @ @ 1 6 7 @ 00@@168@ @ @ @ @ 1 6 9 @ @@@@17@@ 0000i71@ @@@@172@ @@@@173@ 0000i74@ @@@@175@ @ @ @ @ 1 7 6 @ @@@@177@

C
C

CHECK THE INPUT PARAMETERS FOR ERRORS. IF (N .LE. @ .OR. FrOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. MAXFEV .LE. @ .OR. MOPT .LE. @ .OR. LDQ .LT. N) GO TO 22@ INITIALIZE SOME OF THE VARIABLES. NIER6 = -i NIER7 = -i NIER8 = @ FNORM = ZERO DIFIT = ZERO XNORM = ZERO DO i@ I = I, N XNORM = DMAXI(XNORM,DABS(X(1))) i@ CONTINUE EPS = DSQRT(EPSMCH) DELTA = SCALE*XNORM IF (XNORM .EQ. ZERO) DELTA = SCALE

C 1 C C C

C C C C C C C

@ @ @ @ 1 7 8 @ @ @ @ @ 1 7 9 @
0000i8@@ 00@@i8i@ 0000182@ 0000i83@ @@@@184@ @@@@185@ @@@@186@ @00@187@ 0000i88@ @@@@189@ 00@@i900 00@@i91@ @@@@192@ @@@@193@ @@@@194@ @@00195@ @@@@196@ @@@@197@ @@@@198@ 0000199@

ENTER THE PRINCIPAL ITERATION. 2@ CONTINUE TO PRINT THE ITERATES, PLACE WRITE STATEMENTS FOR THE VECTOR X HERE. NSING = N FNORMI = FNORM DIFITI = DIFIT FNORM = ZERO

C C
C

COMPUTE THE STEP H FOR THE DIVIDED DIFFERENCE WHICH APPROXIMATES THE K-TH ROW OF THE JACOBIAN MATRIX. H = EPS*XNORM IF (H .EQ. ZERO) H = EPS DO 4@ J = i, N DO 3@ I = i, N Q(I,J) = ZERO 3@ CONTINUE Q(J,J) = H WAI(J) = X(J) 4@ CONTINUE

C C C

ENTER A SUBITERATION. DO 15@ K = i, N IFLAG = K CALL FCN(N,WAI, FVEC,IFLAG) FKY = FVEC(K) NFCALL = NFCALL + 1 NFEV = NFCALL/N IF (IFLAG .LT. @) GO TO 23@ FNORM = DMAXI(FNORM,DABS(FKY))

C
C

COMPUTE THE K-TH ROW OF THE JACOBIAN MATRIX. DO 6@ J = K, N

00002000 0@0@2@1@ 00002020 000@2030 00@0204@ @0002@50 @0002060 00@02070 00002@80 @000209@ 0@0@2100 00002i10 @0@02120 00@02i3@ 00@02140 0@@02150 @0002160
00@0217@

0 0 @ @ 2 1 8 @

ACM Transac~ons on Mathematle~ So~w~e, Vol 6, No 2, June 1980

Algorithms
DO 50 1 = i, N WA2(1) = WAI(1) + Q(I,J) CONTINUE CALL F C N ( N , W A 2 , F V E C , I F L A G ) FKZ = FVEC(K) NFCALL = NFCALL + 1 NFEV = N F C A L L / N IF (IFLAG .LT. 0) GO TO 230 SIGMA(J) = FKZ - FKY CONTINUE FVEC(K) = FKY cOMPUTE THE H O U S E H O L D E R T R A N S F O R M A T I O N TO REDUCE THE K - T H R O W OF THE J A C O B I A N M A T R I X TO A M U L T I P L E OF THE K-TH UNIT VECTOR. E T A = ZERO DO 7@ I = K, N ETA = DMAXI(ETA, D A B S ( S I G M A ( 1 ) ) ) CONTINUE IF (ETA .EQ. ZERO) GO TO 150 N S I N G = NSING 1 S K N O R M = ZERO DO 80 I = K, N SIGMA(I) = S I G M A ( 1 ) / E T A SKNORM = SKNORM + S I G M A ( 1 ) * * 2 CONTINUE S K N O R M = DSQRT(SKNORM) IF (SIGMA(K) .LT. ZERO) S K N O R M = - S K N O R M SIGMA(K) = SIGMA(K) + SKNORM

249
0002190 0220 22~ 00002220 00002230 00002240 00002250 00002260 00002270 002280 00002290 00002300 00002310

50

60

00002320
00002330 00002340 00002350 00002360 00002370 00002380 00002390 00002400

7@

00002410 0O002420

00002430 00002440 00002450 @0002460 00002470 00002480 A P P L Y THE T R A N S F O R M A T I O N A N D COMPUTE THE M A T R I X Q. 00002490 00002500 05002510 DO 9@ I = i, N 00002520 WA2(1) = ZERO 0002530 9@ CONTINUE 00002540 D O i10 J = K, N 00002550 TEMP = SIGMA(J) DO 1O@ I = I, N 00002560 WA2(1) = WA2(1) + TEMP*Q(I,J) 00002570 00002580 100 CONTINUE 00002590 11@ CONTINUE 00002600 D O 130 J = K, N TEMP = SIGMA(J) / (SKNORM*SIGMA(K)) 00002610 DO 12@ I = I, N 00002620 Q(I,J) = Q(I,J) - TEMP*WA2(I) 00002630 12@ CONTINUE 00002640 13@ CONTINUE 00002650 00002660 COMPUTE THE SUBITERATE 00002670 00002680 SIGMA(K) = S K N O R M * E T A 00002690 TEMP = FKY/SIGMA(K) 00002700 IF (H*DABS(TEMP) .GT. DELTA) TEMP = D S I G N ( D E L T A / H , T E M P ) 00002710 00002720 DO 14@ I = i, N WAI(1) = WAI(I) + TEMP*Q(I,K) 00002730 00002740 140 CONTINUE 15@ CONTINUE 00002750 00002760 COMPUTE THE NORMS OF THE ITERATE A N D C O R R E C T I O N VECTOR. 00002770 00002780 X N O R M = ZERO 00002790 D I F I T = ZERO 00002800 DO 160 I = i, N 00002810 ACMTransactmnsonMathemat~cM Software,Vol ~ No 2, June 1980 80

250

Algorithms
XNORM = DMAXI (XNORM, DABS (WAI (I)) ) DIFIT DMAXI (DIFIT, DABS (X(I)-WAI (I)) ) x(I) = WAI(1) CONTINUE
=

16@ C C C C C C 1

UPDATE THE BOUND ON THE CORRECTION VECTOR. DELTA = DMAXI(DELTA, SCALE*XNORM) DETERMINE THE PROGRESS OF THE ITERATION. CONV = (FNORM .LT. FNORMI .AND. DIFIT .LT. DIFITI .AND, NSING .EQ. @) NIER6 = NIER6 + 1 NIER7 = NIER7 + i NIER8 = NIER8 + i IF (CONV) NIER6 = @ IF (FNORM .LT. FNORMI .OR. DIFIT .LT. DIFITI) NIER7 = @ IF (DIFIT .GT. EPS*XNORM) NIER8 = @ TESTS FOR CONVERGENCE. IF IF IF IF (FNORM (DIFIT (FNORM (INFO .LE. FTOL) INFO = i .LE. XTOL*XNORM .AND. CONV) INFO = 2 .LE. FTOL .AND. INFO .EQ. 2) INFO = 3 .NE. @) GO TO 23@

C C C

C C C

TESTS FOR TERMINATION. IF IF IF IF IF IF (NFEV .GE. MAXFEV) INFO = 4 (NSING .EQ. N) INFO = 5 (NIER6 .EQ. 5) INFO = 6 (NIER7 .EQ. 3) INFO = 7 (NIER8 .EQ. 4) INFO = 8 (INFO .NE. @) GO TO 23@ IS USED IF THE ITERATION .GT. P@5*XNORM IS CONVERGING. .EQ. i)

C C C i C C C

ITERATIVE REFINEMENT

IF (.NOT. CQNV .OR. DIFIT GO TO 22@ START ITERATIVE REFINEMENT.

.OR. MOPT

@@@@282@ @@@@283@ @@@@284@ @@@@285@ @@@@286@ @@@@287@ @@@@288@ @@@@289@ @@@@29@@ @@@@291@ @@@@292@ @@@@293@ @@@@294@ @@@@295@ @@@@296@ @@@@297@ @@@@298@ @@@@299@ @@@@3@@@ @@@@3@1@ @@@@3@2@ @@@@3@3@ @@@@3@4@ @@@@3@5@ @@@@3@6@ @@@@3@7@ @@@@3@8@ @@@@3@9@ @@@@31@@ @@@@311@ @@@@312@ @@@@313@ @@@@314@ @@@@315@ @@@@3i6@ @@@@317@ @@@@318@ @@@@319@ @@@@32@@ @@@@321@ @@@@322@ @@@@323@ @@@@325@ @@@@326@ @@@@327@ @@@@328@

DO 21@ M = 2, MOPT FNORMI = FNORM FNOPM = ZERO DO 19@ K = i, N IFLAG = K CALL FCN (N, WAI, FVEC, IFLAG) FKY = FVEC(K) NFCALL = NFCALL + i NFEV = NFCALL/N IF (IFLAG .LT. @) GO TO 23@ FNORM = DMAXI(FNORM,DABS (FKY)) C C C C ITERATIVE REFINEMENT IS TERMINATED GIVE A REDUCTION OF THE RESIDUALS. IF (FNORM .LT. FNORMI) GO TO 17@ FNORM = FNORMI GO TO 22@ CONTINUE TEMP = FKY/SIGMA(K) IF IT DOES NOT

0@@@329@ 0@@0330@ 0@@@3310 @0@0332@ 00@@333@ @@@@334@


@@@@335@

@@@@336@ 0@@@337@ 0@0@3380


@@@@339@ @@@@34@@ @@@@341@

@@@@342@
@@@@343@ @@@@344@

17@

ACM Transactions on Mathematical Software, Vol 6, No 2, June 1980.

Algorithms
DO 180 1 = i, N WAI(1) = WAI(1) + TEMP*Q(I,K) CONTINUE CONTINUE COMPUTE THE NORMS OF THE ITERATE AND CORRECTION XNORM = ZERO DIFIT = ZERO DO 200 I = i, N XNORM = DMAXl(KNORM,DABS(WAt ( I ) ) ) DIFIT = I~tAXl(DIFIT,DABS(X(I)-WAI(I))) X(I) = WAI(I) CONTINUE VECTOR.

251

0003450
@0@03460 00347 0@(3@348@ 00@@349(3 000035~0 00003510 000@352@ ~@@03530 00003540 00355 @@003560 00003570 0000358 00003590 ~3003600 00003610 00003620 00003630 00@@3640 $0003650 00003660 00$03670 000368 00003690 0003700 00003710 0053720 00003730 00003740 00003750 00003760 00003770 00003780 00003790 00003800 00003810 00003820

180 190 C C C

200 c C C

STOPPING CRITERIA FOR ITERATIVE REFINEMENT. IF (FNORM .LE. FTOL) INFO = 1 IF (DIFIT .LE. XTOL*XNORM) INFO = 2 IF (FNOEM .LE. FTOL .AND. INFO .EQ. 2) INFO = 3 IF (NFEV .GE. MAXFEV .AND. INFO .EQ. 0) INFO = 4 IF (INFO .NE. @) GO TO 23@ 210 CONTINUE 22@ CONTINUE

C C C C C C

END OF THE ITERATIVE REFINEMENT. GO TO 2@ TERMINATION, EITHER NORMAL OR USER IMPOSED.

23@ CONTINUE IF (IFLAG .LT. 0) INFO = IFLAG RETURN LAST CARD OF SUBROUTINE END BRENTM.

A C M Transactions on Mathematlcal Software,Vol 6,No. 2,June 1980.

Anda mungkin juga menyukai