0

私はプログラミングに比較的慣れていないので、Fortran 77 を使用して、方程式を解くルンゲクッタ法を使用して、特定の時間値で球状のボールの温度を決定するプログラムを作成しようとしています。とにかく、方程式は問題なく、問題を引き起こしているようには見えません。RK メソッド自体のプログラミングのようです。

コンパイルするように指示すると、「予期しない配列参照」に関するエラーが繰り返し表示されます。私が間違っている場所について誰かが私にいくつかの指針を与えることができれば、大歓迎です。コードと結果を以下に投稿します。

  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

以下の bradys の提案に従って少し変更した後、t の次元の値に関係なく、エラーが発生するようになりました。

  `In file RK.f:21

  while t(i)<b
         1
  Error: Unexpected array reference at (1)

どうもありがとう!

4

1 に答える 1

0

変数を宣言していないようです。各変数の型は、変数名の最初の文字で宣言されます。また、変数に次元 (またはサイズ) を明示的に割り当てない限り、それはスカラー変数と見なされます。何も宣言しなかったため、コンパイラはそれを認識せず、配列であるty想定されています(したがって、「予期しない配列参照」警告メッセージが表示されます)。

可能であれば使用することを強くお勧めしますIMPLICIT NONE(Fortran 77 で標準かどうかはわかりません)。いずれにせよ、使用するすべての変数を常に宣言してください。あなたの場合、適切なサイズで宣言する必要がありtますy

DIMENSION t(n), y(n)

ここで、n を実際のサイズを表す整数に置き換えます。範囲外の配列にアクセスすると、プログラムの動作が未定義になることに注意してください。undefined は通常、プログラムがクラッシュすることを意味します。

于 2011-01-21T15:21:29.657 に答える