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}}=\left[x_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再实现

参阅 - 亚图跨际
相关推荐
yyfhq22 分钟前
sdnet
python
测试199830 分钟前
2024软件测试面试热点问题
自动化测试·软件测试·python·测试工具·面试·职场和发展·压力测试
love_and_hope30 分钟前
Pytorch学习--神经网络--搭建小实战(手撕CIFAR 10 model structure)和 Sequential 的使用
人工智能·pytorch·python·深度学习·学习
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
零意@1 小时前
ubuntu切换不同版本的python
windows·python·ubuntu
思忖小下1 小时前
Python基础学习_01
python
q567315232 小时前
在 Bash 中获取 Python 模块变量列
开发语言·python·bash
是萝卜干呀2 小时前
Backend - Python 爬取网页数据并保存在Excel文件中
python·excel·table·xlwt·爬取网页数据
代码欢乐豆2 小时前
数据采集之selenium模拟登录
python·selenium·测试工具
狂奔solar2 小时前
yelp数据集上识别潜在的热门商家
开发语言·python