2011-01-21 19 views
1

私は比較的プログラミングが新しく、現在、球面の温度を求めるための方程式解法のRunge-Kutta法を使うFortran 77を使ってプログラムを書こうとしています特定の時間値でのボール。とにかく、方程式は問題ありませんが、それはRKメソッド自体のプログラミングであるようです。Fortran 77の "Unexpected Array Reference"

私はコンパイルするように指示すると、「予期しない配列参照」に関する繰り返しのエラーが表示されます。誰かが私が間違っている場所について私にいくつかの指摘を与えることができれば、非常に感謝します。

`In file RK.f:21 

    while t(i)<b 
     1 
    Error: Unexpected array reference at (1) 
:以下bradys提案トンの大きさの、私は今だけ、エラーを取得しています、一見どんなに値以下少し修正した後

PROGRAM RKSubroutine 
    IMPLICIT NONE 
    DIMENSION t(3), y(3) 

    func=(-2.2067E-12)*((y**4)-(81E8)); 
    y0=1200; 
    h1=240; 
    a=0; 
    b=480; 

    func is name of function to be evaluated 
    a & b are the limits of integration 
    y0 is the initial condition 
    h1 is the stepsize  

    t=[a]; 
    y=[y0]; 
    i=1; 

    while t(i)<b 

    h=h1 
    k1=feval(func,t(i), y(i)); 
    k2=feval(func,t(i)+h/2,y(i)+k1*h/2); 
    k3=feval(func,t(i)+h/2,y(i)+k2*h/2); 
    k2=feval(func,t(i)+h,y(i)+k3*h); 

    y1=y(i)+(k1+2*k2+2*k3+k4)*h/6; 

    i=i+1; 
    t(i)=t(i-1)+h1; 

    stop 
    end 

:私はコードと以下の結果を投稿します

多くの感謝!

+0

このコードはどこにありますか?それはFORTRAN77ではありません - 単純なFORTRANプログラムを実行しましたか? http://en.wikipedia.org/wiki/Fortran#FORTRAN_77 –

+0

こんにちはPeterさん。これまでにいくつかの簡単なF77プログラムを書いてきましたが、RKメソッドを使って問題を解決しようとしたのは初めてです。私はコードを書いて、Wikiの一般的な第4回目のRunge-Kuttaメソッドに関する助けを借りました。http://en.wikipedia.org/wiki/Runge-Kutta_methods – PhysProg

答えて

0

変数を宣言していないようです。各変数の型は、変数名の最初の文字によって宣言されます。また、変数に次元(またはサイズ)を明示的に代入しない限り、スカラー変数とみなされます。あなたは何も宣言していないので、コンパイラはtyが配列であることを知りません(したがって、予期しない配列参照の警告メッセージ)。

可能であればIMPLICIT NONEを使用することを強くお勧めします(Fortran 77に標準であるかどうかはわかりません)。どちらの方法でも、使用するすべての変数が宣言されます。

DIMENSION t(n), y(n) 

あなたが実際のサイズを表す整数でnを交換:あなたのケースでは、適切なサイズでtyを宣言する必要があります。境界外の配列にアクセスする場合、プログラムの動作は定義されていないことに注意してください。 undefinedは、通常、プログラムがクラッシュすることを意味します。

+0

これは素晴らしい、感謝しています。私は今、ファイルRK.f:21 の中で、t(i) PhysProg

関連する問題