回 帖 发 新 帖 刷新版面

主题:[讨论]哈雷彗星运动问题,自己已经解决,大家可以看一下

刚做了一个关于哈雷彗星运动的问题,给出了初位置和初速度,还有受力,求以后的运动
下面是我写的源程序
program halleycomet
implicit none
integer i
DOUBLE PRECISION,parameter :: G=6.67D-11
real*8,parameter :: M=1.99D+30
integer*8,PARAMETER :: N=20000000
integer IN
DOUBLE PRECISION T(N),X(N),Y(N),R(N),VX(N),VY(N),V(N),AX(N),AY(N),A(N)
real*8 DT
in=10000
X(1)=5.28D+12
Y(1)=0.0
R(1)=5.28D+12
VX(1)=0.0
VY(1)=-9.12D+2
V(1)=9.12D+2
AX(1)=-G*M/R(1)**2
AY(1)=0
A(1)=-G*M/R(1)**2
T(1)=0.0
DT=76*365*24*3600.0/N
DO 100 I=1,N

T(I+1)=DT*I
VX(I+1)=VX(I)+AX(I)*DT
VY(I+1)=VY(I)+AY(I)*DT
X(I+1)=X(I)+VX(I)*DT
Y(I+1)=Y(I)+VY(I)*DT
R(I+1)=(X(I+1)**2+Y(I+1)**2)**(1.0/2.0)
A(I+1)=-G*M/R(I+1)**2

AX(I+1)=A(I+1)*X(I+1)/R(I+1)
AY(I+1)=A(I+1)*Y(I+1)/R(I+1)

100 CONTINUE
open(1,file="zhaominghui.txt")
WRITE(1,"(4F18.3)")(X(I),Y(I),VX(I),VY(I),I=2,N,IN)
END PROGRAM

回复列表 (共3个回复)

沙发

说实话,我严重怀疑你这样程序计算出来的精度。你可以用能量守恒或者其它方法检验一下。

说的简单一点,这个问题无非是常微分方程的数值积分问题,有现成的积分程序(RKF,Eular等积分器)可以直接用。
当然你如果仅仅是一个非常简单的问题,这样写就解决问题而言是没有问题的,但是,就编程的思路和风格来说,这样的习惯很不好。

板凳

人家只是自编、自导、自我欣赏而已,一楼不必认真。真正的周期性问题,有辛算法保证能量守恒,这一点我国科学家冯康做出了杰出的贡献。

3 楼

楼上两位高手,我是刚入门的小兵虾,由于现在计算物理刚开始学,老师让学fortran,我也是刚接触,语法只是浏览了一下,这个题其实是计算物理第一章的一个习题,我自己编的这个程序感觉还是有问题的,我自己找不出来,
WRITE(1,"(4F18.3)")(X(I),Y(I),VX(I),VY(I),I=2,N,IN)这里的i本来要从1开始输出的,这样才能首尾相接,但是我发现改成1后执行得出来的结果不正确,不得已,为了交作业,就把它改成2了,希望高手门指点一二,以解小弟我胸中疑惑

我来回复

您尚未登录,请登录后再回复。点此登录或注册