python模拟三颗恒星的运动

news2024/11/25 15:58:44

文章目录

  • 随机三体
  • 三星问题

随机三体

目前来说我们并不关心真实的物理对象,而只想看一下三个随机的点放在三个随机的位置,赋予三个随机的速度,那么这三个点会怎么走。所以其初始化过程为

import numpy as np
m,x,y,u,v = [np.random.rand(3) for _ in range(5)]

其中,m, x, y, u, v分别表示质量,x轴位置,y轴位置,x轴速度,y轴速度。得到三个随机的运动为

在这里插入图片描述在这里插入图片描述在这里插入图片描述

这几个随机的三体均有一个共同的结局,二体尚存,三体皆四散而去,至于能不能重新相聚,那就很难说了,代码为

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from itertools import product

m,x,y,u,v = [np.random.rand(3) for _ in range(5)]

fig = plt.figure(figsize=(12,12))
ax = fig.add_subplot(xlim=(-2e11,2e11),ylim=(-2e11,2e11))
ax.grid()

traces = [ax.plot([],[],'-', lw=0.5)[0] for _ in range(3)]
pts = [ax.plot([x[i]],[y[i]] ,marker='o')[0] for i in range(3)]

k_text = ax.text(0.05,0.85,'',transform=ax.transAxes)
textTemplate = 't = %.3f days\n'

N = 1000
dt = 36000
ts =  np.arange(0,N*dt,dt)/3600/24
xs,ys = [],[]
for _ in ts:
    x_ij = (x-x.reshape(3,1))
    y_ij = (y-y.reshape(3,1))
    r_ij = np.sqrt(x_ij**2+y_ij**2)
    for i,j in product(range(3),range(3)):
    	if i!=j :
    		u[i] += (m[j]*x_ij[i,j]*dt/r_ij[i,j]**3)
    		v[i] += (m[j]*y_ij[i,j]*dt/r_ij[i,j]**3)
    x += u*dt
    y += v*dt
    xs.append(x.tolist())
    ys.append(y.tolist())

xs = np.array(xs)
ys = np.array(ys)

def animate(n):
    for i in range(3):
        traces[i].set_data(xs[:n,i],ys[:n,i])
        pts[i].set_data([xs[n,i]],[ys[n,i]])
    k_text.set_text(textTemplate % ts[n])
    return traces[0], traces[1], traces[2], pts[0], pts[1], pts[2], k_text


ani = animation.FuncAnimation(fig, animate, 
    range(N), interval=10, blit=True)

plt.show()
ani.save("3.gif")

多次画图后,并未发现稳定运行的三体,所以从经验来说,随机三体在自然界中应该是很难存在的——毕竟很快就解散了。

三星问题

短时间内稳定的三体还是有很多的,比如比如在高中出镜率极高的三星问题:

即等距等质量三星如何运动?现假设三个质量相同的等距质点,分别给一个随机的速度,看看它们怎么运动。

m = np.ones(3)
r = np.ones(3)
theta = np.arange(3)*np.pi*2/3
x = r*np.cos(theta)
y = r*np.sin(theta)
V = np.random.rand(N)
u = V*np.sin(theta)
v = V*np.cos(theta)
在这里插入图片描述在这里插入图片描述

总之只要看到它们互相靠近,那么结果注定分道扬镳,像极了人生。

如果再让它们速度相等,那么神奇的一幕出现了

在这里插入图片描述在这里插入图片描述

但更神奇的是,只要对速度做出一点点的更改,例如令第三颗星在横轴方向更改 δ \delta δ,则会出现如下场景

δ = 0.001 \delta=0.001 δ=0.001 δ = 0.0001 \delta=0.0001 δ=0.0001
在这里插入图片描述在这里插入图片描述

这就是所谓的蝴蝶效应,初值的一点更改,就会造成不可挽回的巨大后果,这也是动力系统的独特魅力。

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

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

相关文章

【java入门系列四】java基础-数组

学习记录🤔数组引出动态初始化数组内的数据会自动转换类型注意事项数组赋值机制数组拷贝数组扩容append?多维数组trick生成随机数Math.random()讨论总结谢谢点赞交流!(❁◡❁)更多代码: Gitee主页:https://gitee.com/G…

如何进行复盘

复盘定义 复盘,原本是围棋术语,指下完一盘棋后,双方棋手把对弈过程重新摆一遍,看哪里下得好,哪里下得不好,哪些关键节点有不同甚至更好的下法,以检查对局中招法的优劣与得失,并从中…

深入理解可变参数列表

目录 1.前言 2.基本使用方法 1.引入 2.相关宏介绍 3.原理剖析 1.传参 2.va_list 3.va_start() 4.va_arg() 5.va_end() 4.注意事项 5.总结 1.前言 在C语言中,对于一般的函数而言,参数列表都是固定的,而且各个参数之间用逗号进行分开。而除…

面试,演讲为什么一说话就紧张? 的底层解读

信息存在损耗在说话中,说话者与接受者之间传递信息存在损耗。而且人表达情绪不管是说话,还有肢体语言,这使得增加了信息接受者的信息量。下面引入两个词语来说明。给予与流露的含义给予:别人评价你做的菜好吃。流露:别人眉头一皱。…

探讨下如何更好的使用缓存 —— Redis缓存的特殊用法以及与本地缓存一起构建多级缓存的实现

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 通过前面的文章,我们一起剖析了Guava Cache、Caf…

如何在线录屏?怎么录制网课

当我们需要学习特定知识时,可以在网络上寻找教学视频进行学习。一般情况下,视频会一直保留在网上,可以随时随地观看。那您知道我们平常观看的网络课程是如何录制的吗?如何进行在线录屏?今天小编教您如何在线录制视频网…

C语言——指针进阶(含例题及详细代码分析)

文章目录导语:思维导图:1.字符指针2.指针数组3.数组指针3.1 数组指针的定义3.2 &数组名和数组名3.3 数组指针的使用4.数组参数、指针参数4.1 一维数组传参4.2 二维数组传参4.3 一级指针传参4.4 二级指针传参5.函数指针6.函数指针数组7.指向函数指针数…

Django自定义认证系统原理及源码分析解读

疑问 Django在如何自定义用户登录认证系统的时候,大家都会里面立马说 自定义一个 或者多个backend,比如通过账号密码、邮箱密码,邮箱验证码、手机号短信验证码等等。 然后设置 在settings中配置一个 AUTHENTICATION_BACKENDS就行。 但是为什…

【尚硅谷】Java数据结构与算法笔记11 - 树结构的实际应用

文章目录一、堆排序1.1 堆排序基本介绍1.2 堆排序的基本思想1.3 堆排序步骤图解1.4 堆排序思路总结1.5 堆排序代码实现二、赫夫曼树2.1 基本介绍2.2 重要概念1.3 赫夫曼树构建思路图解1.4 赫夫曼树代码实现三、赫夫曼编码3.1 基本介绍3.2 原理剖析3.3 实践:数据压缩…

java运算符2023010

运算符: Java语言中的运算符可分为如下几种。 ➢ 算术运算符 ➢ 赋值运算符,/—/各种和等号组合的都是赋值运算符,赋值表达式是有值的,赋值表达式的值就是右边 被赋的值。例如String str2str表达式的值就是str。因此,赋…

Java技能树-操作符(一)-练习篇

算术运算符 执行完下面的代码,变量b的值是: java int a 1; int b a; 答案是:D 在后,先赋值再运算 自动递增和递减 下面代码执行后的结果是: int a 0; a a; int b 0; b b; System.out.println("a " a); S…

Numpy的轴及numpy数组转置换轴

Numpy的轴 import numpy as np 数组np.array([[[1,2],[4,5],[7,8]],[[8,9],[11,12],[14,15]],[[10,11],[13,14],[16,17]],[[19,20],[22,23],[25,26]]]) print(数组.shape) # 返回 (4, 3, 2)最内层一对 [ ] 可以代表一个1维数组 加粗的一对 [ ] 里面有3个一维数组,也…

Layout布局(element ui)

Layout布局嘚吧嘚gutter示例发现el-row行内容居中默认局左上角水平居中垂直居中水平垂直居中嘚吧嘚 其实layout布局的使用在element官网上都有相关描述,也有相关示例,很容易快速上手。但是在实际使用的过程还是发现一些问题,于是做了一些学习…

递归(基础)

目录 一、递归的定义 1、什么时候会用到递归的方法 1. 定义是递归的 2. 数据结构是递归的 3. 问题的解法是递归的 2、应用递归的原则 3、递归调用顺序问题 1. 首先递归的过程可以总结为以下几点: 2. 递归工作栈​​​​​​​ 二、 递归和非递归的转化 …

Allegro如何快速把Class高亮成不同的颜色操作指导

Allegro如何快速把Class高亮成不同的颜色操作指导 在做PCB设计的时候,高亮Class组是一个非常频繁的操作,Allegro支持快速的将Class高亮成不同的颜色,并且还可以形成一个列表,如下图 具体操作如下 选择File选择Change Editor

select ( ) for update 锁行还是锁表?

select ( ) for update 锁行还是锁表? 一、验证 创建SQL表 //id为主键 //name 为唯一索引 CREATE TABLE user (id INT ( 11 ) NOT NULL AUTO_INCREMENT,name VARCHAR ( 255 ) DEFAULT NULL,age INT ( 11 ) DEFAULT NULL,code VARCHAR ( …

SpringCloud微服务项目实战 - 6.延迟任务

我没有失约,我与春风共至,我与夏蝉共鸣,我与秋叶共舞,我与凛冬共至,唯独你背道而行! 系列文章目录 项目搭建App登录及网关App文章自媒体平台(博主后台)内容审核(自动)延迟任务 - 精…

JVM快速入门学习笔记(一)

参考: https://blog.csdn.net/m0_38075425/article/details/81627349 www.kuangstudy.com JVM 常问面试题 请你谈谈你对JVM的理解? java—>class---->Java8虚拟机和之前的变化更新?什么是OOM 内存溢出什么是栈溢出StackOverFlowErr…

Matplotlab绘制散点图小节

前言现有一堆数据,是散点坐标形式,现在需要将它们绘制成散点图,并解决了关于Matplotlib绘图不能显示汉字的问题。读取数据数据格式如下图。第一行为一个数字,表示当前文件共有多少行数据。 第二行开始为真正的数据,各数…

如何冻结Excel中的行

在Excel中有一个冻结行的功能。在冻结行的帮助下,我们可以固定我们选择的窗格或行,以超出特定的限制工作表。 可以从“视图”菜单选项卡的“窗口”部分的“冻结窗格”下拉列表中访问“冻结行”。首先,要冻结列,请选择要冻结的列或将光标放在该列的任何位置,然后从列表中选…