programme fortran
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

programme fortran



  1. #1
    invite221de832

    programme fortran


    ------

    bonjour,
    svp j'ai besoin un programme fortran de la fonction hypergeometrique 2F1(a,b,c,z) pour a,b,c,z sont des paramètrecomplexe
    merci

    -----

  2. #2
    whoami

    Re : programme fortran

    Bonjour,

    Tu dois savoir de qui il s'agit, non ?

    Donc tu écris l'algorithme correspondant, PUIS tu implémentes dans le langage cible, donc en Fortran.

  3. #3
    invite221de832

    Re : programme fortran

    merci pour votre réponse .je besoin ce programme pour calculer la fonction hypergéométrique avec les paramètres complexes.il faut tout d'abord vérifie que ce programme marche bien et puis j'utiliserai dans un autre programme.j'ai essayé de d'utiliser le programme de "Numerical Recipes Fortran 77""mais j'ai rencontré beaucoup des problèmes car je n'ai connu pas leurs interprétation et aussi beaucoup des données.est ce que vous pouvez m'aider
    merci

  4. #4
    invite221de832

    Unhappy erreurs du programation

    Bonjour ;
    j'ai essayé d'utiliser le programme FORTRAN de la fonction hypergéomètrique 2F1 (a, b; c; z) de "numerical recipes"avec a,b,c,z sont des paramètres complexes.mais lorsque je compile ce code, j'ai reçu ces messages:: (inconsistent definitions of COMMON block PATH in program units HYPGEO and ODEINT) and (argument YSTART (number 1) in reference to procedure ODEINT from procedure HYPGEO incorrect: has the wrong data type).
    aidez moi s'il vous plaît?!
    merci

    voici mon programme:

    Code:
    program  hyper  
    	IMPLICIT REAL(D-g,O-y)
    	IMPLICIT COMPLEX(a,b,C,h,Z)
        	Z=CMPLX(2.,1.)
    	a= CMPLX(1.,1.)
    	b=CMPLX(3.,2.)
    	c= CMPLX(1.,3.)
          WRITE(*,*)hypgeo(a,b,c,z)
    	stop
    	end 
     
          
    FUNCTION hypgeo(a,b,c,z)
    	COMPLEX hypgeo,a,b,c,z
          REAL EPS
          PARAMETER (EPS=1.e-6)
    CU    USES bsstep,hypdrv,hypser,odeint
          INTEGER kmax,nbad,nok
          EXTERNAL bsstep,hypdrv
          COMPLEX z0,dz,aa,bb,cc,y(2)
          COMMON /hypg/ aa,bb,cc,z0,dz
          COMMON /path/ kmax
          kmax=0
          if (real(z)**2+aimag(z)**2.le.0.25) then
            call hypser(a,b,c,z,hypgeo,y(2))
            return
          else if (real(z).lt.0.) then
            z0=cmplx(-0.5,0.)
          else if (real(z).le.1.0) then
            z0=cmplx(0.5,0.)
          else
            z0=cmplx(0.,sign(0.5,aimag(z)))
    
          endif
          aa=a
          bb=b
          cc=c
          dz=z-z0
          call hypser(aa,bb,cc,z0,y(1),y(2))
          call odeint(y,4,0.,1.,EPS,.1,.0001,nok,nbad,hypdrv,bsstep)
          hypgeo=y(1)
          return
          END
    
    SUBROUTINE hypser(a,b,c,z,series,deriv)
          INTEGER n
          COMPLEX a,b,c,z,series,deriv,aa,bb,cc,fac,temp
        !  Returns the hypergeometric series 2F1 and its derivative, iterating to machine accuracy.
        !  For cabs(z) . 1=2 convergence is quite rapid.
          deriv=cmplx(0.,0.)
          fac=cmplx(1.,0.)
          temp=fac
          aa=a
          bb=b
          cc=c
          do 11  n=1,1000
          fac=((aa*bb)/cc)*fac
          deriv=deriv+fac
          fac=fac*z/n
          series=temp+fac
          if (series.eq.temp) return
          temp=series
           aa=aa+1.
          bb=bb+1.
          cc=cc+1.
    11      enddo 
          pause 'convergence failure in hypser'
          END
    
    SUBROUTINE hypdrv(s,y,dyds)
          REAL s
          COMPLEX y(2),dyds(2),aa,bb,cc,z0,dz,z
    !  Derivative subroutine for the hypergeometric equation, see text equation (5.14.4).
          COMMON /hypg/ aa,bb,cc,z0,dz
          z=z0+s*dz
          dyds(1)=y(2)*dz
          dyds(2)=((aa*bb)*y(1)-(cc-((aa+bb)+1.)*z)*y(2))*dz/(z*(1.-z))
          return
          END
    
    SUBROUTINE odeint(ystart,nvar,x1,x2,eps,h1,hmin,nok,nbad,derivs,
         *rkqs)
          INTEGER nbad,nok,nvar,KMAXX,MAXSTP,NMAX
          REAL eps,h1,hmin,x1,x2,ystart(nvar),TINY
          EXTERNAL derivs,rkqs
          PARAMETER (MAXSTP=10000,NMAX=50,KMAXX=200,TINY=1.e-30)
          INTEGER i,kmax,kount,nstp
          REAL dxsav,h,hdid,hnext,x,xsav,dydx(NMAX),xp(KMAXX),y(NMAX),
         *yp(NMAX,KMAXX),yscal(NMAX)
          COMMON /path/ kmax,kount,dxsav,xp,yp
          x=x1
          h=sign(h1,x2-x1)
          nok=0
          nbad=0
          kount=0
          do 11 i=1,nvar
    
            y(i)=ystart(i)
    11    continue
          if (kmax.gt.0) xsav=x-2.*dxsav
          do 16 nstp=1,MAXSTP
            call derivs(x,y,dydx)
            do 12 i=1,nvar
              yscal(i)=abs(y(i))+abs(h*dydx(i))+TINY
    12      continue
            if(kmax.gt.0)then
              if(abs(x-xsav).gt.abs(dxsav)) then
                if(kount.lt.kmax-1)then
                  kount=kount+1
                  xp(kount)=x
                  do 13 i=1,nvar
                    yp(i,kount)=y(i)
    13            continue
                  xsav=x
                endif
              endif
            endif
            if((x+h-x2)*(x+h-x1).gt.0.) h=x2-x
    
            call rkqs(y,dydx,nvar,x,h,eps,yscal,hdid,hnext,derivs)
            if(hdid.eq.h)then
              nok=nok+1
            else
              nbad=nbad+1
            endif
            if((x-x2)*(x2-x1).ge.0.)then
              do 14 i=1,nvar
                ystart(i)=y(i)
    14        continue
              if(kmax.ne.0)then
                kount=kount+1
                xp(kount)=x
                do 15 i=1,nvar
                  yp(i,kount)=y(i)
    15          continue
              endif
              return
            endif
            if(abs(hnext).lt.hmin) pause
         *'stepsize smaller than minimum in odeint'
    
            h=hnext
    16    continue
          pause 'too many steps in odeint'
          return
          END
    
    SUBROUTINE bsstep(y,dydx,nv,x,htry,eps,yscal,hdid,hnext,derivs)
          INTEGER nv,NMAX,KMAXX,IMAX
          REAL eps,hdid,hnext,htry,x,dydx(nv),y(nv),yscal(nv),SAFE1,SAFE2,
         *REDMAX,REDMIN,TINY,SCALMX
          PARAMETER (NMAX=50,KMAXX=8,IMAX=KMAXX+1,SAFE1=.25,SAFE2=.7,
         *REDMAX=1.e-5,REDMIN=.7,TINY=1.e-30,SCALMX=.1)
    CU    USES derivs,mmid,pzextr
          INTEGER i,iq,k,kk,km,kmax,kopt,nseq(IMAX)
          REAL eps1,epsold,errmax,fact,h,red,scale,work,wrkmin,xest,xnew,
         *a(IMAX),alf(KMAXX,KMAXX),err(KMAXX),yerr(NMAX),ysav(NMAX),
         *yseq(NMAX)
          LOGICAL first,reduct
          SAVE a,alf,epsold,first,kmax,kopt,nseq,xnew
          EXTERNAL derivs
          DATA first/.true./,epsold/-1./
    
          DATA nseq /2,4,6,8,10,12,14,16,18/
          if(eps.ne.epsold)then
            hnext=-1.e29
            xnew=-1.e29
            eps1=SAFE1*eps
            a(1)=nseq(1)+1
            do 11 k=1,KMAXX
              a(k+1)=a(k)+nseq(k+1)
    11      continue
            do 13 iq=2,KMAXX
              do 12 k=1,iq-1
                alf(k,iq)=eps1**((a(k+1)-a(iq+1))/((a(iq+1)-a(1)+1.)*(2*k+
         *1)))
    12        continue
    13      continue
            epsold=eps
            do 14 kopt=2,KMAXX-1
              if(a(kopt+1).gt.a(kopt)*alf(kopt-1,kopt))goto 1
    14      continue
    1       kmax=kopt
          endif
          h=htry
          do 15 i=1,nv
            ysav(i)=y(i)
    15    continue
          if(h.ne.hnext.or.x.ne.xnew)then
    
            first=.true.
            kopt=kmax
          endif
          reduct=.false.
    2     do 17 k=1,kmax
            xnew=x+h
            if(xnew.eq.x)pause 'step size underflow in bsstep'
            call mmid(ysav,dydx,nv,x,h,nseq(k),yseq,derivs)
            xest=(h/nseq(k))**2
            call pzextr(k,xest,yseq,y,yerr,nv)
            if(k.ne.1)then
              errmax=TINY
              do 16 i=1,nv
                errmax=max(errmax,abs(yerr(i)/yscal(i)))
    16        continue
              errmax=errmax/eps
              km=k-1
              err(km)=(errmax/SAFE1)**(1./(2*km+1))
            endif
            if(k.ne.1.and.(k.ge.kopt-1.or.first))then
    
              if(errmax.lt.1.)goto 4
              if(k.eq.kmax.or.k.eq.kopt+1)then
                red=SAFE2/err(km)
                goto 3
              else if(k.eq.kopt)then
                if(alf(kopt-1,kopt).lt.err(km))then
                  red=1./err(km)
                  goto 3
                endif
              else if(kopt.eq.kmax)then
                if(alf(km,kmax-1).lt.err(km))then
                  red=alf(km,kmax-1)*SAFE2/err(km)
                  goto 3
                endif
              else if(alf(km,kopt).lt.err(km))then
    
                red=alf(km,kopt-1)/err(km)
                goto 3
              endif
            endif
    17    continue
    3     red=min(red,REDMIN)
          red=max(red,REDMAX)
          h=h*red
          reduct=.true.
          goto 2
    4     x=xnew
          hdid=h
          first=.false.
          wrkmin=1.e35
          do 18 kk=1,km
            fact=max(err(kk),SCALMX)
            work=fact*a(kk+1)
            if(work.lt.wrkmin)then
              scale=fact
              wrkmin=work
              kopt=kk+1
            endif
    18    continue
          hnext=h/scale
          if(kopt.ge.k.and.kopt.ne.kmax.and..not.reduct)then
    
            fact=max(scale/alf(kopt-1,kopt),SCALMX)
            if(a(kopt+1)*fact.le.wrkmin)then
              hnext=h/fact
              kopt=kopt+1
            endif
          endif
          return
          END
         SUBROUTINE pzextr(iest,xest,yest,yz,dy,nv)
          INTEGER iest,nv,IMAX,NMAX
          REAL xest,dy(nv),yest(nv),yz(nv)
          PARAMETER (IMAX=13,NMAX=50)
          INTEGER j,k1
          REAL delta,f1,f2,q,d(NMAX),qcol(NMAX,IMAX),x(IMAX)
          SAVE qcol,x
          x(iest)=xest
          do 11 j=1,nv
            dy(j)=yest(j)
            yz(j)=yest(j)
    11    continue
          if(iest.eq.1) then
            do 12 j=1,nv
              qcol(j,1)=yest(j)
    12      continue
          else
            do 13 j=1,nv
              d(j)=yest(j)
    13      continue
            do 15 k1=1,iest-1
    
              delta=1./(x(iest-k1)-xest)
              f1=xest*delta
              f2=x(iest-k1)*delta
              do 14 j=1,nv
                q=qcol(j,k1)
                qcol(j,k1)=dy(j)
                delta=d(j)-q
                dy(j)=f1*delta
                d(j)=f2*delta
                yz(j)=yz(j)+dy(j)
    14        continue
    15      continue
            do 16 j=1,nv
              qcol(j,iest)=dy(j)
    16      continue
          endif
          return
          END
    
          SUBROUTINE mmid(y,dydx,nvar,xs,htot,nstep,yout,derivs)
          INTEGER nstep,nvar,NMAX
          REAL htot,xs,dydx(nvar),y(nvar),yout(nvar)
          EXTERNAL derivs
          PARAMETER (NMAX=50)
          INTEGER i,n
          REAL h,h2,swap,x,ym(NMAX),yn(NMAX)
          h=htot/nstep
          do 11 i=1,nvar
            ym(i)=y(i)
            yn(i)=y(i)+h*dydx(i)
    11    continue
          x=xs+h
          call derivs(x,yn,yout)
          h2=2.*h
          do 13 n=2,nstep
            do 12 i=1,nvar
              swap=ym(i)+h2*yout(i)
              ym(i)=yn(i)
              yn(i)=swap
    
    12      continue
            x=x+h
            call derivs(x,yn,yout)
    13    continue
          do 14 i=1,nvar
            yout(i)=0.5*(ym(i)+yn(i)+h*yout(i))
    14    continue
          return
          END
    Dernière modification par JPL ; 10/01/2011 à 15h40. Motif: Ajout de la balise Code pour la lisibilité

  5. A voir en vidéo sur Futura
  6. #5
    invite5b8ffc78

    Re : programme fortran

    salem pr moi je peux pas t'aider dsl
    et est ce que est possible que tu m'aide
    quand je le compile aucun erreur mais a l'exécution il ne donne pas les résultat

    DIMENSION VAL(4)
    open(unit=10,file='bmat.dat',s tatus='old')

    open(unit=12,file='result.txt' ,status='unknown')
    read(10,*)(EL,W,E,EI,x=3,6)
    R=1/(E*EI)
    I=0
    DO 10 X=3,6
    I=I+1
    A=(X**3)*(EL*W)/48.0
    B=(X-(EL/2))**4*(W/24.)
    C=((EL)**3)*X*(7./384.)
    VAL(I)=R*(A-B-C)
    10CONTINUE
    WRITE (12,6)(VAL(I),I=1,4)
    6 format (1(2x,E8.4))
    STOP
    END


    merci d'avance

Discussions similaires

  1. Help en Fortran...
    Par orhi dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 14/11/2010, 18h31
  2. comment utiliser les résultats d'un programme fortran dans un autre programme
    Par invitedb78a3a3 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/09/2010, 19h21
  3. Algorithme et programme fortran
    Par inviteb4e35825 dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 11/06/2010, 14h12
  4. Programme Fortran
    Par invite852c2439 dans le forum Mathématiques du supérieur
    Réponses: 1
    Dernier message: 28/01/2009, 10h34
  5. Fortran .....
    Par invite7f60f800 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 07/12/2007, 21h04