1 subroutine lmpar(n,r,ldr,ipvt,diag,qtf,delta,par,x,sdiag,wa1,
6 double precision delta,par
7 double precision r(ldr,n),diag(n),qtf(n),x(n),sdiag(n),wa1(n),
8 * wa2(n),gnvec(n), gradf(n)
111 integer i,iter,j,jm1,jp1,k,l,nsing
112 double precision dxnorm,dwarf,fp,gnorm,parc,parl,paru,sum,temp
113 double precision enorm
115 double precision P1,P001,ZERO
116 data p1,p001,zero /1.0d-1,1.0d-3,0.0d0/
139 if (r(j,j) .eq. zero .and. nsing .eq. n) nsing = j - 1
140 if (nsing .lt. n) wa1(j) = zero
143 if (nsing .ge. 1)
then
146 wa1(j) = wa1(j)/r(j,j)
151 wa1(i) = wa1(i) - r(i,j)*temp
170 wa2(j) = diag(j)*x(j)
172 dxnorm = enorm(n,wa2)
174 if (fp .le. p1*delta)
go to 220
182 if (nsing .ge. n)
then
185 wa1(j) = diag(l)*(wa2(l)/dxnorm)
192 sum = sum + r(i,j)*wa1(i)
195 wa1(j) = (wa1(j) - sum)/r(j,j)
198 parl = ((fp/delta)/temp)/temp
213 sum = sum + r(i,j)*qtf(i)
221 if (paru .eq. zero) paru = dwarf/dmin1(delta,p1)
227 par = dmax1(par,parl)
228 par = dmin1(par,paru)
229 if (par .eq. zero) par = gnorm/dxnorm
240 if (par .eq. zero) par = dmax1(dwarf,p001*paru)
243 wa1(j) = temp*diag(j)
245 call qrsolv(n,r,ldr,ipvt,wa1,qtf,x,sdiag,wa2)
247 wa2(j) = diag(j)*x(j)
249 dxnorm = enorm(n,wa2)
258 if (dabs(fp) .le. p1*delta
259 * .or. parl .eq. zero .and. fp .le. temp
260 * .and. temp .lt. zero .or. iter .eq. 10)
go to 220
267 wa1(j) = diag(l)*(wa2(l)/dxnorm)
270 wa1(j) = wa1(j)/sdiag(j)
275 wa1(i) = wa1(i) - r(i,j)*temp
280 parc = ((fp/delta)/temp)/temp
285 if (fp .gt. zero) parl = dmax1(parl,par)
286 if (fp .lt. zero) paru = dmin1(paru,par)
291 par = dmax1(parl,par+parc)
302 if (iter .eq. 0) par = zero
double precision, parameter dbl_min
subroutine lmpar(n, r, ldr, ipvt, diag, qtf, delta, par, x, sdiag, wa1, wa2, gnvec, gradf)
subroutine qrsolv(n, r, ldr, ipvt, diag, qtb, x, sdiag, wa)