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

参阅 - 亚图跨际
相关推荐
DataLaboratory2 小时前
Python爬取百度地图-前端直接获取
爬虫·python·百度地图
Turnsole_y4 小时前
pycharm自动化测试初始化
python·selenium
weixin-a153003083165 小时前
[数据抓取-1]beautifulsoup
开发语言·python·beautifulsoup
AI量化投资实验室5 小时前
15年122倍,年化43.58%,回撤才20%,Optuna机器学习多目标调参backtrader,附python代码
人工智能·python·机器学习
倔强青铜三5 小时前
苦练Python第67天:光速读取任意行,linecache模块解锁文件处理新姿势
人工智能·python·面试
我是华为OD~HR~栗栗呀6 小时前
华为od-21届考研-C++面经
java·c语言·c++·python·华为od·华为·面试
明月(Alioo)6 小时前
机器学习入门,无监督学习之K-Means聚类算法完全指南:面向Java开发者的Python实现详解
python·算法·机器学习
鱼鱼说测试6 小时前
Linux下运行Jmeter
开发语言·python
CodeCraft Studio7 小时前
国产化Excel开发组件Spire.XLS教程:将Python列表转换为Excel表格(3种实用场景)
开发语言·python·excel·spire.xls·python列表转excel·国产化文档开发
企鹅侠客8 小时前
基于python写的PDF表格提取到excel文档
python·pdf·excel·pdf文档表格转excel