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

news2024/11/16 9:34:36

一、说明

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

图片由作者提供。

二、关于万有引力模型

        牛顿在 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 accelerations

x = 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:Nt
    vel = vel + acc * dt/2;
    pos = pos + vel * dt
    acc = 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.coloradmin.cn/o/1303677.html

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

相关文章

第二百零一回 介绍一个三方包open_settings

文章目录 1. 概念介绍2 使用方法3 代码与效果3.1 示例代码3.2 运行效果 4. 经验分享 我们在上一章回中介绍了Form Widget相关的内容,本章回中将介绍Form系列组件的验证与提交功能.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里说的的验…

【JAVA基础】----第一天

【JAVA基础】----第一天 命名规则注释方式对HelloWorld代码进行解释常量,进制转换和机器码展现计算过程常量类型1.字符串常量2.整数常量 提供了四种表现形式2.1 二进制2.2 八进制2.3 十进制2.4 十六进制2.5 进制之间的转化2.5.1 其他进制转化为十进制2.5.2 十进制转…

阿里云大数据工程师ACP认证,今天终于搞定了,87分

为啥我得去考个阿里云大数据工程ACP证书? 首先得声明,这不是因为我对阿里有多痴迷,也不是因为我想把我的简历装饰得花里胡哨。实际上,这更像是一场自我挑战的游戏。我就是一根筋,当时公司要求考阿里云大数据工程师认证…

基于FPGA的视频接口之高速IO

简介 相对于其他视频接口来说,高速IO接口(以Xilinx公司为例,spartan 6系列的GTP、Artix7系列的GTP,KENTEX7系列的GTX和GTH等)具有简化设计、充分利用FPGA资源、降低设计成本等功能。 高速IO接口传输视频,一般会被拓展为万兆以太网、40G以太网、10G光纤、40G光纤、3G-SDI、…

【单调栈】【二分查找】LeetCode: 2454.下一个更大元素 IV

作者推荐 【动态规划】【广度优先】LeetCode2258:逃离火灾 本文涉及的基础知识点 二分查找算法合集 单调栈 题目 给你一个下标从 0 开始的非负整数数组 nums 。对于 nums 中每一个整数,你必须找到对应元素的 第二大 整数。 如果 nums[j] 满足以下条件&#xff…

极狐GitLab CI/CD 变量黑魔法之预定义变量

目录 预定义变量 commit 相关 Job 相关 Pipeline 相关 镜像仓库有关 极狐GitLab CI/CD 变量是指一系列的环境变量,用来帮助我们控制 CI/CD Job 或 Pipeline 的行为,存储一些可以复用的信息,避免在 .gitlab-ci.yml 中形成硬编码。 极狐G…

2024年湖北省高空作业证报名考试取证周期些许夸张

2024年湖北省高空作业证报名考试取证周期些许夸张 湖北省高空作业证报名考试取证周期些许夸张,快的话一周左右也是可以的。湖北省高空作业证一般指的都是湖北省应急管理厅下发的高空作业“特种作业操作证”。主要分为:高处安装拆除维修作业和登高架设作…

基于laravel、vue开发的医院手术麻醉管理系统源码,自主版权,二开快捷。

医院手术麻醉管理系统源码,自主版权,二开快捷,有演示 技术架构:PHP、 js 、mysql、laravel、vue2 手术麻醉临床信息管理系统是数字化手段应用于手术过程中的重要组成部分,用数字形式获取并存储手术相关信息&#xff…

Mybatis之自定义映射resultMap

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…

【愚公系列】2023年12月 HarmonyOS教学课程 015-ArkUI组件(Radio)

🏆 作者简介,愚公搬代码 🏆《头衔》:华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主&#xf…

【51单片机系列】文字取模软件使用

软件链接:https://pan.baidu.com/s/1k-ND9vJReW_KHMWx8uwpcQ?pwdgz8w 提取码:gz8w 双击打开软件,选择【基本操作】->【新建图像】,设置图像的宽度和高度为8。点击确定后将在显示窗口出现一个8x8的白色格子,类似于…

jupyter报错KeyError: ‘icosapent‘

指的是未找到关键词 代码想在一个pkl文件里找到关键词对应的值,然后报了这个错 尝试直接双击pkl文件,显示: 这个意思不是说这个文件保存失败,也不是说这个文件是坏的,而是jupyter无法读取这个格式。 换成pycharm运行…

Chrome谷歌浏览器安装VUE调试插件

访问gitee的vue-devtools 并下载 gitee地址:https://gitee.com/zhang_banglong/vue-devtools 也可以访问git的地址:https://github.com/vuejs/devtools 解压,放到自己的目录下 打开控制面板(管理员),进入…

STM32超声波——HC_SR04

文章目录 一.超声波图片二.时序图三.超声波流程四.单位换算五.取余计算六.换算距离七.超声波代码 一.超声波图片 测量距离:2cm——400cm 二.时序图 (1).以下时序图要先提供一个至少10us的脉冲触发信号,告诉单片机我准备好了,然后该超声波…

WordPress如何搭建多站点

这边之前有讲到过wordpress站中站(栏目站)建站教程,同样的也有讲到过WordPress开启多站点配置,两种方法都是用来搭建子站点的,而开启多站点的方式不同于普通搭建站中站,多站点配置开启,是可以实…

进程的同步和异步、进程互斥

一、进程同步和异步 同步(Synchronous): 同步指的是程序按照顺序执行,一个操作完成后才能进行下一个操作。在多进程或多线程的环境中,同步意味着一个进程(或线程)在执行某个任务时,…

AttributeError: module ‘scrapy‘ has no attribute ‘Filed‘

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

02-Nacos和Eureka的区别与联系

Nacos和Eureka的区别 联系 Nacos和Eureka整体结构类似: 都支持服务注册, 服务拉取, 采用心跳方式对服务提供者做健康监测的功能 区别 Nacos支持服务端主动检测服务提供者状态: 临时实例采用心跳模式,非临时实例采用主动检测模式但对服务器压力比较大(不推荐) 心跳模式: 服务…

使用NCNN在华为M5部署MobileNet-SSD

一、下载ncnn-android-vulkan ncnn-android-vulkan.zip 文件是一个压缩文件,其中包含了 ncnn 框架在 Android 平台上使用 Vulkan 图形库加速的相关文件和代码。 在 Android 平台上,ncnn 框架可以利用 Vulkan 的并行计算能力来进行神经网络模型的推理计…

智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于混合蛙跳算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.混合蛙跳算法4.实验参数设定5.算法结果6.…