蒙特卡洛模拟——CAE不确定性量化的基本方法

分类: V&V・不確かさ定量化 | 更新 2026-04-12
Monte Carlo simulation convergence visualization showing random sampling and 1/sqrt(N) error reduction
モンテカルロシミュレーション:ランダムサンプリングによる出力分布の推定と$1/\sqrt{N}$収束

理论与物理

概述 — 什么是蒙特卡洛方法

🧑‍🎓

老师,蒙特卡洛方法就是用随机数反复模拟吗?要做多少次才行呢?

🎓

问得好。粗略地说,这是一种从输入参数的概率分布中随机采样,并重复执行数百次、数千次FEM或CFD分析的方法。目的是从统计上求得输出的波动(分布)。

🧑‍🎓

几千次!?那计算成本不是很高吗?

🎓

是的,这也是蒙特卡洛方法最大的弱点。但其最大的优点是,无论输入变量是多少维,收敛速度都不会改变。灵敏度分析中,如果有10个变量,成本会呈指数级增长,但蒙特卡洛方法无论是10维还是100维,都以相同的速度收敛。

🧑‍🎓

与维度无关… 这太厉害了。具体在什么时候使用呢?

🎓

例如,评估汽车零部件材料强度的波动(变异系数CoV约5%)如何影响疲劳寿命的情况。当杨氏模量、屈服应力、板厚、载荷幅值等多个参数同时波动时,研究这些“组合效应”如何传播到输出,是蒙特卡洛方法擅长的领域。

蒙特卡洛模拟(Monte Carlo Simulation, MCS)是一种从概率性输入变量出发,重复执行确定性模型(FEM、CFD等),以估计输出统计特性(均值、方差、分布形状、置信区间)的方法。其名称来源于以赌场闻名的摩纳哥蒙特卡洛地区,因其使用随机数而得名。

基本原理与收敛速度

🧑‍🎓

收敛速度是怎么决定的?刚才说“与维度无关”…

🎓

蒙特卡洛方法的核心是大数定律中心极限定理。从输入分布中独立采样 $N$ 个样本 $\mathbf{X}_1, \mathbf{X}_2, \ldots, \mathbf{X}_N$,并对每个样本评估模型 $Y = f(\mathbf{X})$。则样本均值为:

$$\hat{\mu}_Y = \bar{Y} = \frac{1}{N}\sum_{i=1}^{N} Y_i = \frac{1}{N}\sum_{i=1}^{N} f(\mathbf{X}_i)$$
🎓

这个样本均值的标准误(Standard Error)由下式表示:

$$\text{SE}(\bar{Y}) = \frac{\sigma_Y}{\sqrt{N}}$$
🧑‍🎓

啊,除以 $\sqrt{N}$ 啊!也就是说,增加样本数误差会变小,但只是按平方根的比例减小…

🎓

没错。这就是著名的$1/\sqrt{N}$ 收敛法则。重要的是:

  • 要使误差减半,需要将样本数增至4倍
  • 要使误差降至1/10,需要100倍的样本
  • 这个收敛速度与输入变量的维数 $d$ 无关(不受维度诅咒影响

样本方差的估计量同样定义如下:

$$\hat{\sigma}_Y^2 = \frac{1}{N-1}\sum_{i=1}^{N} (Y_i - \bar{Y})^2$$

置信区间的估计

🧑‍🎓

把结果写到报告里时,只说“平均值大概是这么多”不行吧?置信区间怎么求呢?

🎓

多亏了中心极限定理,只要 $N$ 足够大(实践中大约从 $N \geq 30$ 开始),样本均值就可以近似为正态分布。所以95%置信区间可以这样写:

$$\text{CI}_{95\%} = \bar{Y} \pm z_{0.025} \cdot \frac{\hat{\sigma}_Y}{\sqrt{N}} = \bar{Y} \pm 1.96 \cdot \frac{\hat{\sigma}_Y}{\sqrt{N}}$$
🧑‍🎓

1.96是正态分布的值对吧。具体来说,做1000次的话精度大概是多少?

🎓

我们来计算一下相对估计精度(Relative Accuracy)。设变异系数为 $\text{CoV}_Y = \sigma_Y / \mu_Y$:

$$\text{RA}_{95\%} = \frac{1.96 \cdot \hat{\sigma}_Y / \sqrt{N}}{\bar{Y}} = \frac{1.96 \cdot \text{CoV}_Y}{\sqrt{N}}$$
🎓

例如,当输出的变异系数为 $\text{CoV}_Y = 0.10$(10%)时:

  • $N = 100$: $\text{RA} = 1.96 \times 0.10 / \sqrt{100} = 1.96\%$
  • $N = 1{,}000$: $\text{RA} = 1.96 \times 0.10 / \sqrt{1000} \approx 0.62\%$
  • $N = 10{,}000$: $\text{RA} \approx 0.20\%$

1000次时,95%置信区间的宽度约为平均值的6%(当 $\text{CoV}_Y \approx 1.0$ 时)是实践中的一个大致标准。

样本数的确定方法

🧑‍🎓

那实践中大概要运行多少次呢?是100次就行,还是需要10,000次…

🎓

这完全取决于目的。大致总结如下:

目的所需样本数的大致标准理由
均值・标准差的估计100〜1,000$1/\sqrt{N}$ 法则已足够收敛
95百分位数的估计1,000〜5,000为了准确捕捉分布的尾部
99.9百分位数(稀有事件)10,000〜100,000尾部精度需要大量样本
故障概率 $P_f = 10^{-k}$ 的估计$\geq 10^{k+2}$为使 CoV($\hat{P}_f$) < 10% 所需
🧑‍🎓

故障概率是 $10^{-6}$ 的话,需要 $10^8$ 次!?那根本跑不完吧…

🎓

所以对于稀有事件的估计,不会使用纯粹的蒙特卡洛方法,而是使用重要性采样(Importance Sampling)或子集模拟(Subset Simulation)等特殊方法。或者引入代理模型来降低计算成本。

收敛速度的理论背景
  • 大数定律:当 $N \to \infty$ 时,样本均值 $\bar{Y}$ 依概率收敛于真实期望值 $\mu_Y = E[Y]$。这保证了蒙特卡洛估计的一致性。
  • 中心极限定理:$\sqrt{N}(\bar{Y} - \mu_Y) / \sigma_Y \to \mathcal{N}(0,1)$。只要存在有限方差,无论原始分布形状如何,样本均值都渐近服从正态分布。这是构建置信区间的理论依据。
  • $1/\sqrt{N}$ 法则的含义:误差以 $O(N^{-1/2})$ 的速度减小。与基于网格的数值积分(如梯形法则)的收敛速度 $O(N^{-2/d})$ 相比,在低维($d \leq 3$)时较慢,但在高维($d \geq 5$)时蒙特卡洛方法更有优势。

采样方法与方差缩减

纯随机采样(Crude Monte Carlo)

🧑‍🎓

刚才公式里用的“随机采样”,就是简单地生成随机数就行了吗?

🎓

最简单的方法是这样的。从每个输入变量的概率分布中独立生成伪随机数来创建样本。这被称为纯随机采样(Crude Monte Carlo / Simple Random Sampling)

🧑‍🎓

但是因为是随机数,有时会出现偏差吧?比如样本集中在某个区域,或者出现空白地带…

🎓

很敏锐。特别是当样本数较少时(大约 $N < 100$),纯随机采样容易导致输入空间的覆盖不均匀。例如,对2个变量生成100个样本时,分布区域的角落可能完全没有样本。这时就出现了LHS(拉丁超立方采样)

拉丁超立方采样(LHS)

🧑‍🎓

LHS这个名字我听说过。和普通随机数有什么区别?

🎓

LHS的想法很简单。将每个输入变量的分布分割成 $N$ 个等概率的层(stratum),确保从每一层中恰好取一个样本点。然后对各变量间的组合进行随机打乱。

🧑‍🎓

啊,原来如此!就是均匀地“品尝”每个变量的分布对吧。就像数独一样,每行每列都必须恰好有一个?

🎓

这个理解是对的。数学上,将每个变量 $X_j$($j = 1, \ldots, d$)的累积分布函数 $F_j$ 的值域 $[0, 1]$ 进行 $N$ 等分:

$$X_j^{(i)} = F_j^{-1}\left(\frac{\pi_j(i) - U_j^{(i)}}{N}\right), \quad i = 1, \ldots, N$$

其中 $\pi_j$ 是 $\{1, 2, \ldots, N\}$ 的一个随机排列,$U_j^{(i)} \sim \text{Uniform}(0, 1)$ 用于随机化层内的位置。

🎓

总结一下LHS的优点:

  • 可以用较少的样本均匀覆盖输入空间
  • 每个变量的边缘分布能被准确再现
  • 与纯随机采样相比,方差更小(但改善幅度取决于具体问题)
  • 在CAE实践中,通常 $N = 50\text{〜}200$ 左右的LHS就能获得足够的精度
比较项目纯随机采样(SRS)LHS
空间覆盖有偏差均匀
边缘分布再现$N \to \infty$ 时保证每层保证
方差缩减效果无(基准)取决于问题,但通常有利
相关性控制困难使用带相关性控制的LHS可实现
追加样本的便利性容易需要重新设计

方差缩减法(Variance Reduction Techniques)

🧑‍🎓

除了LHS,还有其他方法可以用较少的样本数提高精度吗?

🎓

有一类被称为“方差缩减法”的技术。其原理是有效减小标准误 $\text{SE} = \sigma_Y / \sqrt{N}$ 中的 $\sigma_Y$,或者通过改进估计量,在相同的 $N$ 下提高精度。

方法原理适用场景
对偶变量法
(Antithetic Variates)
使用样本 $\mathbf{U}$ 和 $1-\mathbf{U}$ 的配对,引入负相关单调的响应函数
控制变量法
(Control Variates)
利用期望值已知的辅助变量修正估计量存在近似解析解的情况
重要性采样
(Importance Sampling)
在关注区域密集采样,并用似然比修正稀有事件・故障概率估计
分层采样
(Stratified Sampling)
将输入空间分层,在各层内采样不均匀的响应函数
🧑‍🎓

对偶变量法看起来很简单。几乎不增加成本就能减小方差吗?

🎓

如果响应函数对输入是单调的(例如:材料强度越高寿命越长),效果会很明显。当 $\mathbf{U}$ 产生较大的输出时,$1-\mathbf{U}$ 会产生较小的输出,因此取两者的平均值会抵消方差。但要注意,对于非单调函数,有时可能适得其反。

重要性采样的数学公式化

考虑故障概率 $P_f = P[g(\mathbf{X}) \leq 0]$ 的估计。在原始密度函数 $f_{\mathbf{X}}$ 下:

$$P_f = \int I[g(\mathbf{x}) \leq 0] \, f_{\mathbf{X}}(\mathbf{x}) \, d\mathbf{x} = \int I[g(\mathbf{x}) \leq 0] \frac{f_{\mathbf{X}}(\mathbf{x})}{h(\mathbf{x})} h(\mathbf{x}) \, d\mathbf{x}$$

从提议分布 $h(\mathbf{x})$ 中采样,并用似然比 $w(\mathbf{x}) = f_{\mathbf{X}}(\mathbf{x}) / h(\mathbf{x})$ 进行加权:

$$\hat{P}_f^{IS} = \frac{1}{N}\sum_{i=1}^{N} I[g(\mathbf{X}_i) \leq 0] \cdot w(\mathbf{X}_i), \quad \mathbf{X}_i \sim h$$

最优的提议分布是集中在故障区域的分布,通常采用在FORM/SORM设计点附近配置正态分布的方法。

实践指南

实践流程

🧑‍🎓

在实际用CAE分析运行蒙特卡洛方法时,步骤是怎样的?

🎓

基本流程如下:

  1. 识别不确定的输入参数 — 材料特性、形状尺寸、载荷条件等
  2. 设定各参数的概率分布 — 正态分布、对数正态分布、均匀分布等
  3. 制定采样计划 — 纯随机采样 or LHS,决定样本数 $N$
  4. 执行 $N$ 次CAE分析 — 批处理 or 并行执行
  5. 结果的统计处理 — 计算均值、标准差、直方图、CDF、置信区间
  6. 收敛性检查 — 通过绘制累积均值・累积标准差的图表来确认稳定性

输入分布的设定

🧑‍🎓

输入参数的概率分布是怎么决定的?可以随便设为正态分布吗?

🎓

这是最令人头疼的地方,“垃圾进,垃圾出(Garbage In, Garbage Out)”在输入分布设定上体现得最为关键。理想情况下,应根据制造商的品质数据或实验数据进行拟合,但在实践中,通常使用以下标准:

参数典型分布变异系数(CoV)的大致标准
杨氏模量正态分布2〜5%
屈服应力对数正态分布5〜10%
板厚・尺寸正态分布1〜3%(假设公差的1/6为$\sigma$)
疲劳强度对数正态 or 威布尔10〜30%
载荷幅值对数正态 or 冈贝尔10〜20%
温度条件正态分布 or 均
関連シミュレーター

この分野のインタラクティブシミュレーターで理論を体感しよう

不確かさ伝播シミュレーター

関連する分野

V&V構造解析流体解析
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
关于作者