【发布时间】:2012-04-13 00:57:14
【问题描述】:
似乎我不擅长 FORTRAN 或 MATLAB,但对它们都略知一二。
虽然我发现 MATLAB 擅长处理矩阵,但我还发现 fortran 程序中的隐式接口相当方便(我可以将声明的变量,尤其是一些大型数组传递给隐式函数,而无需将它们作为输入伪参数,而且我可以轻松地将接口中声明的变量传递回调用程序)。
我只是想知道 MATLAB 中是否有任何类似的机制作为隐式接口,以便我可以像使用 FORTRAN 一样完成工作。 (全局变量似乎不太好,因为如果我尝试经常调用该函数,它只会变成一项乏味的工作——也许我错了)
你有什么看法?谢谢。
这是一个例子:
PROGRAM test_function
IMPLICIT NONE
REAL :: A, B
REAL :: C,D,E
A = 1
B = 2
D = 3
E = xf(A)-A
WRITE (*,*), "A = ", A
WRITE (*,*), "B = ", B
WRITE (*,*), "C = ", C
WRITE (*,*), "D = ", D
WRITE (*,*), "E = ", E
CONTAINS
FUNCTION xf(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
REAL :: xf
C = x+B
D = x+D
xf = A+B+C
END FUNCTION xf
END PROGRAM test_function
D 被传递到函数 xf(·) 中,而不被视为虚拟参数,并且 D 也可以不受限制地传递出去。程序给出的结果如下:
A = 1.0000000
B = 2.0000000
C = 3.0000000
D = 4.0000000
E = 5.0000000
【问题讨论】:
-
我不清楚 Fortran 中的隐式接口是什么。从您的问题文本来看,这是否意味着变量(可能具有相同的名称)以某种方式传入和传出子例程而不作为参数传递?
-
我很清楚 Fortran 中的隐式接口是什么。但是问题中该术语的使用使我怀疑OP以非(Fortran)标准方式使用该术语。 OP可以更明确吗?
-
@Lagrange:您能否重新编辑您的代码 sn-ps 并将它们从 cmets 中删除。现在很难弄清楚你的程序是什么。
-
抱歉,描述不明确。我用一个例子编辑了我的帖子。希望这可以使我的问题易于理解。谢谢
-
在我看来,他的意思是编译器生成了一个 explicit 接口,而用户不需要这样做。此外,函数 xf 继承父块(在本例中为主程序)的范围。当然,在 fortran 中,xf 只能从父块调用,其他程序单元不能访问该例程。
标签: matlab interface fortran implicit