N体问题-MATLAB 中的数值模拟

一、说明

        万有引力是宇宙普适真理,当计算两个物体的引力、质量、距离的关系是经典万有引力物理定律,然而面向复杂问题,比如出现三个以上物体的相互作用,随时间的运动力学,这种数学模型将是更高级的思维方法。本文将阐述这种事实。

图片由作者提供。

二、关于万有引力模型

        牛顿在 17 世纪发现了万有引力,极大地改变了我们对天体运动的理解。他的定律巧妙地协调了两个深刻的物理原理:伽利略和笛卡尔在地球力学中提出的惯性原理,以及写在《新天文学》中的开普勒定律。

        牛顿在计算行星的轨道量时意识到他的万有引力定律并不完全准确。牛顿发现的不可预见的后果是对太阳系稳定的信念提出了质疑:行星一成不变地运动、没有碰撞或抛射的说法不再明显。由此,天文学家和几何学家之间展开了一场长达两个世纪的竞争,天文学家的观测越来越精确,几何学家掌握着牛顿定律的地位和命运。其核心是 N 体问题。

三、关于N体问题的讨论

        接下来,我们将创建N 个粒子通过共同引力势相互作用的模拟。庞加莱和布伦斯证明了该系统的微分方程一般不能以封闭形式积分(即用初等函数而不是无穷级数)。因此,如果我们想要进行任何有意义的模拟尝试,我们必须依靠数值方法。

        系统设置如下。我们假设N 个粒子索引为i = 1, 2, …, N,质量为 m_i,位置 = [ xᵢ , yᵢ , zᵢ ],速度 = [v xᵢ , v yᵢ , v zᵢ ]。遵循牛顿万有引力定律,每个粒子都会感受到一种力

        其中G= 6.67×10^-11 m3/kg/s2 是万有引力常数。为了获得质量的加速度,我们将进行getAcceleration如下计算。

function [a] = getAcceleration(pos, mass, G, softening)
%   pos  is an N x 3 matrix of positions
%   mass is an N x 1 vector of masses
%   softening is the softening length
%   a is N x 3 matrix of accelerationsx = pos(:,1);
y = pos(:,2);
z = pos(:,3);
dx = x' - x;
dy = y' - y;
dz = z' - z;% matrix that stores 1/r^3 for all particle pairwise particle separations
inverse = (dx.^2 + dy.^2 + dz.^2 + softening.^2).^(-3/2);ax = G * (dx .* inverse) * mass;
ay = G * (dy .* inverse) * mass;
az = G * (dz .* inverse) * mass;% pack together the acceleration components
a = [ax ay az];
end

        添加软化项是为了防止两个粒子彼此非常接近,在这种情况下,万有引力定律的加速度会达到无穷大。

        上面的代码是矢量化的。尽管在矩阵中存储中间计算需要大量内存,但它对于解释型语言非常有用;这有时会导致数十倍的加速。

        为了验证我们的代码,我们依靠能量守恒——我们知道这个量在时间演化中应该是恒定的。

        第一项是动能,定义为动量的平方除以质量的两倍。第二项是重力势能。我们的代码计算这些量并跟踪总能量,确保我们的近似值得到验证。

function [Ek, Ep] = getEnergy(pos, vel, mass, G)% Kinetic Energy:
KE = 0.5 * sum(sum(mass.* vel.^2));% Potential Energy:
% positions r = [x,y,z] for all particles
x = pos(:,1);
y = pos(:,2);
z = pos(:,3);% matrix that stores all pairwise particle separations: r_j - r_i
dx = x' - x;
dy = y' - y;
dz = z' - z;% matrix that stores r for all particle pairwise particle separations 
r = sqrt(dx.^2 + dy.^2 + dz.^2);% sum over upper triangle, to count each interaction only once
PE = G *  sum(sum(triu(-(mass*mass')./r,1)));
end

        为了指定系统的初始条件,我们将从高斯分布中随机选择值。您可以使用 MATLAB 中的函数进行设置randn

        对于数值积分,我们使用蛙跳方案,该方案采用踢-漂移-踢形式。

        演变是使用 for 循环在代码中执行的。

for i = 1:Ntvel = vel + acc * dt/2;pos = pos + vel * dtacc = getAcceleration(pos, mass, G, softening);vel = vel + acc * dt/2;t = t + dt;
end

        将加速度计算分离到步骤的开始和结束意味着如果时间分辨率增加两倍 (Δt →Δt/2),则只需要一次额外的(计算成本较高的)加速度计算。

        当应用于力学问题时,跨越式积分有两个主要优势。首先是蛙跳法的时间可逆性。可以向前积分n步,然后反转积分方向,向后积分n步,以达到相同的起始位置。第二个优点是它的辛性质,有时允许动力系统的(稍微修改的)能量守恒(仅适用于某些简单系统)。这在计算轨道动力学时特别有用,因为许多其他积分方案(例如龙格-库塔方法)不保存能量并允许系统随时间大幅漂移。

        最后,我们使用另一个for循环,for i = 1:ceil(end_t/dt)运行蛙跳积分器并保存绘制轨迹的能量和位置。下面是我们的模拟结果。

        N 体模拟 N = 10,dt = 0.01,软化 = 0.1。

在此处查找 GitHub 存储库。感谢您的阅读,祝您有美好的一天!

四、结论

        N体问题是我们不常见的数学模型,用于天体计算(如小行星带)可能是个有用模型,随着人类宇宙视野的开阔,这种多维度物理模型将形成主流数学模型。 

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

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

相关文章

gin使用自签名SSL证书与自签名证书不受信任方法解决

文章目录 1. X.509 V3证书介绍2、使用openssl生成自签名证书和解决不受信任问题2.1、生成根证书2.2、为域名生成证书申请文件2.3、为域名创建证书的扩展描述文件2.4、为域名创建证书 3、Go应用中使用自签名证书3.1、gin框架调用实现3.2、运行效果 4、使用java的bouncycastle生成…

比较好的python书籍,python有什么书推荐

大家好,小编来为大家解答以下问题,比较好的python书籍,python有什么书推荐,现在让我们一起来看看吧! 我是在半年前接触到Python的,我之前没有一点编程基础,但在我自学的这半年里,我发…

Saas 中 用默认的值,不初始化给商户值,sql 查询 group by中,指定字段 倒序

在saas 项目中,有些商户没有设定某些值,则用系统默认的值,不需要初始化给商户 SELECT * FROM app_public_config WHERE (name, merchant_id) IN (SELECT name, MAX(merchant_id)FROM app_public_configGROUP BY name ) and merchant_id IN …

vue3 后台返回的接口数据,下载图片到本地

vue3 后台返回的接口数据&#xff0c;下载图片到本地 <el-table><el-table-column align"left" label"操作" min-width"240"><template #default"scope"><el-button icon"edit" type"primary&quo…

我的NPI项目之Android 安全系列 -- Android Strongbox 初识

从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常&#xff0c;这样的单元就是我们通常称作的Secure Element&#xff08;SE&#xff09;&am…

高效备份与大数据分析:揭秘亚马逊云科技海外服务器强大能力

首先&#xff0c;让我们先来了解一下云计算的基本概念。云计算是一种基于互联网的计算模式&#xff0c;通过将计算资源、存储空间和应用程序提供给用户&#xff0c;实现按需使用和付费的方式。依托于众多出彩的海外服务器产品我们可以获得这一体验。云计算能够极大地简化用户的…

OpenCV-Python:DevCloud CodeLab介绍及学习

1.Opencv-Python演示环境 windows10 X64 企业版系统python 3.6.5 X64OpenCV-Python 3.4.2.16本地PyCharm IDE线上注册intel账号&#xff0c;使用DevCloud CodeLab 平台 2.DevCloud CodeLab是什么&#xff1f; DevCloud是一个基于云端的开发平台&#xff0c;提供了强大的计算…

UE5 C++(二)— 游戏架构介绍

架构关系如下&#xff1a; 这里只简单描述下&#xff0c;具体的查看官方文档 AGameMode: AGameMode 是 AGameModeBase 的子类&#xff0c;拥有一些额外的功能支持多人游戏和旧行为。 所有新建项目默认使用 AGameModeBase。 如果需要此额外行为&#xff0c;可切换到从 AGameM…

二、Java基础语法

day02 - Java基础语法 1. 注释 ​ 注释是对代码的解释和说明文字。 Java中的注释分为三种&#xff1a; 单行注释&#xff1a; // 这是单行注释文字多行注释&#xff1a; /* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */ 注意&#xff1a;多行注释不能嵌套使用…

docker-harbor 私有仓库

docker 镜像 容器 仓库 仓库&#xff1a;保存镜像 私有&#xff0c;自定义用户的形式登录仓库&#xff0c;拉取或者上传镜像。&#xff08;内部隔离的用户&#xff09; harbor&#xff1a;是VMware公司开发的&#xff0c;开源的企业级的docker registry项目。 帮助用户快速…

【刷题笔记】N皇后||回溯||符合思维方式

N皇后II 1 题目详情 n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回 n 皇后问题 不同的解决方案的数量。 https://leetcode.cn/problems/n-queens-ii/ 2 分析 刚一开始的时候我认…

由@EnableWebMvc注解引发的Jackson解析异常

同事合了代码到开发分支&#xff0c;并没有涉及到改动的类却报错。错误信息如下&#xff1a; Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.http.conv…

【Python机器学习系列】一文讲透机器学习中的K折交叉验证(源码)

一、简介 前面我详细介绍了关于机器学习的归一化和反归一化以及表格数据在机器学习中的输入格式问题&#xff1a; 一文彻底搞懂机器学习中的归一化与反归一化问题 【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式&#xff08;理论源码&#xff09; 本文将介绍…

Mysql workbench

下载地址: https://download.csdn.net/download/a876106354/88616595

Numpy: 修改numpy的dtype

要修改NumPy数组的dtype&#xff0c;可以使用astype()方法。这个方法将创建一个新的数组&#xff0c;其数据类型&#xff08;dtype&#xff09;由参数指定。 下面是一个例子&#xff0c;展示如何将一个NumPy数组的dtype从int64修改为float32: import numpy as np# 创建一个in…

进程概念【linux】

进程基础 在学习进程之前&#xff0c;首先要有一定的计算机硬件和软件基础。 硬件基础&#xff1a;冯诺依曼体系结构 如图&#xff0c;是计算机在硬件上的体系结构。 下面举出一些常见的输入输出设备&#xff08;有些设备只作输出设备&#xff0c;或者只作输入设备&#xff…

LLM之Prompt(三)| XoT:使用强化学习和蒙特卡罗树搜索将外部知识注入Prompt中,性能超过CoT,ToT和GoT

​论文地址&#xff1a;https://arxiv.org/pdf/2311.04254.pdf 一、当前Prompt技术的局限性 LLM使用自然语言Prompt可以将复杂的问题分解为更易于管理的“thought”可以回复用户的问题。然而&#xff0c;大多数现有的Prompt技术都有局限性&#xff1a; 输入输出&#xff08;I…

【QT 5 调试软件+Linux下调用脚本shell-经验总结+初步调试+基础样例】

【QT 5 调试软件Linux下调用脚本shell-经验总结初步调试基础样例】 1、前言2、实验环境3、自我总结4、实验过程&#xff08;1&#xff09;准备工作-脚本1&#xff09;、准备工作-编写运行脚本文件2&#xff09;、给权限3&#xff09;、运行脚本 &#xff08;2&#xff09;进入q…

pytorch一致数据增强

分割任务对 image 做&#xff08;某些&#xff09;transform 时&#xff0c;要对 label&#xff08;segmentation mask&#xff09;也做对应的 transform&#xff0c;如 Resize、RandomRotation 等。如果对 image、label 分别用 transform 处理一遍&#xff0c;则涉及随机操作的…

计算机网络网络层(期末、考研)

计算机网络总复习链接&#x1f517; 目录 路由算法静态路由与动态路由距离-向量算法链路状态路由算法层次路由 IPv4&#xff08;这个必考&#xff09;IPv4分组IPv4地址与NAT子网划分与子网掩码、CIDRARP、DHCP与ICMP地址解析协议ARP动态主机配置协议DHCP IPv6IPv6特点 路由协议…