在科学计算、金融建模、物理仿真等领域,蒙特卡洛模拟是一种极其强大的数值方法。它通过大量随机抽样来估算复杂问题的解。而Rust语言凭借其内存安全、高性能和并发优势,成为实现这类计算密集型任务的理想选择。
本教程将带你从零开始,用 Rust 实现一个经典的蒙特卡洛 π(圆周率)估算程序。即使你是 Rust 编程新手,也能轻松跟上!
蒙特卡洛方法的核心思想是:利用随机抽样来解决确定性问题。例如,我们可以通过向一个正方形内随机投点,并统计落在其内切圆中的点的比例,来估算圆周率 π。
如图所示,假设正方形边长为 2,其内切圆半径为 1。那么:
首先,确保你已安装 Rust(可通过 rustup 安装)。然后在终端执行:
cargo new monte_carlo_picd monte_carlo_pi 打开 src/main.rs,替换为以下代码:
use rand::Rng;use std::time::Instant;fn estimate_pi(num_samples: u64) -> f64 { let mut rng = rand::thread_rng(); let mut inside_circle = 0; for _ in 0..num_samples { // 生成 [-1.0, 1.0) 范围内的随机 x 和 y let x: f64 = rng.gen_range(-1.0..1.0); let y: f64 = rng.gen_range(-1.0..1.0); // 判断点是否在单位圆内:x² + y² ≤ 1 if x * x + y * y <= 1.0 { inside_circle += 1; } } // π ≈ 4 * (圆内点数 / 总点数) 4.0 * (inside_circle as f64) / (num_samples as f64)}fn main() { let num_samples = 10_000_000; // 一千万次采样 let start = Instant::now(); let pi_estimate = estimate_pi(num_samples); let duration = start.elapsed(); println!("估算的 π 值: {:.6}", pi_estimate); println!("实际 π 值: {:.6}", std::f64::consts::PI); println!("误差: {:.6}", (pi_estimate - std::f64::consts::PI).abs()); println!("耗时: {:?}", duration);} 上述代码使用了 rand crate 来生成随机数。请在 Cargo.toml 的 [dependencies] 部分添加:
[dependencies]rand = "0.8" 在项目根目录执行:
cargo run --release 使用 --release 可启用编译器优化,大幅提升性能。你将看到类似输出:
估算的 π 值: 3.141721实际 π 值: 3.141593误差: 0.000128耗时: 120ms Rust 在Rust数值计算和Rust随机数生成方面具有显著优势:
rand、ndarray、rayon 等 crate 让科学计算更简单。想进一步提升性能?可以尝试:
rayon 并行化采样过程(多线程加速)rand_xoshiro)通过这个简单的例子,你已经掌握了如何用 Rust 实现基本的Rust蒙特卡洛模拟。这不仅是学习Rust编程教程的好起点,也为更复杂的数值模拟打下基础。快动手试试吧!
祝你在 Rust 的科学计算之旅中收获满满!
本文由主机测评网于2025-12-04发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025123001.html