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