回 帖 发 新 帖 刷新版面

主题:外部函数调用多个返回值问题

下面这个程序是调用imsl里的函数QDAG进行积分的程序,要用到调用外部函数,函数只有一个变量x,返回值是f(这样表述可能不对),

program m324

USE imsl
IMPLICIT NONE
INTEGER IRULE, NOUT
REAL A, ABS, B, ERRABS, ERREST, ERROR, EXACT, EXP, &
F, RESULT,ERRREL
INTRINSIC ABS, EXP
EXTERNAL F

ERRABS=1.0E-3
ERRREL=1.0E-3
A = 0.0
B = 2.0

ERRABS = 0.0

IRULE = 1

CALL QDAG (F, A, B, ERRABS, ERRREL, IRULE, RESULT, ERREST)

EXACT = 1.0 + EXP(2.0)
ERROR = ABS(RESULT-EXACT)
WRITE (*,*) RESULT, EXACT, ERREST, ERROR

END

 REAL FUNCTION F (X)
REAL X
REAL EXP
INTRINSIC EXP
F = X*EXP(X)
RETURN
END

我想能否让函数f(x)括号里包含好几个返回值呢?比如几个常数。f(c,x),c要从主函数里调入,然后返回f
 REAL FUNCTION F (c,X)
REAL X,c
REAL EXP
INTRINSIC EXP
F =c* X*EXP(X)
RETURN
END
但是这样会提示出错。怎么样做才行呢?我看了下书,形参可以有多个参数的啊。谢谢啦

回复列表 (共2个回复)

沙发

是不是这样啊:在外部函数可以自己定义一些参数,比如
REAL FUNCTION F (X)
REAL X,c
REAL EXP
INTRINSIC EXP
c=0.5
F =c* X*EXP(X)
RETURN
END

经过验证这样是可以的。

板凳

因为你把 F 当做参数传递给 QDAG 了,那么 QDAG 需要确切地知道 F 是什么,因此,F 的参数个数就限定死了。不能随意变动。

要知道,QDAG 内部会调用 F,所以如果你的 F 参数变化了,而 QDAG 内部是固定的(IMSL已经确定的)

解决的办法就是用其他方式传入 c 。比如 common(不推荐)或者 module(推荐)

Module Modc
  real c
End Module Modc

Program Main
  Use Modc
  c = 3.0
  call QDAG(F ... )
End Program

Function F( x )
  Use Modc
  F = c * x
End Functioon

我来回复

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