主题:[讨论]关于IMSL库中积分函数QDADS解算module中函数的问题
gimac
[专家分:0] 发布于 2011-08-25 17:15:00
简单描述下问题,主函数:main;
module:m1;
module中定义的函数F。
如果在main中用QDADS解算F,会出现错误提示
error #7061: The characteristics of dummy argument 1 of the associated actual procedure differ from the characteristics of dummy argument 1 of the dummy procedure. (12.2) [F]
尝试将F拿出module,在main中定义其external属性,积分能够正常运算,请问是什么原因导致这种现象出现?难道QDADS只认F的external属性吗? 我认为F函数contains在module里面,也应该是external属性啊。谢谢大家!
最后更新于:2011-08-25 17:18:00
回复列表 (共4个回复)
沙发
BachelorTom [专家分:0] 发布于 2011-10-17 11:07:00
我现在也遇到这个问题,也是在调用IMSL里面的函数UMIDH的时候出了问题。更要命的是,我的那个本应该设为external的、作为参数传递给UMIDH子程序,必须要写在module中,否则无法写出表达式来(就是说这个表达式的写法里必须用到其他函数和变量)。
不知道楼主解决了问题没?
有高手能帮忙吗?小弟万分感激了~~!
板凳
BachelorTom [专家分:0] 发布于 2011-10-17 22:06:00
已经清楚了,是返回值的精度问题。
3 楼
yfs_000 [专家分:0] 发布于 2011-11-15 13:36:00
[quote]已经清楚了,是返回值的精度问题。[/quote]
你好,能说的具体些吗?谢谢
4 楼
yfs_000 [专家分:0] 发布于 2011-11-16 11:44:00
你把它改成S_QDAGS 或 D_QDAGS试试。看下面IMSL库说明:
QDAGS
Integrates a function (which may have endpoint singularities).
Required Arguments
F — User-supplied FUNCTION to be integrated. The form is
F(X), where
X −Independent variable. (Input)
F − The function value. (Output)
F must be declared EXTERNAL in the calling program.
A — Lower limit of integration. (Input)
B — Upper limit of integration. (Input)
RESULT — Estimate of the integral from A to B of F. (Output)
Optional Required Arguments
ERRABS — Absolute accuracy desired. (Input)
Default: ERRABS = 1.e-3 for single precision and 1.d-8 for double precision.
ERRREL — Relative accuracy desired. (Input)
Default: ERRREL = 1.e-3 for single precision and 1.d-8 for double precision.
ERREST — Estimate of the absolute value of the error. (Output)
FORTRAN 90 Interface
Generic: CALL QDAGS (F, A, B, RESULT [,…])
Specific: The specific interface names are S_QDAGS and D_QDAGS.
FORTRAN 77 Interface
Single: CALL QDAGS (F, A, B, ERRABS, ERRREL, RESULT, ERREST)
Double: The double precision name is DQDAGS.
我来回复