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

参阅 - 亚图跨际
相关推荐
大、男人4 分钟前
python之contextmanager
android·python·adb
毕设源码-钟学长26 分钟前
【开题答辩全过程】以 基于Python的车辆管理系统为例,包含答辩的问题和答案
开发语言·python
CCPC不拿奖不改名1 小时前
数据处理与分析:数据可视化的面试习题
开发语言·python·信息可视化·面试·职场和发展
液态不合群1 小时前
线程池和高并发
开发语言·python
旦莫1 小时前
Pytest教程:Pytest与主流测试框架对比
人工智能·python·pytest
wuk9981 小时前
梁非线性动力学方程MATLAB编程实现
前端·javascript·matlab
数据大魔方1 小时前
【期货量化实战】螺纹钢量化交易指南:品种特性与策略实战(TqSdk完整方案)
python·算法·github·程序员创富·期货程序化·期货量化·交易策略实战
一个与程序bug抗争的程序员2 小时前
Matlab App Designer设计人机交互界面并打包成exe——加法计算器
matlab·人机交互
旻璿gg2 小时前
paddleocr、paddleocrvl、ppocrv5
python
清水白石0082 小时前
手写超速 CSV 解析器:利用 multiprocessing 与 mmap 实现 10 倍 Pandas 加速
python·pandas