回 帖 发 新 帖 刷新版面

主题:求助外部函数

请问如果定义了F为一个外部函数,怎么向这个外部函数传递数据(已知数组)?  
 
我用到一个积分子程序:
 

    SUBROUTINE FS(J,N,X,DN,UP)
    DIMENSION X(N)
    DOUBLE PRECISION X,DN,UP,Q
    IF (J.EQ.1) THEN
      DN=0.0
      UP=1.0
    ELSE IF (J.EQ.2) THEN
      DN=0.0
      UP=1.0
    !ELSE IF (J.EQ.3) THEN
     ! Q=X(1)*X(1)+X(2)*X(2)
      !DN=SQRT(Q)
     ! UP=SQRT(2.0-Q)
    END IF
    RETURN
    END

    FUNCTION F(N,X)
    DIMENSION X(N)
    DOUBLE PRECISION F,X
    F=X(2)*X(2)
    RETURN
    END 




SUBROUTINE FGAUS(N,JS,X,FS,F,S)
    DIMENSION JS(N),X(N)
    DIMENSION T(5),C(5),D(2,11),CC(11),IS(2,11)
    DOUBLE PRECISION X,F,S,T,C,D,CC,DN,UP,P
    DATA T/-0.9061798459,-0.5384693101,0.0,0.5384693101,0.9061798459/
    DATA C/0.2369268851,0.4786286705,0.5688888889,0.4786286705,0.2369268851/
    M=1
    D(1,N+1)=1.0
    D(2,N+1)=1.0
10    DO 20 J=M,N
      CALL FS(J,N,X,DN,UP)
      D(1,J)=0.5*(UP-DN)/JS(J)
      CC(J)=D(1,J)+DN
      X(J)=D(1,J)*T(1)+CC(J)
      D(2,J)=0.0
      IS(1,J)=1
      IS(2,J)=1
20    CONTINUE

    J=N
30    K=IS(1,J)
    IF (J.EQ.N) THEN
      P=F(N,X)
    ELSE
      P=1.0
    END IF
    D(2,J)=D(2,J+1)*D(1,J+1)*P*C(K)+D(2,J)
    IS(1,J)=IS(1,J)+1
    IF (IS(1,J).GT.5) THEN
      IF (IS(2,J).GE.JS(J)) THEN
        J=J-1
        IF (J.EQ.0) THEN
          S=D(2,1)*D(1,1)
          RETURN
        END IF
        GOTO 30
      END IF
      IS(2,J)=IS(2,J)+1
      CC(J)=CC(J)+D(1,J)*2.0
      IS(1,J)=1
    END IF
    K=IS(1,J)
    X(J)=D(1,J)*T(K)+CC(J)
    IF (J.EQ.N) GOTO 30
    M=J+1
    GOTO 10
    END
    
F自己编程,是一个外部函数,但是这个外部函数需要一个数组提供数据,当把它写进去的时候,出现错误!
请教大家!望大家指点迷津!

回复列表 (共4个回复)

沙发

SUBROUTINE FGAUS(N,JS,X,FS,F,S)

这里F作为一个函数参数,要在里面定义时要用
real*8,external :: F

而不是:
DOUBLE PRECISION X,F,S,T,C,D,CC,DN,UP,P


板凳


 The number of actual arguments cannot be greater than the number of dummy arguments.   [FGAUS]    
  
这个错误是什么?

3 楼

调用函数FGAUS时参数多于定义FGAUS时的个数。
比方说:我定义一个函数abc(n1,n2,n3),而我调用时为abc(1,2,3,4)多了一个参数。

4 楼


但是我看了,参数个数是一样的啊!会不会参数太多的原因?

我来回复

您尚未登录,请登录后再回复。点此登录或注册