0

我对编程比较陌生,目前正在尝试使用 Fortran 77 编写一个程序,该程序将使用 Runge-Kutta 方程求解方法来确定某个时间值下球体的温度。无论如何,方程很好,似乎没有引起任何问题,这似乎是 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

按照下面的布雷迪斯建议进行一些修改后,我现在只得到错误,似乎无论 t 的维度值如何:

  `In file RK.f:21

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

非常感谢!

4

1 回答 1

0

看起来您没有声明任何变量。每个变量的类型由变量名的第一个字符声明。除非您明确地为变量分配维度(或大小),否则它被视为标量变量。由于您没有声明任何内容,编译器不知道这一点t并且y应该是数组(因此出现“意外的数组引用”警告消息)。

如果可以的话,我强烈建议您使用IMPLICIT NONE(不确定它是否在 Fortran 77 中是标准的)。无论哪种方式,始终声明您使用的每个变量。在您的情况下,您需要声明ty具有适当的大小:

DIMENSION t(n), y(n)

您将 n 替换为表示实际大小的整数。请记住,如果您越界访问数组,程序的行为是未定义的。undefined 通常意味着您的程序将崩溃。

于 2011-01-21T15:21:29.657 回答