我正在使用Runge-Kutta四阶方法来积分像卫星这样的点的运动。程序的编译是可以的。但是当我尝试运行它时 运行时错误 112
Reference at undefined variable,array element or function result (/UNDEF)
出现在第 19 行。我已经多次更改了循环条件,但没有任何变化。我很确定我已经声明了出现在第 19 行中的每个数量(我在那里写了 K1 的等式(。我使用的代码是Fortran 95。
代码:
program SatelliteMonopoleNoDrag
implicit none
real, external :: F1,F2,F3,F4
real :: t,x,y,u,v,K0,K1,K2,K3,M0,M1,M2,M3,N0,N1,N2,N3,P0,P1,P2,P3,h
print*, " Insert t0 "
read*, t
print*, " Insert x0 "
read*, x
print*, " Insert y0 "
read*, y
print*, " Insert u0 "
read*, u
print*, " Insert v0 "
read*, v
print*, " Insert h "
read*, h
do while (t<=86400)
K0=h*F1(t,x,y,u,v)
K1=h*F1(t+h/2.,x+K0/2.,y+M0/2.,u+N0/2.,v+P0/2.)
K2=h*F1(t+h/2.,x+K1/2.,y+M1/2.,u+N1/2.,v+P1/2.)
K3=h*F1(t+h,x+K2,y+M2,u+N2,v+P2)
M0=h*F2(t,x,y,u,v)
M1=h*F2(t+h/2.,x+K0/2.,y+M0/2.,u+N0/2.,v+P0/2.)
M2=h*F2(t+h/2.,x+K1/2.,y+M1/2.,u+N1/2.,v+P1/2.)
M3=h*F2(t+h,x+K2,y+M2,u+N2,v+P2)
N0=h*F3(t,x,y,u,v)
N1=h*F3(t+h/2.,x+K0/2.,y+M0/2.,u+N0/2.,v+P0/2.)
N2=h*F3(t+h/2.,x+K1/2.,y+M1/2.,u+N1/2.,v+P1/2.)
N3=h*F3(t+h,x+K2,y+M2,u+N2,v+P2)
P0=h*F4(t,x,y,u,v)
P1=h*F4(t+h/2.,x+K0/2.,y+M0/2.,u+N0/2.,v+P0/2.)
P2=h*F4(t+h/2.,x+K1/2.,y+M1/2.,u+N1/2.,v+P1/2.)
P3=h*F4(t+h,x+K2,y+M2,u+N2,v+P2)
x=x+(1/6.)*(K0+2*K1+2*K2+K3)
y=y+(1/6.)*(M0+2*M1+2*M2+M3)
u=u+(1/6.)*(N0+2*N1+2*N2+N3)
v=v+(1/6.)*(P0+2*P1+2*P2+P3)
t=t+h
print*, " The values of t,x,y,u,v are " ,t,x,y,u,v
end do
print*, " The values of t,x,y,u,v are " , t,x,y,u,v
end
real function F1(t,x,y,u,v)
real :: t,x,y,u,v
F1=u
end
real function F2(t,x,y,u,v)
real :: t,x,y,u,v
F2=v
end
real function F3(t,x,y,u,v)
real, parameter :: G=6.674*(10.)**(-11)
real, parameter :: M=5.9722*10**(24)
real :: t,x,y,u,v
F3=-G*M*x/(sqrt(x**2+y**2))**3
end
real function F4(t,x,y,u,v)
real, parameter :: G=6.674*(10.)**(-11)
real, parameter :: M=5.9722*10**(24)
real :: t,x,y,u,v
F4=-G*M*y/(sqrt(x**2+y**2))**3
end
M0、M1、M2、N0、N1,N2 和 P0,P1,P2 不会在第一次迭代中初始化,但您可以使用它们的值来计算 Ks