数蕴物语之数据可视化大赛
队名:
队长学号:
队长学院:
联系方式:
玫瑰线的设计与实现
目 录
(一)、 呈现效果图............................................................................... 3
(二)、 实现方式....................................................................................4
1. 使用软件:..........................................................................................4
2. 使用代码:..........................................................................................4
(三)、 数据来源....................................................................................4
(四)、 数据处理方式........................................................................... 4
(五)、 数据内涵....................................................................................4
(六)、 对本次实验的心得与体会...................................................... 4
(七)、 对本次活动的建议...................................................................4
(八)、 附录............................................................................................5
2 / 10
玫瑰线的设计与实现
(一)、 呈现效果图
不受限制混沌的三体运动
星体 1(红线)坐标(3,0)星体 2(绿线)(0,0)星体 3(蓝线)(-3,0)
质量 1 速度(0,4)
质量 3 速度(0,0) 质量 1 速度(0,-4)
受限制三体运动的一种较稳定的解
3 / 10
玫瑰线的设计与实现
(二)、 实现方式
1. 使用软件:
Python3.6
2. 使用代码:见附录
(三)、 数据来源
由牛顿第二定律 F=ma 和万有引力定律 F=
1m
mG
2
2
r
得出三个质点相互作用下的三个二阶常
微分运动方程组(约束在平面),通过初始条件的改变,求解得到不同的运动轨迹。
(四)、 数据处理方式
通过引入速度 v,将一个二阶常微分方程(x’’=a)化为含两个一阶常微分方程的方程组(x’=v,
v’=a),将每个质点的运动分为 x,y 两个方向从而得到一个含 12 个一阶常微分方程的方程
组。
编程实现 4 阶龙格-库塔方法(RK4)求解得到的一阶常微分方程组,得到质点组在 h=Δt 之
后的位置,把这些点连起来就得到三个质点在相互作用下的运动轨迹。由于万有引力常数
G=6.67*10^-11,模拟时不可能使用这么小的数计算,所以本次模拟设定 G=10,也能得到比较
准确的天体运动模拟图像。
(五)、 数据内涵
设定三个质点的质量和所在的位置和速度即初始条件,可以通过编程计算得到从 t=0 开始,
每隔一小段时间 h=Δt 时刻三个质点位置,从而通过控制 h 足够小来实现三体运动的轨迹绘
制。
(六)、 对本次实验的心得与体会
通过使用 Python 绘制该图形,让我更加熟悉了数学软件的基本运用。以后可以籍此在别的
方面得到一定的帮助。同时了解了三体问题虽无解析解,但一定程度上可以模拟其运动轨迹。
(七)、 对本次活动的建议
1. 建议将编程的文件和代码一并上交。
2. 建议去掉“对本次活动的建议”一项。
3. 增加赛前交流会。
4 / 10
玫瑰线的设计与实现
(八)、 附录
import numpy as np
import matplotlib.pyplot as plt
def m(i, c, n, p): #i 为时间间隔,c 为初值条件,n 为分割次数,p 为质量,龙格库塔方法近
似
h = (i[1] - i[0])/n
x1 = c[0]
vx1 = c[1]
x2 = c[2]
vx2 = c[3]
x3 = c[4]
vx3 = c[5]
y1 = c[6]
vy1 = c[7]
y2 = c[8]
vy2 = c[9]
y3 = c[10]
vy3 = c[11]
m1 = p[0]
m2 = p[1]
m3 = p[2]
plx1 = np.empty((n,), dtype=np.float)
ply1 = np.empty((n,), dtype=np.float)
plx2 = np.empty((n,), dtype=np.float)
ply2 = np.empty((n,), dtype=np.float)
plx3 = np.empty((n,), dtype=np.float)
ply3 = np.empty((n,), dtype=np.float)
g = 10
for t in range(n):#梯形法则
x1k1 = vx1
y1k1 = vy1
x2k1 = vx2
y2k1 = vy2
x3k1 = vx3
y3k1 = vy3
x1l1
=
g*m2*(x2-x1)/pow(pow((x2-x1),
2)+pow((y2-y1),
1.5)+g*m3*(x3-x1)/pow(pow(x3-x1, 2)+pow(y3-y1, 2), 1.5)
y1l1
=
g*m2*(y2-y1)/pow(pow((x2-x1),
2)+pow((y2-y1),
1.5)+g*m3*(y3-y1)/pow(pow(x3-x1, 2)+pow(y3-y1, 2), 1.5)
x2l1
=
g*m3*(x3-x2)/pow(pow((x3-x2),
2)+pow((y3-y2),
1.5)+g*m1*(x1-x2)/pow(pow(x1-x2, 2)+pow(y1-y2, 2), 1.5)
2),
2),
2),
5 / 10
玫瑰线的设计与实现
y2l1
=
g*m3*(y3-y2)/pow(pow((x3-x2),
2)+pow((y3-y2),
1.5)+g*m1*(y1-y2)/pow(pow(x1-x2, 2)+pow(y1-y2, 2), 1.5)
x3l1
=
g*m1*(x1-x3)/pow(pow((x1-x3),
2)+pow((y1-y3),
1.5)+g*m2*(x2-x3)/pow(pow(x2-x3, 2)+pow(y1-y3, 2), 1.5)
y3l1
=
g*m1*(y1-y3)/pow(pow((x1-x3),
2)+pow((y1-y3),
2),
2),
2),
1.5)+g*m2*(y2-y3)/pow(pow(x2-x3, 2)+pow(y2-y3, 2), 1.5)
x1k2 = x1k1 + h*x1l1/2
y1k2 = y1k1 + h*y1l1/2
x2k2 = x2k1 + h*x2l1/2
y2k2 = y2k1 + h*y2l1/2
x3k2 = x3k1 + h*x3l1/2
y3k2 = y3k1 + h*y3l1/2
x1l2 = g*m2*(x2+x2k1*h/2-x1-x1k1*h/2)/pow(pow((x2+x2k1*h/2-x1-x1k1*h/2),
2)+pow((y2+y2k1*h/2-y1-y1k1*h/2), 2),
1.5)+g*m3*(x3+x3k1*h/2-x1-x1k1*h/2)/pow(pow(x3+x3k1*h/2-x1-x1k1*h/2,
2)+pow(y3+y3k1*h/2-y1-y1k1
* h / 2, 2), 1.5)
y1l2 = g*m2*(y2+y2k1*h/2-y1-y1k1*h/2)/pow(pow((x2+x2k1*h/2-x1-x1k1*h/2),
2)+pow((y2+y2k1*h/2-y1-y1k1*h/2), 2),
1.5)+g*m3*(y3+y3k1*h/2-y1-y1k1*h/2)/pow(pow(x3+x3k1*h/2-x1-x1k1*h/2,
2)+pow(y3+y3k1*h/2-y1-y1k1
* h / 2, 2), 1.5)
x2l2 = g*m3*(x3+x3k1*h/2-x2-x2k1*h/2)/pow(pow((x3+x3k1*h/2-x2-x2k1*h/2),
2)+pow((y3+y3k1*h/2-y2-y2k1*h/2), 2),
1.5)+g*m1*(x1+x1k1*h/2-x2-x2k1*h/2)/pow(pow(x1+x1k1*h/2-x2-x2k1*h/2,
2)+pow(y1+y1k1*h/2-y2-y2k1
* h / 2, 2), 1.5)
y2l2 = g*m3*(y3+y3k1*h/2-y2-y2k1*h/2)/pow(pow((x3+x3k1*h/2-x2-x2k1*h/2),
2)+pow((y3+y3k1*h/2-y2-y2k1*h/2), 2),
1.5)+g*m1*(y1+y1k1*h/2-y2-y2k1*h/2)/pow(pow(x1+x1k1*h/2-x2-x2k1*h/2,
2)+pow(y1+y1k1*h/2-y2-y2k1
* h / 2, 2), 1.5)
6 / 10
玫瑰线的设计与实现
x3l2 = g*m1*(x1+x1k1*h/2-x3-x3k1*h/2)/pow(pow((x1+x1k1*h/2-x3-x3k1*h/2),
2)+pow((y1+y1k1*h/2-y3-y3k1*h/2), 2),
1.5)+g*m2*(x2+x2k1*h/2-x3-x3k1*h/2)/pow(pow(x2+x2k1*h/2-x3-x3k1*h/2,
2)+pow(y1+y1k1*h/2-y3-y3k1
* h / 2, 2), 1.5)
y3l2 = g*m1*(y1+y1k1*h/2-y3-y3k1*h/2)/pow(pow((x1+x1k1*h/2-x3-x3k1*h/2),
2)+pow((y1+y1k1*h/2-y3-y3k1*h/2), 2),
1.5)+g*m2*(y2+y2k1*h/2-y3-y3k1*h/2)/pow(pow(x2+x2k1*h/2-x3-x3k1*h/2,
2)+pow(y2+y2k1*h/2-y3-y3k1
* h / 2, 2), 1.5)
x1k3 = x1k1 + h*x1l2/2
y1k3 = y1k1 + h*y1l2/2
x2k3 = x2k1 + h*x2l2/2
y2k3 = y2k1 + h*y2l2/2
x3k3 = x3k1 + h*x3l2/2
y3k3 = y3k1 + h*y3l2/2
x1l3 = g*m2*(x2+x2k2*h/2-x1-x1k2*h/2)/pow(pow((x2+x2k2*h/2-x1-x1k2*h/2),
2)+pow((y2+y2k2*h/2-y1-y1k2*h/2), 2),
1.5)+g*m3*(x3+x3k2*h/2-x1-x1k2*h/2)/pow(pow(x3+x3k2*h/2-x1-x1k2*h/2,
2)+pow(y3+y3k2*h/2-y1-y1k2
* h / 2, 2), 1.5)
y1l3 = g*m2*(y2+y2k2*h/2-y1-y1k2*h/2)/pow(pow((x2+x2k2*h/2-x1-x1k2*h/2),
2)+pow((y2+y2k2*h/2-y1-y1k2*h/2), 2),
1.5)+g*m3*(y3+y3k2*h/2-y1-y1k2*h/2)/pow(pow(x3+x3k2*h/2-x1-x1k2*h/2,
2)+pow(y3+y3k2*h/2-y1-y1k2
* h / 2, 2), 1.5)
x2l3 = g*m3*(x3+x3k2*h/2-x2-x2k2*h/2)/pow(pow((x3+x3k2*h/2-x2-x2k2*h/2),
2)+pow((y3+y3k2*h/2-y2-y2k2*h/2), 2),
1.5)+g*m1*(x1+x1k2*h/2-x2-x2k2*h/2)/pow(pow(x1+x1k2*h/2-x2-x2k2*h/2,
2)+pow(y1+y1k2*h/2-y2-y2k2
7 / 10
玫瑰线的设计与实现
* h / 2, 2), 1.5)
y2l3 = g*m3*(y3+y3k2*h/2-y2-y2k2*h/2)/pow(pow((x3+x3k2*h/2-x2-x2k2*h/2),
2)+pow((y3+y3k2*h/2-y2-y2k2*h/2), 2),
1.5)+g*m1*(y1+y1k2*h/2-y2-y2k2*h/2)/pow(pow(x1+x1k2*h/2-x2-x2k2*h/2,
2)+pow(y1+y1k2*h/2-y2-y2k2
* h / 2, 2), 1.5)
x3l3 = g*m1*(x1+x1k2*h/2-x3-x3k2*h/2)/pow(pow((x1+x1k2*h/2-x3-x3k2*h/2),
2)+pow((y1+y1k2*h/2-y3-y3k2*h/2), 2),
1.5)+g*m2*(x2+x2k2*h/2-x3-x3k2*h/2)/pow(pow(x2+x2k2*h/2-x3-x3k2*h/2,
2)+pow(y1+y1k2*h/2-y3-y3k2
* h / 2, 2), 1.5)
y3l3 = g*m1*(y1+y1k2*h/2-y3-y3k2*h/2)/pow(pow((x1+x1k2*h/2-x3-x3k2*h/2),
2)+pow((y1+y1k2*h/2-y3-y3k2*h/2), 2),
1.5)+g*m2*(y2+y2k2*h/2-y3-y3k2*h/2)/pow(pow(x2+x2k2*h/2-x3-x3k2*h/2,
2)+pow(y2+y2k2*h/2-y3-y3k2
* h / 2, 2), 1.5)
x1k4 = x1k1 + h*x1l3
y1k4 = y1k1 + h*y1l3
x2k4 = x2k1 + h*x2l3
y2k4 = y2k1 + h*y2l3
x3k4 = x3k1 + h*x3l3
y3k4 = y3k1 + h*y3l3
x1l4
=
g*m2*(x2+x2k3*h-x1-x1k3*h)/pow(pow((x2+x2k3*h-x1-x1k3*h),
2)+pow((y2+y2k3*h-y1-y1k3*h), 2), 1.5)+g*m3*(x3
+
x3k3*h-x1-x1k3*h)/pow(pow(x3+x3k3*h-x1-x1k3*h,
2)+pow(y3+y3k3*h-y1-y1k3 * h, 2), 1.5)
y1l4
=
g*m2*(y2+y2k3*h-y1-y1k3*h)/pow(pow((x2+x2k3*h-x1-x1k3*h),
2)+pow((y2+y2k3*h-y1-y1k3*h), 2), 1.5)+g*m3*(y3
+
y3k3*h-y1-y1k3*h)/pow(pow(x3+x3k3*h-x1-x1k3*h,
2)+pow(y3+y3k3*h-y1-y1k3 * h, 2), 1.5)
x2l4
=
g*m3*(x3+x3k3*h-x2-x2k3*h)/pow(pow((x3+x3k3*h-x2-x2k3*h),
2)+pow((y3+y3k3*h-y2-y2k3*h), 2), 1.5)+g*m1*(x1
+
x1k3*h-x2-x2k3*h)/pow(pow(x1+x1k3*h-x2-x2k3*h,
2)+pow(y1+y1k3*h-y2-y2k3 * h, 2), 1.5)
8 / 10