2012-04-13 36 views
0

好像我不擅長FORTRAN或MATLAB,但對它們都有一點了解。雖然我發現MATLAB擅長處理矩陣,但我還發現fortran程序中的隱式接口相當方便(我可以將聲明的變量,特別是某些大型數組,傳遞給隱式函數,而不會將它們作爲輸入虛擬參數,並且我也可以輕鬆地將界面中聲明的變量傳回給調用程序)。matlab中的隱式接口

我只是想知道在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 
+0

我不清楚Fortran中的隱式接口是什麼。從你的問題的文本,這是否意味着變量(也許具有相同的名稱)以某種方式傳入和傳出子例程而不作爲參數傳遞? – Pursuit 2012-04-13 03:26:35

+3

我很清楚Fortran中的隱式接口是什麼。但是這個術語在問題中的使用使我懷疑OP使用非Fortran標準方式的術語。 OP可以更明確嗎? – 2012-04-13 04:35:43

+0

@Lagrange:你可以重新編輯你的代碼片段並從評論中刪除它們。很難弄清楚你現在的程序是什麼。 – 2012-04-13 12:33:32

回答

0

我想我現在開始明白你的問題了。

爲了記錄,Fortran的這個功能,你可以明顯地將參數傳遞給函數,而不用在函數簽名中引用它們,這是一件壞事。當然,它只在這裏工作,因爲函數定義與程序本身包含在同一個源作用域中。

如果你已經超過18歲,請在你的程序中做出危險的事情。如果不是,立即停止並正確地做事 - 不要將參數傳遞到除參數列表之外的函數中,並且不要將函數本身的結果傳遞給函數以外的其他函數。

你也可以在Matlab中做到這一點。如果你在你的工作空間中放置一個名爲'a'的變量,那麼引用一個名爲'a'的變量的任何腳本都指向該變量。對於定義自己的範圍單元的Matlab函數是不同的。要從Matlab函數內引用工作區變量,您必須將其傳入或使用全局變量功能。如果你不明白Matlab中腳本和函數的區別,請點擊文檔。

+0

感謝您的建議。我會永遠記住它的。如果我聲明一個常量(參數),那麼它可以安全地傳遞給函數,對吧? – 2012-04-13 13:03:40

+1

直到你是18,你不能通過參數列表(包括返回參數)將參數傳入或傳出函數。一旦你18歲,你可以做你喜歡的事情。作爲一個成年人,我承認使用全局參數來表示諸如pi,e,光速等不可能改變的值。 – 2012-04-13 13:40:54