Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran数组不可分类语句_Fortran_Gfortran - Fatal编程技术网

Fortran数组不可分类语句

Fortran数组不可分类语句,fortran,gfortran,Fortran,Gfortran,在第9行和第10行: program rk4 real x(200), y(200), h, k1, k2, k3, k4 integer i read*,x(0),y(0),h do i=0,10 k1=x(i)-y(i)+2 x(i+1)=x(i)+h k2=(x(i)+h/2)-(y(i)+(h/2)*k1))+2 k3=(x(i)+h/2)-(y(i)+(h/2)*k2))+2 k4=(x(i+1))-(y(i)+h*(k3))+2 y(i+1

在第9行和第10行:

  program rk4
  real x(200), y(200), h, k1, k2, k3, k4
  integer i
  read*,x(0),y(0),h
  do i=0,10
  k1=x(i)-y(i)+2
  x(i+1)=x(i)+h
  k2=(x(i)+h/2)-(y(i)+(h/2)*k1))+2
  k3=(x(i)+h/2)-(y(i)+(h/2)*k2))+2
  k4=(x(i+1))-(y(i)+h*(k3))+2
  y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4)
  print*, 'x=', x(i+1), 'y=', y(i+1)
  enddo
  end

我得到了“在(1)处的不可分类声明”,其中(1)指向k2和k3。我看不出我做错了什么,因为k1和k4遵循类似的结构,似乎它们没有任何问题

对于
k2
k3
,错误消息似乎来自过多的右括号“)”。另一个错误是数组
x
y
需要声明为
x(0:200)
y(0:200)
,因为您正在访问
x(0)
y(0)
。如果以上两点是固定的,则代码应能正常工作

作为旁注,我真的建议使用
隐式无
,这对于检测潜在的错误非常有用,并在浮点运算中使用浮点文本,例如2.0而不是2(除了像
x**2
这样的幂)。在下面的代码中,我将分析结果与您的RK4结果进行了比较,两者似乎非常吻合

  k2=(x(i)+h/2)-(y(i)+(h/2)*k1))+2
  k3=(x(i)+h/2)-(y(i)+(h/2)*k2))+2
程序rk4
没有!
program rk4
implicit none                                   !<--- this is useful
real x(0:200), y(0:200), h, k1, k2, k3, k4      !<--- indices now start from 0
integer i
read *, x(0), y(0), h

do i = 0, 10
    x(i+1) = x(i) + h
    k1 = x(i) - y(i) + 2.0                                  ! y' = x - y + 2
    k2 = ( x(i) + h/2.0 ) - ( y(i) + h/2.0 * k1 ) + 2.0     !<--- ")" has been removed
    k3 = ( x(i) + h/2.0 ) - ( y(i) + h/2.0 * k2 ) + 2.0     !<--- here also
    k4 = ( x(i+1)       ) - ( y(i) + h     * k3 ) + 2.0
    y(i+1) = y(i) + h/6.0 * ( k1 + 2.0*k2 + 2.0*k3 + k4 )
    print*, 'x=', x(i+1), 'y(rk4)=', y(i+1), &
            'y(ana)=', x(i+1)+1.0 + (y(0)-x(0)-1.0) * exp(-x(i+1)+x(0))
enddo
end