写本文的目的是记录自己学习过或做过的一些东西,深化理解,理清思路,便于回忆。本人处于学习阶段,欢迎指出不对的地方。
三体是我最喜欢的小说,小说中入侵地球的三体人,他们的母星便是由三颗恒星和多个行星组成的天体系统。这种系统最初由牛顿提出,往后的时间中吸引了包括庞加莱、拉格朗日、欧拉等无数数学界、物理学界、天文学界的大家,但时至今日也没有办法对一个任意三体系统求出解析解。三体是天体力学名词,指的是由三个质点及其相互引力作用组成的力学关系。主要是指三颗质量相似的恒星。
开始模拟
1.设置三颗恒星的质量
三颗恒星质量必须在一个量级,但也不必相同,可以随意设置,推荐1*10^23左右
2.设定三颗恒星的初始位置
设置为三维向量形式,随意设置,推荐1*10^7左右(数值是网上找的,自己试了很久试不对)
3.设定三颗恒星的初始速度矢量
1*10^4左右,保存为三维向量形式
4.设置时间步长
越小越精准,但也越慢,大的话可能恒星直接飞跑了。可以设置到0.01
5.画出三颗恒星
使用plot3函数
6.设定轨迹线
使用animatedline函数,创建三个动画线条
7.计算任意两颗恒星的距离
使用三维空间内两点的距离公式,计算三次
8.计算任意两颗恒星间的受力
利用万有引力公式,和上一步计算出的距离,总共计算三次
9.计算任意两颗恒星间的受力方向
利用之前保存为向量形式的位置,根据向量空间的运算规则计算即可。这里只表示方向不表示距离,所以求出来的向量要转换为单位向量,总共计算三次
10.求出三颗恒星的加速度
这里首先要计算出每一个恒星所受的合力,每颗恒星受到两个力,受力大小和方向都已知,所以很好求得。再使用加速度公式求出各个恒星的加速度,MATLAB可以直接计算矢量
11.计算三颗恒星的新位置
使用初始位置和位移公式(S=vt+(1/2)at^2)计算而出,MATLAB可以直接计算矢量,所以很方便,标量怎么写矢量就怎么写
12.计算三颗恒星的新速度
使用公式(v’=v+at)
13.循环
从第7步开始到12步使用while 1循环,将速度和位置作为变量,每次循环后更新。要注意的是,循环计算出的位置和速度是要实时显示的,如果每次计算结束后都进行一次显示,虽然更加精准,但程序会运行的很慢(就好像一动不动),所以增加一个计数变量,计算累计到一定次数后再进行更新(其实也就相当于步长,与前面那个时间步长异曲同工),这里设置为1000
14.显示
使用addpoints函数向动画线条中添加点,来更新位置。同时使用drawnow 更新图窗并处理回调
效果展示
多次运行结果,效果是动态的,这里截图做展示
(这应该是一个挺长的恒纪元)