【天体】基于Matlab模拟观察界面实现三体问题

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。

🔥 内容介绍

概要: 这是我大三上学期某一门课程的一次作业。本文基于MATLAB及其GUI界面设计了一个基于经典力学的三体运动数值模拟软件,旨在建立经典力学框架内的空间三质点运动模型,又名为三体运动模型。软件根据当前的质点初始运动参数,运用数值模拟,迭代计算出后续每一时刻各个质点的运动参数,并将计算结果实时显示出来。本软件可用于质点力学与基础天体物理学的自主学习、教学演示和相关领域的科学研究。

关键字:MATLAB;三体运动;数值模拟;可视化

1 背景说明 

公元1900年,在二十世纪第一次数学家大会上,数学家希尔伯特第一次提出了“完美数学问题”准则:问题既能被简明扼要地表达出来,然而问题的解决又是如此困难以至于必须要有全新的思想方法才能解决。为了说明他的观点,希尔伯特举了两个最经典的例子,第一是费马猜想,第二就是N体问题。

N题问题是指:三维自由空间中N个可视为质点的恒质天体在某一时间断面质量、位置及初始速度已知的条件下求该时刻后任一时刻N个质点的位置和速度。当N小于3时,该问题可以用牛顿力学完美解决,但当N大于等于3后,仅仅依靠经典力学体系无法求得精确解。

三体问题的起源最晚可追溯到17世纪,当牛顿的划时代巨著《自然哲学的数学原理》问世之后,他的引力理论已经能正确预测两个天体(如一颗恒星和一颗行星)的运动规律,即两个互相吸引的天体的轨道为椭圆形。但是,三个天体的问题要复杂得多,在当时,牛顿没能提出类似的通解。时光流逝,经过18、19两个多世纪几代数学家的研究,人们已经认识到三体系统是一个混沌系统,不存在解析解。混沌系统是典型的非线性系统,它的重要特征之一在于误差的累积性,且误差来源于计算本身——这个“计算本身”是指计算数据的无理性以及混沌系统的微扰敏感性。也就是说,三体系统不仅不具备普遍意义上的解析解,甚至连较长期的数值预测也无法实现,这也是三体问题吸引和困扰几代最杰出的数学家几百年之久的重要原因。

以上所述就是开展本实验的大致背景,本实验拟在经典力学体系框架内,运用迭代算法对三体运动模型进行数值模拟。正如上文所说,三体系统的无解析解性和误差累积性决定了“经典力学+数值模拟”的办法仅能在宏观视角粗糙地展现三体运动特征,且预测结果的可信度将随时间的增加而下降。所幸的是,三体系统作为一个混沌系统,也有若干特殊的解可以解析表达。迄今为止,科学家们总共发现了16族三体问题的特解,其中包含有若干稳定的解析解。在这其中,塞尔维亚物理学家Milovan Šuvakov和V. Dmitrašinović于2012年前后采用数值模拟的思路,在已有特解的基础上,通过对各项初始值进行微调,利用计算机上进行了海量运算,终于寻找得到13族特解,一举超过了过去三百多年间所找到的所有特解的总和。这一振奋人心的科学发现不仅拓宽了在三体问题上人类已有的知识界限,更提出了一种在混沌中求解析解的计算方法。两位科学家的研究论文Three Classes of Newtonian Three-Body Planar Periodic Orbits已于2013年3月发表在知名物理学杂志《PHYSICAL REVIEW LETTERS》上。

2 实验目的 

本实验基于计算机数值模拟思路,利用迭代法,在经典力学体系框架内建立三体运动模型并完成多种特解的可视化实现。

3 基本原理及思路 

设三维自由空间中有三个质量、初始位置和初始速度已知的三个质点,分别记作:

A(M1,X1,Y1,Z1,U1,V1,W1);

B(M2,X2,Y2,Z2,U2,V2,W2);

C(M3,X3,Y3,Z3,U3,V3,W3);

 其中,X、Y、Z分别表示各个质点在X、Y、Z方向上的坐标,U、V、W分别表示各个质点在X、Y、Z方向上的速度分量。

设fAB表示质点A对质点B的作用力,fBA表示质点B对质点A的反作用力,则三个质点之间的万有引力可表示为f12、f23、f31、f31、f32、f21,根据牛顿第三定律,有:

f12=-f21;

f23=-f32;

f31=-f13;

 这样,牛顿第三定律将力的变量由6个减少到3个。

根据牛顿第二定律,质点间相互作用力f12、f23、f31可分别被表达为:

f12=g*M1*M2/R12^3*[X1-X2,Y1-Y2,Z1-Z2];

f23=g*M2*M3/R23^3*[X2-X3,Y2-Y3,Z2-Z3];

f31=g*M3*M1/R13^3*[X3-X1,Y3-Y1,Z3-Z1];

 <font face="宋体">其中g是引力常量,取值为6.67x10^-11(N·m^2 /kg^2),R12、R23、R13分别表示两两质点之间的距离,可以表达为:

R12=sqrt((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2);

R13=sqrt((X1-X3)^2+(Y1-Y3)^2+(Z1-Z3)^2);

R23=sqrt((X2-X3)^2+(Y2-Y3)^2+(Z2-Z3)^2);

 注意,式中f12、f23、f31表达为三维矢量。

由于三体问题是一个发生在三维自由空间的动力学问题,所以势必要进行矢量分析。本实验建立空间直角坐标系,根据矢量的叠加性原理,将所有三维矢量包括引力、加速度、速度和位置矢量等分别分解到X、Y、Z三个坐标轴上分析,就将矢量运算简化为标量运算。现在,以X轴为例,对三体系统进行经典动力学分析。

设三质点在X轴上的加速度分别为Ax1、Ax2、Ax3,则可以表达为:

Ax1=(-f12(1)+f31(1))/M1;

Ax2=( f12(1)-f23(1))/M2;

Ax3=( f23(1)-f31(1))/M3;

速度可以表达为:

U1=U1+Ax1*t;

U2=U2+Ax2*t;

U3=U3+Ax3*t;

位置矢量可以表达为:

X1=X1+U1*t+1/2*Ax1*t^2;

X2=X2+U2*t+1/2*Ax2*t^2;

X3=X3+U3*t+1/2*Ax3*t^2;

 <font face="宋体">其中f12(1)意为三维矢量f12在X轴向上的分量,t为迭代的时间间隔,本实验中t的取值为0.00001。

以此类推,在Y轴和Z轴上也进行类似的分析和计算,就可以在三维自由空间中建立一个简单的三体运动模型。

⛳️ 运行结果

🔗 参考文献

📣 部分代码

🎈 部分理论引用网络文献,若有侵权联系博主删除

 👇 关注我领取海量matlab电子书和数学建模资料 

🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:

🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP
1、打开已有的一组三体配置文件(.tbc)并运行(点击播放按钮)。 "File"菜单下有导入(Import)、导出(Export)功能,在不能上传附件时方便以纯文本方式交流自己搜索出来的三体配置! 2、手工设定初始条件的全部数值(点击魔术棍按钮)。分别指定三个物体的初始条件(X、Y、Z坐标,质量,初始速度的幅度、在XY平面上的角度0~360、在XZ平面上的角度0~360)。四个圆形选项(Radio Button)是参照系选择:默认的"Normalize to Centroid"是按三体系统质心作为参照系进行速度平衡,相当于观察者总是跟随三体的质心运动。另外三个选项分别是以第一、二、三个天体作为参照系,即总是把这个天体放在中心位置从不移动--注意这是非惯性参照系!(一般应选取行星主要围绕的那个恒星,方便观察行星轨道) 如果XZ平面上的初始速度角度都是0,则退化为二维的三体。 不过手工设定的条件通常都很难稳定运行。 3、设定搜索条件,让软件自动搜索。搜索分为两步: 3.1、搜索稳定的三体解(点击望远镜按钮) 第一部分是每个物体的约束条件:坐标最大值、最小质量、最大质量、最小速度幅度、最大速度幅度。 第二部分是是否要求三体在最初N步里超出一个边长为M的方框范围。这样看起来比较有趣,但搜索起来可能很慢。 第三部分是三体必须在N步里不超出一个边长为M的方框范围。否则它们很快发散就不好玩了。 然后那个复选框是:是否只进行二维搜索。 搜索结束后会出现一组初始条件值,点OK就开始运行了。 3.2、在三体解的基础上,搜索稳定的行星解(点击右下有小球的望远镜按钮) 手工设定或者自动搜索出来的解,如果喜欢的话,可以存盘,也可以导出为纯文本贴在论坛上与大家共享。压缩包里的.tbc也是偶自己用这个软件搜出来的。 四个播放按钮: 第一个播放形状的,是开始或者继续运行; 第二个暂停形状的,是暂停; 第三个短箭头,是减速运行; 第三个双箭头,是加速运行。 速度有很多档次,从减速6倍到加速运行100倍,直到加速100倍跳3125帧(相当于加倍312500倍,但每隔3125帧才显示一帧,所以看起来很不连续),每5倍为一个档次。
三体问题是一个非常复杂的问题,需要用到数值计算和数值模拟的方法。Matlab是一个非常强大的数值计算软件,提供了丰富的数值计算函数和工具箱,可以用来实现三体问题的求解。 首先,我们需要确定三个天体的质量、初始位置和速度。然后,我们可以利用牛顿万有引力定律和牛顿第二定律,编写数值模拟程序,求解三个天体的运动轨迹。 具体实现步骤如下: 1. 定义三个天体的质量、初始位置和速度。 ```matlab m1 = 1; % 天体1的质量 m2 = 1; % 天体2的质量 m3 = 1; % 天体3的质量 % 天体1的初始位置和速度 r1 = [1; 0; 0]; v1 = [0; 1; 0]; % 天体2的初始位置和速度 r2 = [-1; 0; 0]; v2 = [0; -1; 0]; % 天体3的初始位置和速度 r3 = [0; 0; 0]; v3 = [0; 0; 0]; ``` 2. 定义牛顿万有引力定律和牛顿第二定律的数值模拟公式。 ```matlab function [a1, a2, a3] = three_body_gravity(r1, r2, r3, m1, m2, m3) % 计算三个天体的加速度 G = 6.67408e-11; % 万有引力常数 % 天体1受到的合力 F1 = G * m1 * m2 / norm(r2 - r1)^2 * (r2 - r1) ... + G * m1 * m3 / norm(r3 - r1)^2 * (r3 - r1); % 天体2受到的合力 F2 = G * m2 * m1 / norm(r1 - r2)^2 * (r1 - r2) ... + G * m2 * m3 / norm(r3 - r2)^2 * (r3 - r2); % 天体3受到的合力 F3 = G * m3 * m1 / norm(r1 - r3)^2 * (r1 - r3) ... + G * m3 * m2 / norm(r2 - r3)^2 * (r2 - r3); % 计算三个天体的加速度 a1 = F1 / m1; a2 = F2 / m2; a3 = F3 / m3; end ``` 3. 编写数值模拟程序,求解三个天体的运动轨迹。 ```matlab % 定义时间步长和模拟时间 dt = 0.001; tmax = 10; % 初始化位置和速度数组 r1_arr = zeros(3, tmax/dt); r2_arr = zeros(3, tmax/dt); r3_arr = zeros(3, tmax/dt); v1_arr = zeros(3, tmax/dt); v2_arr = zeros(3, tmax/dt); v3_arr = zeros(3, tmax/dt); % 初始位置和速度 r1_arr(:, 1) = r1; r2_arr(:, 1) = r2; r3_arr(:, 1) = r3; v1_arr(:, 1) = v1; v2_arr(:, 1) = v2; v3_arr(:, 1) = v3; % 模拟三体运动 for i = 2:tmax/dt % 计算加速度 [a1, a2, a3] = three_body_gravity(r1_arr(:, i-1), r2_arr(:, i-1), r3_arr(:, i-1), m1, m2, m3); % 计算速度 v1_arr(:, i) = v1_arr(:, i-1) + a1 * dt; v2_arr(:, i) = v2_arr(:, i-1) + a2 * dt; v3_arr(:, i) = v3_arr(:, i-1) + a3 * dt; % 计算位置 r1_arr(:, i) = r1_arr(:, i-1) + v1_arr(:, i) * dt; r2_arr(:, i) = r2_arr(:, i-1) + v2_arr(:, i) * dt; r3_arr(:, i) = r3_arr(:, i-1) + v3_arr(:, i) * dt; end % 绘制三体运动轨迹 plot3(r1_arr(1,:), r1_arr(2,:), r1_arr(3,:), 'r'); hold on; plot3(r2_arr(1,:), r2_arr(2,:), r2_arr(3,:), 'g'); plot3(r3_arr(1,:), r3_arr(2,:), r3_arr(3,:), 'b'); xlabel('X'); ylabel('Y'); zlabel('Z'); legend('天体1', '天体2', '天体3'); ``` 以上就是利用Matlab实现三体问题的基本步骤。需要注意的是,由于三体问题的复杂性,可能需要进行多次模拟和参数调整,才能得到比较准确的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值