用python模拟天体运动(二体运动与天体轨道稳定问题)

目录

1. 模拟天体运动的代码

2. 运行效果

3. 非平方反比(轨道稳定性问题)


1. 模拟天体运动的代码

接下来我们将用python模拟实现天体运动

以下是我们所需要的库:

import matplotlib.pyplot as plt  
import matplotlib.animation as animation  
import numpy as np  

我们定义常量:

G = 6.67430e-11               # 引力常数
p = 2                         # 引力定律
dt = 3600*24                  # 时间步长
Earth_mass = 5.972e24         # 地球质量
Sun_mass = 1.989e30           # 太阳质量
Earth_position = (1.496e11, 0)# 地球位置
Sun_position = (0, 0)         # 太阳位置# 宇宙第一速度,宇宙第二速度
v_orbit = np.sqrt(G*Sun_mass/np.sqrt((Earth_position[0])**2 + ((Earth_position[1]))**2))
v_escape = np.sqrt(2)*v_orbit# 地球速度
#Earth_velocity = (0, v_orbit)
#Earth_velocity = (0, v_escape)
Earth_velocity = (0, 29784.6)

为了方便计算,我们定义一个行星类

class Planet:  def __init__(self, name, mass, initial_position=(0, 0), initial_velocity=(0, 0)):  self.name = name  self.loc = np.array(initial_position)  # 使用NumPy数组来存储位置  self.v = np.array(initial_velocity)  # 使用NumPy数组来存储速度  self.a = np.array([0, 0])  # 加速度  self.force = np.array([0, 0])  # 作用力  self.m = mass  # 行星的质量  self.trail = []  # 存储轨迹点的列表  def update_location(self, dt, other_planet):  # 计算两行星之间的距离  r_val = np.linalg.norm(np.array(self.loc) - np.array(other_planet.loc))  # 计算引力  self.force = G * self.m * other_planet.m / r_val ** (p) * (other_planet.loc - self.loc) / r_val  # 更新加速度  self.a = self.force / self.m  # 更新速度  self.v += self.a * dt  # 更新位置  self.loc += self.v * dt  # 将当前位置添加到轨迹列表中  self.trail.append(self.loc.tolist()) 

行星类的实例化

# 初始化太阳和地球  
Sun = Planet("Sun", Sun_mass, Sun_position)  
Earth = Planet("Earth", Earth_mass, Earth_position, Earth_velocity)  # 初始化模拟和图形  
fig, ax = plt.subplots()  # 绘制太阳  
sun_scatter, = ax.plot(Sun.loc[0], Sun.loc[1], 'yo')  # 初始化地球的位置  
earth_scatter, = ax.plot(Earth.loc[0], Earth.loc[1], 'bo')  # 初始化地球的轨迹  
trail, = ax.plot([], [], 'b-')

模拟行星运动:

# 设置坐标轴限制  
ax.set_xlim(-3e11, 3e11)  
ax.set_ylim(-3e11, 3e11)  
ax.set_aspect('equal', adjustable='box')  # 动画更新函数  
def update(frame):  # 更新地球的位置  Earth.update_location(dt, Sun)  # 更新地球的位置散点  earth_scatter.set_data(Earth.loc[0], Earth.loc[1])  # 更新地球的轨迹  trail.set_data([x[0] for x in Earth.trail], [x[1] for x in Earth.trail])  # 返回更新后的对象列表  return sun_scatter, earth_scatter, trail,  # 创建动画  
ani = animation.FuncAnimation(fig, update, frames=np.arange(0, 365*24*3600, 3600),  interval=1, blit=True)  # 显示图形  
plt.show()

2. 运行效果

可以看到,地球的运行轨迹还是非常接近正圆的。

我们稍微改变一下参数,让地球的速度变慢些和变快血,得到:

3. 非平方反比(轨道稳定性问题)

根据理论力学,我们知道,只有引力是符合平方反比定律或正比于距离的时候天体的轨道才有可能是稳定且闭合的。如果不是平方反比,而是2.1次方反比和1.9次方反比定律呢?

事实上,它们的图像都是这样的形势的。(不知道为什么图片变扁了)。有趣的是,行星始终在一个环形区域内运动。而这个轨道是稠密的,也就是说,只要时间足够,行星就能够与该环形区域内的任意一点无限接近。当且仅当 1<p<3时成立。其中 F = G M m / r^p

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/755507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java安装及环境配置详细教程

1.1 下载 Java 安装包 官网下载链接[点击跳转] 建议下载202版本&#xff0c;因为202版本之后的 Oracle JDK 是商用收费的&#xff08;个人使用不收费&#xff09; 1.2 勾选红框中内容&#xff0c;然后点击下方下载 1.3 如果没有登录 Oracle 则会跳转到该页面&#xff0c;因为…

使用多元线性回归简单预测

模型和代码 数据格式如下&#xff1a;前21列作为模型输入X&#xff0c;最后5列作为模型输出Y。 训练集&#xff1a; 测试集&#xff1a; 代码&#xff1a; from numpy import genfromtxt import numpy as np from sklearn.ensemble import GradientBoostingRegressor from …

解锁编程潜能:ChatGPT如何革新软件开发

目录 一、背景 二、功能描述 三、总结 一、背景 在这个飞速发展的数字时代&#xff0c;软件开发的效率和质量成了衡量一个开发者能力的重要标准。随着人工智能技术的不断进步&#xff0c;越来越多的开发者开始寻找能够提升工作效率的新方法。我就是其中之一&#xff0c;最近…

蓝桥杯刷题(十一)

1.卡片 反向思考&#xff0c;看k种卡片可以分给几位同学 代码 n int(input()) k 1 while k*(k1)<2*n:k1 print(k)2.美丽的2 代码 def f(x)->bool:while x:if x%102:return Truex//10return False cnt 0 for i in range(1,2021):if f(i):cnt1 print(cnt)3.单词分析 …

vue3+vite项目打包遇到的问题

一、项目打包出现空白页 vite.config.js中&#xff0c;添加base: ./ import { defineConfig } from vite import vue from vitejs/plugin-vueexport default defineConfig({base: ./, })router/index.js&#xff0c;将路由模式改成hash模式 import { createRouter, createWe…

前端开发使用 Vue 3 + TypeScript + Pinia + Element Plus + ECharts

简介 本文档旨在介绍使用 Vue 3 结合 TypeScript、Pinia 状态管理、Element Plus UI 组件库以及 ECharts 图表库进行前端开发的技术细节和最佳实践。 技术栈概述 Vue 3: 一款流行的 JavaScript 框架&#xff0c;提供了响应式和组件化的开发方式&#xff0c;使得构建用户界面更…

【c++】string类---标准库(STL)中的string类

主页&#xff1a;醋溜马桶圈-CSDN博客 专栏&#xff1a;c_醋溜马桶圈的博客-CSDN博客 gitee&#xff1a;mnxcc (mnxcc) - Gitee.com 目录 1.STL(标准库) 1.1 什么是STL 1.2 STL的版本 1.3 STL的六大组件 1.4 STL的重要性 1.5 如何学习STL 6.STL的缺陷 2. 为什么要学习st…

C++有关内存的那些事

个人主页&#xff1a;PingdiGuo_guo 收录转栏&#xff1a;C干货专栏 前言 本篇博客是讲解关于C内存的一些知识点的。 文章目录 前言 1.内存函数 1.1memcpy函数 1.2memmove函数 1.3 memset函数 2.各数据类型占用 2.1bool类型 2.2char类型 2.3short、int、long类型及整数…

SegFormer 项目排坑记录

SegFormer 项目排坑记录 任务记录创建conda环境 准备数据库和预训练参数程序配置修改测试可视化训练 任务 需要复现SegFormer分割项目&#xff0c;似乎还有点麻烦&#xff0c;参考这几个进行复现&#xff0c;记录下过程&#xff1a; SegFormer mmsegmentation CSDN博客 知乎博…

Docker 安装 Nginx 容器部署前端项目

先安装docker Docker安装详情 安装Nginx镜像 1、拉去取Nginx镜像 Nginx官方镜像 docker pull nginx 下载最新版Nginx镜像 (其实此命令就等同于 : docker pull nginx:latest ) docker pull nginx:xxx 下载指定版本的Nginx镜像 (xxx指具体版本号)我们拉去1.24.0的nginx镜像 …

C语言计算天数

输入y和m两个整数&#xff0c;y表示年份&#xff0c;m表示月份&#xff0c;计算y年m月有多少天&#xff0c;并输出天数。 思路:已知无论年份变化1,3,5,7,8,10,12月是31天,4,6,9,11是30天.而二月份根据闰年平年判断. 1.使用一个数组,来表示1-12月份的天数,2月份默认为28天 2.…

视频号视频下载需要小程序提供下载支持!

前言&#xff1a;和大家分享一个视频号视频下载的方法&#xff01;可以帮助用户使用的工具将视频号视频保存到手机相册的&#xff01; 有时候在刷视频号的时候碰到自己喜欢的视频就情不自禁的想要把他下载下来&#xff0c; 1&#xff1a;遇到喜欢的视频视频怎么下载 例如&am…

通过https请求可以返回哪些数据(精简版)

2024年3月18日&#xff0c;周一下午 HTTPS 请求还可以返回各种其他类型的数据。一些常见的返回数据类型包括&#xff1a; 文本数据&#xff1a;服务器可以返回纯文本数据&#xff0c;例如 HTML、XML、CSS 等。二进制数据&#xff1a;服务器可以返回图片、视频、音频等二进制数…

中国传统游戏-幻方-c/c++实现

幻方&#xff08;Magic Square&#xff09;是一种将数字安排在正方形格子中&#xff0c;使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形&#xff0c;使在同一行、同…

Pytorch框架—文本情感分类问题项目(二)

整体过程就是首先拿到了数据集微博100K&#xff0c;对个这个评论数据集进行处理&#xff0c;分类标签和评论内容。对评论内容进行分词处理&#xff0c;之后进行词频统计对高词频的进行编码&#xff0c;低词频的进用《UNK》表示&#xff0c;并使用《PAD》把他们扩展到等长列表便…

MATLAB编译器配置:MinGW

使用 MATLAB 2022b版本&#xff0c;查询编译器时如上&#xff0c;想安装个MinGW编译器&#xff0c;自带的附加资源管理不好使&#xff0c;只能换个别的法子&#xff0c;经过一些参考&#xff0c;总结如下。 步骤1.在这里下载一个MinGW.最新版本是10.3.0.然后默认安装&#xff…

蓝桥杯刷题|03入门真题

目录 [蓝桥杯 2020 省 B1] 整除序列 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2020 省 AB3] 日期识别 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2019 省 B] 特别数的和 题目描述 输入格式 输出格…

谷歌的后量子密码学威胁模型

1. 引言 若现在不使用量子安全算法来加密数据&#xff0c;能够存储当前通信的攻击者最快十年内就能对其解密。这种先存储后解密的攻击是当前采用后量子密码学 (post-quantum cryptography&#xff0c;PQC) 背后的主要动机&#xff0c;但其他未来的量子计算威胁也需要一个深思熟…

GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据

GEC6818——QT开发之两个UI界面切换与表格显示DHT11数据 使用环境: ubantu16 QT5.7 开发板GEC6818 实现要求&#xff1a; 利用A53按键1、按键2与温湿度传感器完成QT界面动态显示温湿度记录&#xff0c;并指定温湿度记录超过指定范围&#xff0c;进行报警&#xff08;LED&#…

天锐绿盾|公司开发部门源代码泄露防护系统,无感透明加密软件

#代码加密、代码防泄密、开发部门源码防泄漏、源代码透明加密、办公透明加密系统# 天锐绿盾作为一款针对企业数据安全的专业软件&#xff0c;特别是在防止公司开发部门源代码泄露方面&#xff0c;提供了智能无感透明加密保护系统。 德人合科技 | 天锐绿盾 PC地址&#xff1a; …