Приведенный ниже код работает, однако у меня проблемы с сохранением окончательного результата, как хотелось бы. Я решаю переменную x, которая зависит от t, поэтому я хочу сохранить x (t) как одномерный массив. Для каждого значения t у меня есть другое значение x.
У меня проблемы с этим, так как я не знаю, сколько итераций обязательно займет DO WHILE l oop, поэтому я не знаю как записать данные в файл массива переменного размера. На данный момент я просто записываю результаты для 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