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再实现

参阅 - 亚图跨际
相关推荐
weisian1514 分钟前
入门篇--2-Windows上如何用Conda松管理多个Python版本?
windows·python·conda
m0_738120726 分钟前
应急响应——知攻善防蓝队靶机Web-1溯源过程
前端·网络·python·安全·web安全·ssh
xingzhemengyou110 分钟前
python pandas操作excel
python·excel·pandas
兴趣使然黄小黄12 分钟前
【Pytest】Pytest框架快速入门
python·pytest
aini_lovee14 分钟前
使用BP神经网络进行故障数据分类的方法和MATLAB实现
神经网络·matlab·分类
dagouaofei14 分钟前
文档生成PPT到底快不快?PDF转PPT工具实测分析
python·pdf·powerpoint
玖日大大30 分钟前
TensorFlow 深度解析:从基础到实战的全维度指南
人工智能·python·tensorflow
不拱地的猪35 分钟前
Matplotlib 的字体参数设置方法(MAC OSX)
python·mac·matplotlib·字体设置·文中显示中文
free-elcmacom36 分钟前
机器学习高阶教程<3>统计学习理论进阶
人工智能·python·机器学习·统计学习理论
listhi52036 分钟前
matlab大规模L1范数优化问题
开发语言·matlab