首页 > 解决方案 > 调用一个子程序,该子程序调用一个固定的二变量函数

问题描述

我有一个主程序,可以为两个变量 x 和 y 赋值。我还有一个函数子程序,例如定义 f(x,y) = x*y。我还有一个函数子程序,它返回给定分隔符的单变量函数的积分值。

我不想要 f(x,y) 的双重积分,我希望在其中一个变量中进行简单积分,例如 y,当我为另一个变量分配固定值时,例如 x

因此,在主程序中,x 可以取值为 5,然后调用函数“integral(f, 0, 1)”将 f(5,y) = 5*x 从 y = 0 积分到 y = 1 ,将结果作为实变量返回。

我有这些选择:

a) 创建另一个定义 f(z) = 5*z 的函数,并使用积分函数计算积分。这不太好,因为我可能想为 x 分配另一个值,这意味着创建尽可能多的新函数,因为我可能需要为 x 赋予一个新值。

b) 我可以创建一个包含新函数 f(z) 的模块,与主程序和积分函数共享 x 值,以便我可以在主程序中为 x 分配任何值,该函数将自动识别f(z),它又将用作积分函数的外部。

c) 使用旧的通用语句,它的工作方式与选项“b”中的模块一样。

我的问题:还有其他选择,也许是更好的选择?

选项“b”如下所示:

MODULE module_test
IMPLICIT NONE
REAL :: x
CONTAINS
REAL FUNCTION func(z)
REAL :: z, f
func = f(x,z)
END FUNCTION func
END MODULE module_test
PROGRAM main
USE module_test
IMPLICIT NONE
REAL :: y, int_value, integral
x = 5.
int_value = integral(func, 0, 1)
PRINT*, int_value
END PROGRAM main
REAL FUNCTION f(x,y)
IMPLICIT NONE
REAL, INTENT(IN) :: x, y
f = x*y
END FUNCTION f
REAL FUNCTION integral(fun, a, b)
USE module_test
IMPLICIT NONE
REAL, INTENT(IN) :: a, b
REAL, EXTERNAL :: fun
REAL :: t

=== CODE FOR INTEGRATION OF "FUN" FROM "t = a" TO "t = b" HERE ===

END FUNCTION integral

标签: fortran

解决方案


推荐阅读