我有一个用标准FORTRAN 77编写的简单代码,用于数值积分运动方程。集成循环如下
yant=x0(2)
DO i=1,n-1
ti=t0+DBLE(i-1)*tstep
t=ti
CALL bstoer8(t,tstep,x,ndimf,ierr,derivs)
IF(x(2)*yant.LT.0d0)THEN
WRITE(52,'(7(F16.8))')t,x
ENDIF
yant=x(2)
ENDDO
bstoer8模块包含标准的Bulirsh-Stoer积分器,可以找到它here。
正如我们所看到的,当y = 0时,我想打印外部数据文件的时间和所有六个向量元素(x,y,z,p_x,p_y,p_z)。
然而,当y = 0时,我没有得到确切的时间。我得到的是最接近的时间步长。例如,数据文件中的一行是以下
-0.17000000 10.45572291 0.00264921 -0.83321521 -0.21271715 45.32160003 -1.24830046
我们观察到y非常小(0.00264921)但不完全等于零。此外,时间t仅包含两位小数,因为数值积分的时间步长等于0.01。
所以,我的问题如下:如何获得y = 0的确切时间?换句话说,我怎样才能使y等于0(八位十进制数字)和相应的八位十进制数字?
非常感谢提前!