物理建模与仿真:Python、Typst 与 CeTZ 协同

建模仿真 · 14 / 18 | 阅读约 13 分钟

痛点引子 「这道题没有公式可套,但计算机可以一秒试完」

空气阻尼下的投篮轨迹、非线性摆的混沌运动、多体引力下的星轨——它们没有解析解,却能用计算机一步一步算出来。这就是数值仿真:把物理定律交给循环语句,让机器替你「做十万次一小步」。

仿真与第 13 篇的数学建模是一对搭档:建模给出方程,仿真给出数值结果,Typst 与 CeTZ 负责把结果变成可发表的文档与图。这一篇打通这条现代科研的生产线。

知识地图 仿真生产线的四站

已学基础:微元法(第 15 篇)、微积分语言(第 12 篇)、建模流程(第 13 篇)。本篇把它们编码化:物理模型 → 微分方程 → 离散化(把 换成小步长 )→ 循环计算 → 可视化。断层在哪?中学只做「解得出来」的题,仿真解锁「解不出来但算得出来」的题——能力边界从公式库扩展到想象力。

图 14-1 仿真流水线:物理模型到循环计算的四站

流水线的关键一站是离散化:把 改写为更新规则 ——每过一个时间步,速度增加一点。计算机每秒执行百万次这样的小步,连续的物理世界在机器里变成离散的幻灯片。步长 是仿真的核心参数:太大则失真,太小则费时。

核心讲解 两个核心:收敛性意识与可视化

核心概念一:数值解永远带着「步长税」。

图 14-2 数值解与解析解对比:步长决定误差

检验仿真是否可信的标准做法:先解一个有解析解的简单版本(比如无阻尼抛体),把数值解与精确解画在一起。本例的欧拉法折线系统性偏低——这是它的固有误差,步长减半误差大体减半(收敛性合格)。凡是仿真论文,都要有这一张「与解析解对比」的图,证明你的代码可信,然后才有资格谈新现象。先校准再测量,与实验的科学素养完全同构。

核心概念二:可视化是仿真的第二生命。

图 14-3 动画分帧:抛体运动的等时快照与速度分解

数据表格没有人读得懂,图与动画才有说服力。CeTZ 恰好是「由数据画图」的利器:把仿真输出的每帧位置喂给 CeTZ,自动生成轨迹分帧图——图中水平速度矢量不变、竖直速度逐帧等量变化,重力加速的本质一图看穿。这也是本系列配图的方法论:数据 → 代码 → 图,可复现、可修改、可动画。强基与科创比赛的报告里,「用代码仿真 + 用 CeTZ 绘图」的组合是区分度的最短路径。

例题拆解 二十行代码仿真一个阻尼抛体

✎ 示范:带空气阻力的投篮

物理模型:重力 竖直向下;阻力 (与速度成正比、方向相反)。

微分方程:。

离散化(欧拉法,步长 0.01 s):每一步先算加速度 ,再更新 、位置 。

代码骨架(Python):

v = [vx0, vy0]; s = [0, h]
for i in range(N):
    a = (0, -g) - (k/m) * v
    v = v + a * dt
    s = s + v * dt
    track.append(s)

可视化:轨迹图显示无阻力抛物线如何被「压弯」,射程比理想值缩短多少;用 CeTZ 画分帧图,直观呈现阻力对速度矢量逐帧的影响。

没有解析解也没关系——用「关闭阻力」的版本校准代码(应精确复现抛物线),再打开阻力看差异。校准—仿真—可视化三段,就是一道开放题的完整答卷。

仿真还有一个「混沌」的彩蛋值得预演:数值方法对某些系统(非线性摆、三体引力、天气)会出现「蝴蝶效应」——初值的十亿分之一误差,几十步后被放大到面目全非。这不是代码 bug,而是系统本身的属性(对初值敏感依赖)。洛伦兹用计算机研究大气环流时发现了它,混沌理论由此诞生。仿真的极限告诉我们:可计算不等于可预测——这是计算思维教给物理学家最谦逊也最深刻的一课。

思维方法 计算思维:把物理直觉交给循环

⭐ 仿真的三问

步长取多少?(收敛性:减半步长结果应稳定)模型可信吗?(先复现已知解再谈未知)输出怎么讲给读者?(一张好图胜过一页数字)。

计算思维不是「会编程」,而是知道什么时候该让计算机上场:解析解失效的地方,就是仿真的起点。这扇门在大学实验室与工业界天天敞开。

行动清单 今天就能做

可视化还有一个「色彩语义」的进阶建议:为你的仿真输出建立一套固定的颜色语言——蓝=速度、橙=能量、红=异常、灰=参考,全项目统一。跨图对比时,读者(包括未来的你自己)不需要重新学习图例。这一条与全系列的配色规范(蓝数学、橙物理)同源:色彩语义的一致性,是专业度最便宜的可见标志。工程界的图表规范手册(如各航天的可视化指南)都在重复同一条建议。

快问快答:三个高频疑问

延伸阅读

✅ 行动清单:今天就能做的 3 件事

  • ① 安装 Python,抄写并运行上面的阻尼抛体骨架代码(20 行以内),画出轨迹图。
  • ② 做「校准实验」:令 运行,检验输出是否落在理想抛物线上;再逐步增大 ,观察轨迹压弯。
  • ③ 把仿真输出的轨迹数据(CSV)导入 CeTZ 画成图,插入一份 Typst 文档——完成「仿真 → 论文」全链路。