我对编程比较陌生,我现在正在尝试使用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
在下面的bradys建议稍作修改后,我现在只得到错误,似乎无论t维度的价值如何:
`In file RK.f:21
while t(i)<b
1
Error: Unexpected array reference at (1)
非常感谢!
答案 0 :(得分:0)
看起来您没有声明任何变量。每个变量的类型由变量名的第一个字符声明。除非您明确地为变量指定维度(或大小),否则它将被视为标量变量。由于您没有声明任何内容,编译器不知道t
和y
应该是数组(因此是“意外的数组引用”警告消息)。
如果可以,我强烈建议您使用IMPLICIT NONE
(不确定它是否是Fortran 77中的标准配置)。无论哪种方式总是声明您使用的每个变量。在您的情况下,您需要使用适当的大小声明t
和y
:
DIMENSION t(n), y(n)
使用表示实际大小的整数替换n。请记住,如果访问数组超出范围,则程序的行为是未定义的。未定义通常意味着您的程序将崩溃。