0

似乎我不擅长 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
4

1 回答 1

0

我想我现在开始理解你的问题了。

郑重声明,Fortran 的这个特性,你显然可以将参数传递给函数而不在函数签名中引用它们,这是一个坏事。当然,它只在这里有效,因为函数定义包含在与程序本身相同的源范围内。

如果您已超过 18 岁,请继续在您的程序中做一些危险的事情。如果不是,请立即停止并正确地做事——不要将参数传递给函数参数列表之外的函数,也不要将任何东西传递给函数,而不是通过函数本身的结果。

您也可以在 Matlab 中执行此操作。如果您在工作区中放置一个名为“a”的变量,那么任何引用名为“a”的变量的脚本都会引用该变量。Matlab 函数则不同,它们定义了自己的范围单位。要从 Matlab 函数中引用工作区变量,您必须将其传入或使用全局变量功能。如果您不了解 Matlab 中脚本和函数之间的区别,请点击文档。

于 2012-04-13T12:45:46.133 回答