38 double precision ts, p, chi
41 double precision x1,x2
44 double precision halfnu, conf
45 common /chicom/ halfnu, conf
47 double precision pchi,zbrent
54 call zbrac( pchi, x1, x2, success )
55 if (success) chi=zbrent( pchi, x1, x2, 1.0d-6 )
69 double precision pchi,chi
71 double precision halfnu, conf
72 common /chicom/ halfnu, conf
74 double precision gammq
77 pchi = gammq( halfnu, 0.5d0*chi ) - 1.0d0 + conf
95 double precision osum,residx,rsum,yc,yo
127 double precision cbar,cdsum,c2sum,dbar,dc,dd,d2sum,corrl
154 corrl=cdsum/sqrt(d2sum*c2sum)
171 function betai(a,b,x)
173 double precision betai,a,b,x,bt
175 double precision ONE,TWO,ZERO
176 parameter(one=1.0d0,two=2.0d0,zero=0.0d0)
178 double precision betacf,gammln
179 external betacf,gammln
181 if (x.lt.zero .or. x.gt.one)
then
182 call pausex(
'bad argument X in BETAI')
184 if (x.eq.zero .or. x.eq.one)
then
191 bt=dexp( gammln(a+b)-gammln(a)-gammln(b)
192 # +a*dlog(x)+b*dlog(one-x) )
198 if (x.lt.(a+one)/(a+b+two))
then
199 betai=bt*betacf(a,b,x)/a
206 betai=one-bt*betacf(b,a,one-x)/b
214 double precision betacf,a,b,x
217 double precision am,aold,ap,app,az,bp,bm,bpp,bz,d,em,qab,qap,
221 double precision ONE,TWO,ZERO,EPS
222 parameter(itmax=100,eps=3.0d-7,one=1.0d0,two=2.0d0,zero=0.0d0)
238 d=em*(b-m)*x/((qam+tem)*(a+tem))
245 d=-(a+em)*(qab+em)*x/((a+tem)*(qap+tem))
261 if (abs(az-aold).lt.eps*abs(az))
goto 1
264 write(*,1000) abs((az-aold)/az)
265 1000
format(
'BETACF: ITMAX exceeded, final error was ',g11.3)
273 double precision alphat,t,xnu
275 double precision a,b,alpha
276 common /bcom/ a,b,alpha
278 double precision betai
281 alphat = alpha - 0.5*betai( a, b, a/(a+0.5d0*t*t) )
288 double precision alphaf,f
290 double precision a,b,alpha
291 common /bcom/ a,b,alpha
293 double precision betai
296 alphaf = betai( b, a, b/(b+a*f) ) - alpha
300 function ts( al, nu )
302 double precision ts, al
305 double precision x1,x2
308 double precision a, b, alpha
309 common /bcom/ a, b, alpha
311 double precision alphat,zbrent
312 external alphat,zbrent
319 call zbrac( alphat, x1, x2, success )
320 if (success) ts=zbrent( alphat, x1, x2, 1.0d-6 )
325 function fs( al, nu1, nu2 )
327 double precision fs, al
330 double precision x1,x2
333 double precision a, b, alpha
334 common /bcom/ a, b, alpha
336 double precision alphaf,zbrent
337 external alphaf,zbrent
344 call zbrac( alphaf, x1, x2, success )
345 if (success) fs=zbrent( alphaf, x1, x2, 1.0d-6 )
360 DOUBLE PRECISION a,gammq,x
362 DOUBLE PRECISION gammcf,gamser,gln
363 if(x.lt.0..or.a.le.0.)
call pausex(
'bad arguments in gammq')
365 call gser(gamser,a,x,gln)
368 call gcf(gammcf,a,x,gln)
383 SUBROUTINE gcf(gammcf,a,x,gln)
386 DOUBLE PRECISION a,gammcf,gln,x,EPS,FPMIN
387 parameter(itmax=100,eps=3.e-7,fpmin=1.e-30)
390 DOUBLE PRECISION an,b,c,d,del,h,gammln
400 if(abs(d).lt.fpmin)d=fpmin
402 if(abs(c).lt.fpmin)c=fpmin
406 if(abs(del-1.).lt.eps)
goto 1
408 call pausex(
'a too large, ITMAX too small in gcf')
409 1 gammcf=exp(-x+a*log(x)-gln)*h
422 SUBROUTINE gser(gamser,a,x,gln)
425 DOUBLE PRECISION a,gamser,gln,x,EPS
426 parameter(itmax=100,eps=3.e-7)
429 DOUBLE PRECISION ap,del,sum,gammln
432 if(x.lt.0.)
call pausex(
'x < 0 in gser')
443 if(abs(del).lt.abs(sum)*eps)
goto 1
445 call pausex(
'a too large, ITMAX too small in gser')
446 1 gamser=sum*exp(-x+a*log(x)-gln)
461 DOUBLE PRECISION gammln,xx
463 DOUBLE PRECISION ser,stp,tmp,x,y,cof(6)
465 DATA cof,stp/76.18009172947146d0,-86.50532032941677d0,
466 *24.01409824083091d0,-1.231739572450155d0,.1208650973866179d-2,
467 *-.5395239384953d-5,2.5066282746310005d0/
471 tmp=(x+0.5d0)*log(tmp)-tmp
472 ser=1.000000000190015d0
477 gammln=tmp+log(stp*ser/x)
484 SUBROUTINE zbrac(func,x1,x2,succes)
487 DOUBLE PRECISION x1,x2,func,FACTOR
489 parameter(factor=1.6,ntry=50)
491 DOUBLE PRECISION f1,f2
494 *
call pausex(
'you have to guess an initial range in zbrac')
499 if(f1*f2.lt.0.)
return
500 if(abs(f1).lt.abs(f2))
then
511 FUNCTION zbrent(func,x1,x2,tol)
514 DOUBLE PRECISION zbrent,tol,x1,x2,func,EPS
516 parameter(itmax=100,eps=3.e-8)
518 DOUBLE PRECISION a,b,c,d,e,fa,fb,fc,p,q,r,s,tol1,xm
523 if((fa.gt.0..and.fb.gt.0.).or.(fa.lt.0..and.fb.lt.0.))
524 *
call pausex(
'root must be bracketed for zbrent')
528 if((fb.gt.0..and.fc.gt.0.).or.(fb.lt.0..and.fc.lt.0.))
then
534 if(abs(fc).lt.abs(fb))
then
542 tol1=2.*eps*abs(b)+0.5*tol
544 if(abs(xm).le.tol1 .or. fb.eq.0.)
then
548 if(abs(e).ge.tol1 .and. abs(fa).gt.abs(fb))
then
556 p=s*(2.*xm*q*(q-r)-(b-a)*(r-1.))
557 q=(q-1.)*(r-1.)*(s-1.)
561 if(2.*p .lt. min(3.*xm*q-abs(tol1*q),abs(e*q)))
then
574 if(abs(d) .gt. tol1)
then
581 call pausex(
'zbrent exceeding maximum iterations')
589 print *,
'[execution paused, press enter to continue]'
double precision function corrl()
double precision function betai(a, b, x)
double precision function zbrent(func, x1, x2, tol)
subroutine gser(gamser, a, x, gln)
double precision function gammln(xx)
integer, dimension(mxspc), save ixsp
double precision function chi(p, nu)
double precision function alphat(t)
double precision function betacf(a, b, x)
double precision function alphaf(f)
double precision function residx()
double precision function ts(al, nu)
double precision, dimension(mxpt), save fvec
subroutine zbrac(func, x1, x2, succes)
double precision function fs(al, nu1, nu2)
double precision function gammq(a, x)
double precision, dimension(mxspc), save rmsn
integer, dimension(mxspc), save npts
subroutine gcf(gammcf, a, x, gln)
double precision function pchi(chi)