# Ising模型 **Repository Path**: guest_1013/ising_model ## Basic Information - **Project Name**: Ising模型 - **Description**: 计算物理作业:两种不同晶格的Ising模型的模拟 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-06 - **Last Updated**: 2025-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ising模型模拟与临界现象分析 本项目实现了二维Ising模型的Monte Carlo模拟,用于研究相变和临界现象。支持方形晶格和三角晶格两种结构,包含数据生成和可视化分析功能。 ## 项目结构 ``` ising_model/ ├── src/ # Rust源代码 │ ├── main.rs # 主程序,数据生成 │ ├── square.rs # 方形晶格实现 │ └── triangle.rs # 三角晶格实现 ├── data/ # 模拟数据存储 │ ├── square/ # 方形晶格数据 │ ├── triangle/ # 三角晶格数据 │ └── with_H/ # 外磁场相关数据 │ └── square/ # 方形晶格外磁场数据 ├── image/ # 可视化图像输出 │ ├── square/ # 方形晶格图像 │ │ ├── visualize_no_H.png # 无外磁场可视化 │ │ └── M-H_curves.png # M-H曲线图 │ └── triangle/ # 三角晶格图像 ├── visualize_no_H_square.py # 方形晶格可视化分析 ├── visualize_no_H_triangle.py # 三角晶格可视化分析 ├── visual_H-M.py # 外磁场M-H曲线可视化 ├── Cargo.toml # Rust项目配置 └── README.md # 项目说明 ``` ## 功能特性 ### 1. 模拟算法 - **Metropolis算法**:基于能量变化的概率翻转机制 - **两种迭代方式**: - 按晶格顺序迭代 - 按随机选择迭代 - **收敛判断**:基于磁化强度的相对变化 ### 2. 临界现象分析 - **临界温度(Tc)搜索**:在理论临界温度附近自动搜索最佳Tc - **临界指数(β)计算**:通过线性拟合和非线性拟合两种方法 - **标度关系验证**:验证 |M| ~ (Tc - T)^β 的临界标度定律 ### 3. 可视化功能 - **无外磁场分析**: - 磁化强度 |M| 随温度变化曲线 - 能量 |E| 随温度变化曲线 - 比热 Cv 随温度变化曲线 - R²值随Tc变化曲线 - ln|M| vs ln(Tc-T) 线性拟合图 - **外磁场分析**: - 不同温度下的M-H曲线(T=100K, 30K, 10K) - 磁化强度随外磁场变化关系 ## 安装与运行 ### 环境要求 - Rust 1.70+ (用于数据生成) - Python 3.8+ (用于可视化分析) - 必要的Python包:numpy, matplotlib, scipy ### 数据生成 (Rust) ```bash # 编译项目 cargo build --release # 运行模拟(默认运行三角晶格) cargo run --release # 如需运行方形晶格,取消main.rs中方形晶格部分的注释 ``` ### 可视化分析 (Python) ```bash # 方形晶格可视化(无外磁场) python visualize_no_H_square.py # 三角晶格可视化(无外磁场) python visualize_no_H_triangle.py # 外磁场M-H曲线可视化 python visual_H-M.py ``` ## 理论背景 ### Ising模型 Ising模型是描述磁性系统相变的经典统计物理模型。在二维情况下,系统在临界温度Tc处发生从铁磁相到顺磁相的相变。 ### 临界指数 在临界点附近,物理量呈现幂律行为: - 磁化强度:|M| ~ (Tc - T)^β - 关联长度:ξ ~ |T - Tc|^(-ν) - 磁化率:χ ~ |T - Tc|^(-γ) ### 理论值 - **方形晶格**:Tc ≈ 2.269, β ≈ 0.125 - **三角晶格**:Tc ≈ 3.641, β ≈ 0.125 ## 参数配置 ### 模拟参数 (src/main.rs) ```rust const SIGMA: f64 = 1.0; // 初始自旋方向 const J: f64 = -1.0; // 交换积分(铁磁相互作用) const L: u32 = 500; // 晶格尺寸 const MIN_T_SQUARE: f64 = 1.5; // 方形晶格最小温度 const MAX_T_SQUARE: f64 = 3.0; // 方形晶格最大温度 const MIN_T_TRIANGLE: f64 = 1.0; // 三角晶格最小温度 const MAX_T_TRIANGLE: f64 = 2.0; // 三角晶格最大温度 const T_STEP: f64 = 0.01; // 温度步长 const MIN_ITER: u32 = 500; // 最小迭代次数 // 外磁场参数 const MAX_H: f64 = 10.0; // 最大外磁场强度 const H_STEP: f64 = 0.1; // 磁场步长 const SELECTED_T: [f64; 3] = [100.0, 30.0, 10.0]; // 选择的温度值 ``` ### 可视化参数 (Python文件) ```python MIN_T = 1.5 # 最小温度 MAX_T = 3.0 # 最大温度 T_STEP = 0.01 # 温度步长 ``` ## 结果分析 ### 典型输出 **无外磁场临界分析:** ``` 按晶格搜索:最大R² = 0.9945, 对应Tc = 2.2472, 拟合斜率 = 0.0820 按随机搜索:最大R² = 0.9899, 对应Tc = 2.2573, 拟合斜率 = 0.0850 晶格搜索临界指数拟合结果: 温度范围: 2.0000 ≤ T < 2.2472 数据点数量: 25 拟合斜率β = 0.0807 截距C = 0.0133 决定系数R² = 0.9868 理论值β ≈ 0.125 ``` **外磁场M-H曲线分析:** ``` M-H曲线数据统计: 温度 T = 100.0K: 磁场范围: H = [-10.0, 10.0] 磁化强度范围: M = [-0.1027, 0.1036] 数据点数: 41 温度 T = 30.0K: 磁场范围: H = [-10.0, 10.0] 磁化强度范围: M = [-0.3618, 0.3604] 数据点数: 41 温度 T = 10.0K: 磁场范围: H = [-10.0, 10.0] 磁化强度范围: M = [-0.8720, 0.8707] 数据点数: 41 ``` ### 结果解读 1. **临界温度**:模拟得到的Tc与理论值接近 2. **临界指数**:β值略低于理论值0.125,可能由于有限尺寸效应 3. **拟合质量**:R² > 0.98表明拟合效果良好 4. **M-H曲线特性**: - 温度越高,磁化强度对磁场的响应越小 - 温度越低,磁化强度变化越明显,符合顺磁-铁磁相变特性 - 曲线呈现对称性,符合物理预期 ## 可视化结果展示 ### 无外磁场临界现象分析 **方形晶格临界现象分析图**: ![方形晶格临界现象分析](image/square/visualize_no_H.png) **三角晶格临界现象分析图**: ![三角晶格临界现象分析](image/triangle/visualize_no_H.png) ### 外磁场M-H曲线分析 **不同温度下的M-H曲线**: ![M-H曲线](image/square/M-H_curves.png) ### 图像说明 1. **临界现象分析图**包含: - 磁化强度 |M| 随温度变化曲线 - 能量 |E| 随温度变化曲线 - 比热 Cv 随温度变化曲线 - R²值随Tc变化曲线 - ln|M| vs ln(Tc-T) 线性拟合图 2. **M-H曲线图**展示了: - 三个不同温度(100K, 30K, 10K)下的磁化强度随外磁场变化关系 - 温度越低,磁化强度对磁场的响应越明显 - 曲线呈现良好的对称性 ## 算法细节 ### 1. Metropolis算法 ```rust fn will_flip(&self, delta_e: f64) -> bool { if delta_e <= 0.0 { true // 总是翻转(降低能量) } else { // 按概率 exp(-ΔE/T) 翻转 let prob = (-delta_e / self.t).exp(); self.rng.gen::() < prob } } ``` ### 2. 临界指数计算 ```python def calculate_R2_for_Tc(m_data, t_data, Tc_candidate): # 方法1:对数线性拟合 x_fit = np.log(Tc_candidate - t_filtered) y_fit = np.log(m_filtered) k, b = np.polyfit(x_fit, y_fit, 1) # β = k # 方法2:非线性拟合 def critical_law(t_val, beta): return (Tc_candidate - t_val) ** beta popt, _ = curve_fit(critical_law, t_filtered, m_filtered, p0=[0.125]) ``` ## 常见问题 ### Q: 模拟结果与理论值有偏差? A: 可能原因包括: - 有限尺寸效应(L=500仍不够大) - 迭代次数不足 - 临界区域数据点不够密集 ### Q: 如何提高精度? A: 建议: - 增大晶格尺寸L - 增加迭代次数MIN_ITER - 减小温度步长T_STEP - 在临界温度附近增加数据点密度 ### Q: 可视化图像不显示? A: 确保已安装matplotlib,并检查是否有图形界面支持。 ## 参考文献 1. Onsager, L. (1944). Crystal Statistics. I. A Two-Dimensional Model with an Order-Disorder Transition. 2. Metropolis, N., et al. (1953). Equation of State Calculations by Fast Computing Machines. 3. Newman, M. E. J., & Barkema, G. T. (1999). Monte Carlo Methods in Statistical Physics. ## 许可证 本项目仅供学习和研究使用。