基于势能的平面运动模拟

运动模拟

接前面

递归调用------单向汉诺塔

里面说要讲Python解方程。Python还可以做数值计算进行物理现象的模拟。

七边形最小分割弦

等多篇都用到了公式。

F = m a F=ma F=ma

物体加速度的大小跟作用力成正比,跟物体的质量成反比,且与物体质量的倒数成正比;加速度的方向跟作用力的方向相同。 F 和 a F和a F和a的方向相同。

F = m a = m d 2 r d t 2 F = ma = m \frac{{{d^2}\ r}}{{d{t^2}}} F=ma=mdt2d2 r

a = Δ v / Δ t a = Δv/Δt a=Δv/Δt得出上面的公式。模拟时用0.01秒距离的变化表示加速度。

F = k Q q r 2 r ^ F= k \frac{{Qq}}{{{r^2}}} \hat{r} F=kr2Qqr^

库仑定律(Coulomb's law)是静止点电荷相互作用力的规律。1785年由法国科学家C,-A.de库仑根据实验得出,真空中两个静止的点电荷之间的相互作用力与它们的电荷量的乘积成正比,与它们的距离的二次方成反比,作用力的方向在它们的连线上,同名电荷相斥,异名电荷相吸。

代码

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
import math
#常数
Q = (((0.0,0.0),10.0),((5.0,-5.0),5.0))#电荷的位置和值
TIMELIMIT = 20.0 #模拟终止的时刻
RLIMIT = 0.1     #距离r的最小值
H = 0.01         #时刻的跨度
t = 0.0
#画出电荷的位置
for qi in Q:
    plt.plot(qi[0][0],qi[0][1],".")

vx,vy,x,y = -2,-1,2,2
#当前时刻与位置
#print("{:.7f}{:.7f}{:.7f}{:.7f}{:.7f}".format(t,x,y,vx,vy))
#追加现在位置
xlist = [x]
ylist = [y]
#平面运动的计算
while t < TIMELIMIT:
    t = t + H
    rmin = float("inf") #将距离最小值初始化
    for qi in Q:
        rx = qi[0][0] - x #计算距离rx
        ry = qi[0][1] - y #计算距离ry
        r = math.sqrt(rx*rx + ry*ry) #计算距离r
        if r < rmin:
            rmin = r #更新距离的最小值
        vx += (rx/r/r/r*qi[1])*H#计算速度vx
        vy += (ry/r/r/r*qi[1])*H#计算速度vy
    x += vx*H #计算位置x
    y += vy*H #计算位置y
    #print("{:.7f}{:.7f}{:.7f}{:.7f}{:.7f}".format(t,x,y,vx,vy))
    #追加现在位置
    xlist.append(x)
    ylist.append(y)
    if rmin < RLIMIT:
        break #无限接近电荷时终止
#图表表示
plt.plot(xlist,ylist)
plt.show()

电荷的位置和值

一个10个电荷在原点,一个5个电荷在第四象限。
Q = ( ( ( 0.0 , 0.0 ) , 10.0 ) , ( ( 5.0 , − 5.0 ) , 5.0 ) ) Q = (((0.0,0.0),10.0),((5.0,-5.0),5.0)) Q=(((0.0,0.0),10.0),((5.0,−5.0),5.0))

运动电荷的初始位置和速度

vx,vy,x,y = -2,-1,2,2

计算距离

r = math.sqrt(rxrx + ryry) #计算距离r

计算速度

vx += (rx/r/r/r*qi1)*H#计算速度vx

这里连续除以三次r,应该是对应上面的库伦定理。

打印

打印的时刻,坐标,坐标方向的速度。截取了开头结尾的部分数据。

0.00000002.00000002.0000000-2.0000000-1.0000000

0.01000001.97991501.9899037-2.0084992-1.0096312

0.02000001.95974391.9797095-2.0171083-1.0194191

0.03000001.93948561.9694158-2.0258299-1.0293684

0.04000001.91913901.9590210-2.0346668-1.0394842

0.05000001.89870271.9485233-2.0436221-1.0497717

...

19.97000005.96697103.0464395-0.41700850.8300425

19.98000005.96278023.0547222-0.41908360.8282736

19.99000005.95856863.0629873-0.42115650.8265034

20.00000005.95433633.0712346-0.42322750.8247318

模拟

相关推荐
用户83562907805115 小时前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
宇宙之一粟1 天前
乐企版式文件生成平台
java·后端·python
学测绘的小杨2 天前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz3102 天前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐2 天前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱2 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot2 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海3 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱3 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽3 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict