# 奶滴随机游走扩散 **Repository Path**: guest_1013/milk_diffusion ## Basic Information - **Project Name**: 奶滴随机游走扩散 - **Description**: 计算物理作业,奶滴在小孔容器中的随机游走扩散,验证指数衰减关系 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-05 - **Last Updated**: 2025-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 牛奶扩散模拟 - Milk Diffusion Simulation 一个用于模拟粒子在小孔容器中扩散(泄流)过程的Rust程序,包含数据可视化和分析功能。 ## 项目描述 本项目模拟了粒子在方形容器中的随机扩散过程。容器底部有一个小孔,粒子可以通过该孔逃逸。程序跟踪每个时间步长中存活的粒子数量,并将结果保存为pickle文件,供后续分析和可视化使用。 ## 功能特性 - **粒子扩散模拟**:模拟粒子在容器中的随机运动 - **边界反射**:粒子在容器边界处反射 - **孔洞逃逸**:粒子可以通过底部孔洞逃逸 - **数据记录**:自动记录每个时间步的存活粒子数量 - **数据序列化**:使用pickle格式保存模拟结果 - **可视化分析**:Python脚本提供数据可视化和对数拟合分析 ## 项目结构 ``` milk_diffusion/ ├── src/ │ ├── main.rs # 主程序入口 │ └── diffuse.rs # 扩散模型实现 ├── data/ │ └── data.pkl # 模拟结果数据 ├── image/ │ └── visualize.png # 可视化图像 ├── visualize.py # Python可视化脚本 ├── Cargo.toml # Rust项目配置 └── README.md # 项目说明文档 ``` ## 安装和运行 ### 前提条件 - Rust工具链 (安装方法: https://www.rust-lang.org/tools/install) - Python 3.x (用于可视化) - 必要的Python包: `matplotlib`, `numpy` ### 安装Python依赖 ```bash pip install matplotlib numpy ``` ### 运行模拟程序 ```bash # 编译并运行Rust模拟程序 cargo run ``` 程序将自动: 1. 模拟10000个粒子在50x50容器中的扩散过程 2. 跟踪每个时间步的存活粒子数量 3. 将结果保存到`data/data.pkl`文件 ### 运行可视化分析 ```bash # 运行Python可视化脚本 python visualize.py ``` 可视化脚本将: 1. 读取pickle文件中的数据 2. 生成两个图表: - 存活粒子数量随时间变化的折线图 - 对数坐标下的扩散过程分析图 3. 显示拟合直线的斜率参数 4. 保存图像到`image/visualize.png` ## 物理模型 ### 容器参数 - **容器边长 (L)**: 50个单位 - **孔洞大小 (A)**: 10个单位 - **初始粒子数 (N)**: 10000个 ### 粒子行为 - **随机运动**:每个时间步,粒子随机向四个方向移动 - **边界反射**:粒子碰到边界时反射回容器内 - **孔洞逃逸**:粒子到达底部孔洞区域时逃逸 ### 数学分析 在可视化分析中,程序对存活粒子数量的对数进行线性拟合: ``` ln(n) = k * t + b ``` 其中k为扩散系数,反映了粒子逃逸的速率。 ## 输出文件 - `data/data.pkl`:包含每个时间步存活粒子数量的pickle文件 - `image/visualize.png`:包含两个分析图表的图像文件 ## 示例结果 运行可视化脚本后,将生成包含两个图表的图像: ![可视化结果](image/visualize.png) **图表说明:** - **左侧图表**:显示存活粒子数量随时间的变化趋势 - **右侧图表**:在对数坐标下展示扩散过程,红色虚线为拟合直线 ## 开发信息 ### 技术栈 - **编程语言**: Rust (主程序), Python (可视化) - **序列化**: serde-pickle - **可视化**: matplotlib - **随机数**: rand crate ### 依赖项 Rust依赖 (在Cargo.toml中定义): - `rand = "0.9"` - `serde = { version = "1.0", features = ["derive"] }` - `serde-pickle = "1.2"` Python依赖: - `matplotlib` - `numpy` ## 许可证 本项目仅供学习使用。