2013-10-11 2 views
0

В следующей программе есть ошибка, и я не знаю, в чем проблема.ошибка неклассифицируемой выписки в fortran

IMPLICIT NONE 
     DOUBLE PRECISION X(100),W(100),lambdainv,g,lambda,alfac 
     INTEGER i, N 

     N=100 
     alfac=939.D0*2.D22 

     CALL GAUSS_L(1.D0,100.D0,100,X,W) 

     lambdainv=0.D0 

     DO i=1,N 
      lambdainv=lambdainv+((W(i)*(X(i))**2)/(alfac+ 
    >    (X(i))**2))*g(X(i)))**2 

     END DO 

      lambda=lambdainv**(-1) 

     WRITE(*,*)'lambda=', lambda 

     STOP 
     END 

c  Funcion g 
     DOUBLE PRECISION FUNCTION g(X) 

     IMPLICIT NONE 
     DOUBLE PRECISION X, mu, pi 

c  Inicializamos las variables 
     mu=138.d0 
     pi=ATAN(1.D0)*4.D0 


     g=(2.d0*sqrt(mu**3))/((sqrt(pi))*(mu**2+X**2)) 

     RETURN 
     END 

Ошибка:

lambdainv=lambdainv+((W(i)*(X(i))**2)/(alfac+     
      1 

Error: Unclassifiable statement at (1) 

спасибо !!

+0

Вместо 'лямбда = lambdainv ** (- 1) 'вы должны написать' лямбда = 1. d0/lambdainv'. Если ваш компилятор не очень умный и не видит того, чего вы пытаетесь достичь, он попытается фактически выполнить силовую операцию (что очень дорого). Здесь не должно быть никакого значения, но внутри цикла это было бы заметно. То же самое справедливо для 'X ** 2', лучше записать его как' X * X' - хотя большинство компиляторов обнаружит это, если показатель является «целым числом». –

ответ

0

Ваши скобки не сбалансированы в соответствующей строке, когда вы принимаете во внимание продолжение этой линии!

ли вы имеете в виду:

  lambdainv=lambdainv+(W(i)*X(i)**2/(alfac+ 
    >    X(i)**2)*g(X(i)))**2 

(Это дикое предположение, конечно!)

Смежные вопросы