      subroutine regression(nd,ichoi3,ma,xmin,xmax)
c
c     Cette routine effectue des regressions sur les donnees
c     transmises en utilisant les routines de numrec:
c
c     FIT : regression lineaire par minimisation du chi carre (14.2), ou
c     MEDFIT : par moindre deviation absolue (14.6)
c     SDVFIT : regresion polynomiale (14.3)
c
c     et prepare un fichier pour dessiner la relation avec Mongo
c
c     Date de la derniere modification:  03.06.88
c
      common/un/noet(800),x(800),y(800),sig(800)
c
      external fpoly,hyperb
      character stat*3
      logical l
      dimension xd(7),yd(7),u(800,20),v(20,20),w(20),c(20)
c
c     choix des regressions selon le parametre transmis
c
      goto(11,12,13,14) ichoi3
c
   11 call fit(x,y,nd,sig,0,a,b,siga,sigb,chi2,q)
      write(6,200)
  200 format(//,' Regression lineaire par minimisation du Chi2',//)
      write(6,210) b,sigb,a,siga,chi2
  210 format(' Pente      : ',f9.4,' +- ',f7.4,//,
     1       ' Ordonnee   : ',f9.4,' +- ',f7.4,//,
     2       ' Chi carre  : ',f7.3,//)
      goto 19
c
   12 call medfit(x,y,nd,a,b,abdev)
      write(6,220)
  220 format(//,' Regression lineaire par moindre deviation absolue',//)
      write(6,230) b,a,abdev
  230 format(' Pente      : ',f9.4,//,
     1       ' Ordonnee   : ',f9.4,//,
     2       ' Deviation  : ',f9.4,//)
      goto 19
c
   13 call svdfit(x,y,sig,nd,c,ma,u,v,w,800,10,chisq,fpoly)
      write(6,240)
  240 format(//,' Regression polynomiale',//)
      write(6,245)
  245 format(' Coefficients:',//)
      do 20 k=1,ma
      kdeg=k-1
      write(6,250) kdeg,c(k)
  250 format('    a',i1,' = ',f10.5)
      write(6,251) chisq
  251 format(/'  chi2 = ',f6.3)
   20 continue
      goto 19
c
   14 call svdfit(x,y,sig,nd,c,ma,u,v,w,800,10,chisq,hyperb)
      write(6,255)
  255 format(//,' Regression hyperbolique',//)
      write(6,245)
      do 18 k=1,ma
      kdeg=k-1
      write(6,250) kdeg,c(k)
      write(6,251) chisq
   18 continue
c
   19 inquire(file='.T/rgl.eca',exist=l)
      if(.not.l) then
      stat='new'
      else
      stat='old'
      endif
      open(15,file='.T/rgl.eca',status=stat)
c
c     calcul des points a dessiner
c
      goto(21,21,22,22) ichoi3
c
   21 xd(1)=xmin-(xmax-xmin)/20.
      xd(2)=xmin
      xd(3)=xmin+(xmax-xmin)/4.
      xd(4)=xmin+(xmax-xmin)/2.
      xd(5)=xmin+(xmax-xmin)*3./4.
      xd(6)=xmax
      xd(7)=xmax+(xmax-xmin)/20.
c
      do 30 k=1,7
      yd(k)=a+b*xd(k)
      write(15,280) xd(k),yd(k)
  280 format(1x,f9.3,2x,f9.3)
   30 continue
      goto 32
c
   22 xdif=xmax-xmin
      xdmin=xmin-xdif/20.
      xdmax=xmax+xdif/20.
c
c     Polynome
c
      do 51 k=1,100
      xg=xdmin+k*xdif/20. 
      yg=c(1)
      do 52 kk=2,ma
      j=kk-1
      if(ichoi3.eq.4) j=-j
      yg=yg+c(kk)*(xg**j)
   52 continue
      if(xg.gt.xdmax) goto 32
      write(15,280) xg,yg
   51 continue
c
   32 close(15,status='keep')
      return
      end
c
      subroutine fpoly(x,p,np)
c
      dimension p(np)
c
      p(1)=1.
      do 11 j=2,np
      p(j)=p(j-1)*x
   11 continue
      return
      end
c
      subroutine hyperb(x,p,np)
c
      dimension p(np)
c
      p(1)=1.
      do 11 j=2,np
      p(j)=p(j-1)*(1/x)
   11 continue
      return
      end
