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 に答える