Python 和 MatLab 模拟粒子动力系统

力计算

我们将假设一个由 N N N 个点粒子组成的系统,索引为 i = 1 , ... , N i=1, \ldots, N i=1,...,N。每个粒子都有一个:

  • 质量 m i m_i mi

  • 位置 r i = x i , y i , z i r_{\boldsymbol{i}}=\leftx_i, y_i, z_i\\right ri=xi,yi,zi

  • 速度 v i = v x i , v y i , v z i \mathbf{v}_{\boldsymbol{i}}=\left\\mathrm{vx}_i, \\mathrm{v} y_i, \\mathrm{v} z_i\\right vi=vxi,vyi,vzi

根据牛顿万有引力定律(著名的"平方反比定律"),每个粒子都会感受到所有其他粒子的引力。也就是说,每个粒子都会感受到加速度:
a i = G ∑ j ≠ i m j r j − r i ∣ r j − r i ∣ 3 \mathbf{a}i=G \sum{j \neq i} m_j \frac{\mathbf{r}_j-\mathbf{r}_i}{\left|\mathbf{r}_j-\mathbf{r}_i\right|^3} ai=Gj=i∑mj∣rj−ri∣3rj−ri

Python计算矩阵

时间积分

位置和速度使用蛙跳方案进行更新。对于每个时间步 Δt,每个粒子都会受到半步"跳":
v i = v i + Δ t 2 × a i \mathbf{v}_i=\mathbf{v}_i+\frac{\Delta t}{2} \times \mathbf{a}_i vi=vi+2Δt×ai

Python加速度函数

上述代码的性能在Python中实际上可以通过向量化来提高。 也就是说,用向量和矩阵运算来表述问题。 它通常可以带来 100 倍的加速,还使代码更具可读性。 缺点是在矩阵内存储中间计算会占用大量内存。 这是计算所有粒子加速度的函数的矢量化版本:

Python矢量加速度计算

Python动能和势能

我们的代码计算这些量并跟踪总能量,以确保通过数值方法近似守恒。

MatLab再实现

参阅 - 亚图跨际
相关推荐
2601_962295585 分钟前
Python UI自动化测试用例脚本编写指南
python·测试用例·uiautomator2·ui自动化测试·脚本编写
重生之小比特15 分钟前
【Java SE】数据类型与变量
java·开发语言·python
LadenKiller22 分钟前
先分清阶段,再让工具帮量化学习
人工智能·python
WeiXin_DZbishe23 分钟前
基于springboot大学生提问箱系统-计算机毕设【课程设计】72593
javascript·vue.js·spring boot·vscode·python·node.js·php
jsjzsl224 分钟前
独立自由度框架下位置自由度的本体论特征、物理现象与新技术路径
python·flask·fastapi
z_mazin29 分钟前
逆向一种私有二进制序列化格式:从零到字节级解析器
网络·python·网络协议·算法·rpc
威联通安全存储39 分钟前
TS-h1290FX 在模具制造设计与CAM场景的部署
python·制造
liliangcsdn1 小时前
IC计算-前向/远期收益计算和代码示例
开发语言·python·pandas
2601_962381861 小时前
python安装好了如何设置环境变量
python·开发工具·环境变量·虚拟环境·ide配置
小柯南敲键盘1 小时前
跨马翻译:跨境电商图片翻译工具,批量处理视频字幕与抠图
python·音视频