从拧开水龙头到理解宇宙:用Python和Matplotlib可视化流体连续性方程
当你拧开水龙头时,是否想过水流背后的数学原理?流体力学中的连续性方程揭示了质量守恒如何塑造我们日常见到的水流、空气流动乃至星系运动。本文将带你用Python代码"看见"这些抽象概念——通过Matplotlib动态可视化,理解管道收缩如何改变流速、龙卷风为何呈现螺旋结构,以及如何将这些原理应用于游戏引擎和工业仿真。
1. 环境准备与基础概念
在开始编码前,我们需要搭建科学计算环境。推荐使用Anaconda创建独立环境:
bash复制conda create -n fluid_sim python=3.9
conda activate fluid_sim
conda install numpy matplotlib ipython
连续性方程的核心是质量守恒定律,其微分形式表示为:
$$
\frac{\partial \rho}{\partial t} + \nabla \cdot (\rho \mathbf{v}) = 0
$$
其中ρ代表密度,v是速度矢量场。 对于不可压缩流体(如水),方程简化为∇·v=0,这意味着:
- 管道变窄处流速加快(文丘里效应)
- 流体不能凭空产生或消失
- 流线密度反映流速大小
提示:在Jupyter Notebook中运行代码时,使用
%matplotlib widget命令可获得交互式可视化效果
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 一维管道流动模拟
我们先模拟最简单的情况——流体在变径管道中的稳定流动。创建pipe_flow.py文件:
python复制import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
# 管道几何定义
x = np.linspace(0, 10, 100)
radius = 0.5 + 0.3 * np.sin(x) # 正弦波状管道
# 连续性方程求解
inlet_velocity = 1.0
cross_section = np.pi * radius**2
velocity = inlet_velocity * (cross_sectio
