2012-04-13 8 views
0

私はFORTRANまたはMATLABのどちらかについてよく分かっていないようですが、どちらもよく分かりません。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 
+0

Fortranの暗黙のインターフェイスが何であるかはわかりません。あなたの質問のテキストから、変数(おそらく同じ名前)は引数として渡されることなく、サブルーチンの内部と外部に何らかの形で渡されることを意味しますか? – Pursuit

+3

Fortranの暗黙的なインタフェースが何であるかは、私には非常にはっきりしています。しかし、この質問の中でこの用語を使用すると、私はOPが非(Fortran)標準的な方法でこの用語を使用することを疑う。 OPはもっと明白かもしれませんか? –

+0

@Lagrange:コードスニペットを再編集してコメントから削除できますか?今あなたのプログラムが何であるか把握することは非常に難しいです。 –

答えて

0

私はあなたの質問を今理解していると思います。

記録のために、関数シグニチャで引数を参照することなく関数に引数を渡すことができるこの機能は、悪いことです。もちろん、関数定義はプログラム自体と同じソーススコープに含まれているため、ここでのみ機能します。

あなたが18歳以上の場合、あなたのプログラムでは危険なことをやり直してください。そうでない場合は、直ちに停止して適切に行います。引数を引数リスト以外の関数に渡さず、関数自体の結果以外の関数から何も渡しません。

これをMatlabでも並べ替えることができます。ワークスペースに 'a'という変数を置くと、 'a'という変数を参照するスクリプトはその変数を参照します。独自のスコープ単位を定義するMatlab関数では異なります。 Matlab関数内からワークスペース変数を参照するには、それを渡すか、グローバル変数機能を使用する必要があります。 Matlabのスクリプトと関数の違いを理解できない場合は、ドキュメントを参照してください。

+0

あなたの助言をありがとう。私はいつもそれを私の心に残しています。定数(パラメータ)を宣言すると、安全に関数に渡すことができます。 –

+1

あなたが18歳になるまでは、引数リスト(戻り引数を含む)以外の関数に引数を渡すことは絶対にしてはいけません。 18歳になると、あなたは好きなことをすることができます。大人として、私はpi、e、光の速度、変化しそうにないものなどの値にグローバルパラメータを使用することを認めます。 –

関連する問題