PROGRAM c05ndfe ! C05NDF Example Program Text ! Mark 23 Release. NAG Copyright 2011. ! .. Use Statements .. USE nag_library, ONLY : c05ndf, dnrm2, nag_wp, x02ajf ! .. Implicit None Statement .. IMPLICIT NONE ! .. Parameters .. INTEGER, PARAMETER :: n = 9, nout = 6 INTEGER, PARAMETER :: ldfjac = n ! .. Local Scalars .. REAL (KIND=nag_wp) :: epsfcn, factor, fnorm, xtol INTEGER :: icount, ifail, irevcm, j, lr, ml, & mode, mu ! .. Local Arrays .. REAL (KIND=nag_wp), ALLOCATABLE :: diag(:), fjac(:,:), fvec(:), qtf(:), & r(:), w(:,:), x(:) ! .. Intrinsic Functions .. INTRINSIC sqrt ! .. Executable Statements .. WRITE (nout,*) 'C05NDF Example Program Results' ALLOCATE (diag(n),fjac(ldfjac,n),fvec(n),qtf(n),r(n*(n+ & 1)/2),w(n,4),x(n)) ! The following starting values provide a rough solution. x(1:n) = -1.0E0_nag_wp xtol = sqrt(x02ajf()) diag(1:n) = 1.0E0_nag_wp ml = 1 mu = 1 epsfcn = 0.0E0_nag_wp mode = 2 factor = 100.0E0_nag_wp icount = 0 irevcm = 0 ifail = -1 REVCOMM: DO CALL c05ndf(irevcm,n,x,fvec,xtol,ml,mu,epsfcn,diag,mode,factor,fjac, & ldfjac,r,lr,qtf,w,ifail) SELECT CASE (irevcm) CASE (1) icount = icount + 1 ! Insert print statements here to monitor progess if desired. CYCLE REVCOMM CASE (2) ! Evaluate functions at given point fvec(1:n) = (3.0E0_nag_wp-2.0E0_nag_wp*x(1:n))*x(1:n) + & 1.0E0_nag_wp fvec(2:n) = fvec(2:n) - x(1:(n-1)) fvec(1:(n-1)) = fvec(1:(n-1)) - 2.0E0_nag_wp*x(2:n) CYCLE REVCOMM CASE DEFAULT EXIT REVCOMM END SELECT END DO REVCOMM WRITE (nout,*) SELECT CASE (ifail) CASE (0) ! The NAG name equivalent of dnrm2 is f06ejf fnorm = dnrm2(n,fvec,1) WRITE (nout,99999) 'Final 2-norm of the residuals after', icount, & ' iterations is ', fnorm WRITE (nout,*) WRITE (nout,*) 'Final approximate solution' WRITE (nout,99998) (x(j),j=1,n) CASE (3:) WRITE (nout,*) 'Approximate solution' WRITE (nout,99998) (x(j),j=1,n) END SELECT 99999 FORMAT (1X,A,I4,A,E12.4) 99998 FORMAT (5X,3F12.4) END PROGRAM c05ndfe