【发布时间】:2020-08-07 02:15:59
【问题描述】:
下面的代码有效,但是我无法按照我的意愿存储最终结果。我求解取决于 t 的变量 x,所以我想将 x(t) 存储为一维数组。对于每个 t 值,我都有不同的 x 值。
我在这样做时遇到了麻烦,因为我不知道 DO WHILE 循环必须进行多少次迭代,所以我不知道如何将数据写入可变大小的数组文件。到目前为止,我只是将 x 和 t 的结果写到屏幕上。
如何将解 x(t) 存储在单个一维数组中?我想要一个数组,给定时间 t 的输入值,它给我此时 x 的值。
program RK4
implicit none
real :: a,b,x,dt,t,f,xn,k1,k2,k3,k4,phi
integer :: n=100.
write(*,*) 'enter an initial time, final time, x(0) = '
read(*,*) a,b,x
t = a !start time here... initial time
dt = (b-a)/real(n)
do while (t < b)
k1 = f(x,t)
k2 = f(x+k1*dt/2., t+dt/2.)
k3 = f(x+k2*dt/2., t+dt/2.)
k4 = f(x+k3*dt, t+dt)
phi = (1./6.)*(k1+2.*k2+2.*k3+k4)
xn = x + dt*phi
t = t + dt
x = xn
write(*,*) 'the results for position and time are given by', x,t !This prints out the results, but I want to store this in a single variable as x(t).
end do
end program RK4
function f(x,t)
real, intent(in) :: x,t
f = -2*x
end function f
【问题讨论】:
-
在 do-loop 结束之前是否需要一维数组的内容来进行任何计算,或者这只是为了存储?
-
我不需要循环结束之前的内容。 DO WHILE 循环结束后,我需要将数据用于代码中的其他计算。所以我想在我这样做之前把它保存好。感谢您的帮助。
-
最简单的方法可能是使用临时文件。跟踪那里存储了多少项目,然后一旦完成,将其读入适当大小的可分配数组...
-
好吧,这听起来很合理。你能提供一个基本的代码吗?如果是这样,我将能够将它应用到我的真实代码中。这段代码只是一个示例,我的实际代码有点复杂,我试图存储的函数是一个 5D 数组,而不是 1D 数组。非常感谢您对我的问题的帮助!
标签: fortran