ASME V&V 20 验证度量

分类: V&V / ASME V&V | 统一版 2026-04-12
ASME V&V 20 validation metric framework - comparison error E versus validation uncertainty u_val diagram
ASME V&V 20 中的验证度量概念图 — 比较误差E与验证不确定性u_val的关系

ASME V&V 20 验证度量的理论基础

什么是验证度量

🧑‍🎓

老师,验证度量是用来计算什么的?模拟和实验是否一致,只要输出简单的误差%不就行了吗?

🎓

问得好。确实有很多人会说"模拟值和实验值的差异是多少%"就完事了。但这个方法不够严谨。为什么呢?因为实验数据和模拟计算都存在不确定性

比如,实验测得的应力是100 MPa,模拟结果是105 MPa。误差5%,好像挺接近的。但如果实验的测量精度是$\pm 8$ MPa,模拟的网格依赖性是$\pm 3$ MPa,那么这5 MPa的差异其实在不确定性范围内。换句话说,模拟和实验"是相容的"。

🧑‍🎓

我明白了…只看误差本身不够,还要考虑"这个误差的真实意义"。

🎓

正是这样。ASME V&V 20(《计算流体力学和传热的验证与验证标准》)就是为了建立这样的框架。验证度量就是在考虑了双方不确定性的前提下,定量评估模拟结果和实验数据的一致程度的指标。

比较误差 E 的定义

🧑‍🎓

具体怎么计算呢?

🎓

首先是比较误差 E(Comparison Error)。非常简单:

$$ E = S - D $$

其中$S$是模拟结果(Simulation),$D$是实验数据(experimental Data)。

🎓

这是带符号的差。如果$E > 0$表示模拟高估,$E < 0$表示模拟低估。当然,有时候也用相对误差$E/D$,但ASME V&V 20的基础框架主要用绝对值的$E$。

🧑‍🎓

我刚才说的,单看$E$不够吧?

🎓

正确。下一步就是计算验证不确定性$u_\text{val}$,然后把$E$和$u_\text{val}$进行比较。

验证不确定性 $u_\text{val}$

🧑‍🎓

验证不确定性具体包含哪些不确定性呢?

🎓

ASME V&V 20把不确定性分为三大类:

  • $u_\text{num}$(数值不确定性):网格依赖性、时间步长依赖性、迭代收敛残差等,来自离散化的不确定性。通常用GCI(网格收敛指标)来评估。
  • $u_\text{input}$(输入参数不确定性):材料物性值、边界条件、初始条件的测量精度或变异。比如杨氏模量是$210 \pm 5$ GPa,那$\pm 5$ GPa就是输入不确定性。
  • $u_\text{exp}$(实验不确定性):传感器精度、测量位置偏差、环境波动等实验侧的不确定性。

假设它们相互独立,则用RSS(平方和的平方根)合并:

$$ u_\text{val} = \sqrt{u_\text{num}^2 + u_\text{input}^2 + u_\text{exp}^2} $$
🧑‍🎓

这和误差传递时用的公式一样啊。

🎓

完全一样。这就是GUM(《测量不确定性的表示与评估指南》)的思路。不过有两个要点。第一,如果不确定性源之间存在相关性,还要加入相关项。第二,这里的不确定性通常是指标准不确定性($k=1$,约68%置信区间),但有时也用95%置信区间($k=2$),一定要在报告里明确说明。

判定基准:$|E|$ vs $u_\text{val}$

🧑‍🎓

$E$和$u_\text{val}$有了,怎么判断"合格"或"不合格"呢?

🎓

很简单。ASME V&V 20的基本思路是这样的:

  • $|E| \leq u_\text{val}$ 的情况:比较误差在不确定性范围内。此时无法区分模拟和实验的差异是来自模型误差还是不确定性。判定为验证成功。
  • $|E| > u_\text{val}$ 的情况:存在不能由不确定性解释的差异。这表明模型误差(model form error)存在。需要改进模型。
🧑‍🎓

等等,如果不确定性很大,那什么都能"合格"了吧?

🎓

反应敏锐!正是关键点。$|E| \leq u_\text{val}$不是说"模型正确",而是"在现有不确定性水平下,无法检出模型误差"

所以,验证的质量取决于$u_\text{val}$的大小。要得到好的验证,就要用更精密的实验、更细密的网格、更精准的物性值,把不确定性压低。这才是V&V的本质。

面积度量(Area Metric)

🧑‍🎓

$E$和$u_\text{val}$的比较是针对单一点的,对吧。如果响应是分布形式呢?比如温度分布?

🎓

好问题。这种情况下用面积度量(Area Validation Metric)。Ferson等人在2008年提出的方法,思路是比较模拟和实验的累积分布函数(CDF)。

$$ d_\text{area} = \int_{-\infty}^{\infty} |F_S(y) - F_D(y)| \, dy $$

这里$F_S(y)$是模拟结果的CDF,$F_D(y)$是实验数据的CDF。

🎓

$d_\text{area}$是非负值,当两个CDF完全重合时为0。优点是:

  • 反映分布特征(不仅是平均值,还包括散布和偏度)
  • 可以把多个响应量合并成一个数字
  • 容易设定阈值(比如$d_\text{area} < 0.1$为合格)

例如汽车碰撞测试时,可以把加速度时间历程看作一批样本,作CDF比较,用面积度量来统一评估。

🧑‍🎓

CDF的面积差,比单点比较能更全面地看到问题呀。

u-pooling法

🧑‍🎓

验证点有很多个怎么办——比如有10个测点或5个工况——要怎么统一评估呢?

🎓

这就是u-pooling法(Ferson & Oberkampf, 2009)的用处。思路是:

  1. 对每个验证点$i$,根据实验数据$D_i$的分布构造CDF $F_{D_i}$
  2. 看模拟值$S_i$在这个CDF上的位置:$u_i = F_{D_i}(S_i)$
  3. 如果模型完美,这些$u_i$应该服从$[0, 1]$的均匀分布
  4. 把所有$\{u_1, u_2, \ldots, u_n\}$的CDF与标准均匀分布比较
$$ u_i = F_{D_i}(S_i), \quad i = 1, 2, \ldots, n $$
🎓

如果$u_i$明显偏离均匀分布,说明模型有系统性的偏差。比如$u_i$都集中在0附近,就是"模拟系统性地低估";都集中在1附近,就是"系统性地高估"。

实际操作中,一般用Kolmogorov-Smirnov检定(KS检定)或Anderson-Darling检定来检验与均匀分布的偏差。

🧑‍🎓

这样就能把各种条件下的结果统一起来,看"这个模型总体怎么样",很实用。

ASME V&V 20 验证度量的数值计算方法

不确定性的定量化方法

🧑‍🎓

理论明白了。但实际上,$u_\text{num}$和$u_\text{input}$这些值怎么算出来呢?有标准步骤吗?

🎓

$u_\text{num}$最常用的方法是Richardson外推法 + GCI。步骤是:

  1. 用3种或以上网格密度(粗、中、细)解同一问题,代表网格尺寸分别为$h_1 > h_2 > h_3$
  2. 设定细化比 $r = h_1 / h_2$(通常$r \approx 1.3\sim2.0$)
  3. 计算表观收敛阶数$p$:
$$ p = \frac{\ln\!\left(\frac{f_1 - f_2}{f_2 - f_3}\right)}{\ln(r)} $$
🎓

其中$f_1, f_2, f_3$分别是粗、中、细网格的解。然后计算GCI:

$$ \text{GCI}_\text{fine} = \frac{F_s}{r^p - 1} \left| \frac{f_2 - f_3}{f_3} \right| $$

安全系数$F_s = 1.25$(三层外推)。这个$\text{GCI}_\text{fine}$就是$u_\text{num}$的估计。

🧑‍🎓

用三种网格的结果推断"真解离得有多远"是吧。

蒙特卡洛法的结合

🧑‍🎓

$u_\text{input}$呢?输入参数有十几个、几十个的情况,逐一求灵敏系数太麻烦了…

🎓

这时就用蒙特卡洛法。思路是:

  1. 给每个输入参数设定概率分布(正态分布、均匀分布等)
  2. 用Latin Hypercube Sampling(LHS)等方法生成$N$个样本集($N = 100 \sim 10{,}000$)
  3. 每个样本跑一遍模拟,得到$N$个响应值
  4. 响应的标准差就是$u_\text{input}$

问题是,如果一次模拟要好几小时,跑1000次就太费时了。实务中通常先建立代理模型(响应面法、Kriging、多项式混沌展开PCE),再用代理跑蒙特卡洛,这样成本可以降下来。

灵敏度分析的贡献分解

🧑‍🎓

$u_\text{val}$太大,用不了,这时怎么办?要不要全部改进?

🎓

这就要用不确定性预算(Uncertainty Budget)。分解$u_\text{val}^2 = u_\text{num}^2 + u_\text{input}^2 + u_\text{exp}^2$中各项的贡献比例。

例如,某工程中$u_\text{val} = 12.5$ MPa,分解如下:

不确定性成分值 [MPa]二乘贡献率改进措施
$u_\text{num}$3.26.6%网格细分化
$u_\text{input}$11.077.4%提升材料试验精度
$u_\text{exp}$5.016.0%校准测量系统
$u_\text{val}$(合成)12.5100%
🎓

看这个表,$u_\text{input}$占77.4%主导。那就没必要把网格无限细化,而应该集中精力提高材料物性值的精度。这样做预算管理才是高效的。

ASME V&V 20 验证度量的实务应用

验证计划的制定

🧑‍🎓

实际做验证时,第一步是什么?直接算$E = S - D$吗?

🎓

那就错了。要先制定验证计划。ASME V&V 20推荐用PIRT(现象识别排序表)来指导,步骤是:

  1. 明确SRQ(系统响应量):要比较什么?最大应力?温度分布?流速剖面?不能模糊地说"结果是否吻合"。
  2. 设定精度要求$\delta_\text{req}$:能接受多大的误差?没有这个指标,就无法判断"合格"。
  3. 制定实验方案:在哪些参数范围、用什么方法、测多少次。要保证不确定性足够小。
  4. 先完成代码验证(Verification):在做验证前,代码的数值精度必须过关。有数值bug就验证不了。
🧑‍🎓

所以不是直接拿结果对比,而要事前规划好。

实验数据的质量管理

🧑‍🎓

实验的不确定性$u_\text{exp}$,就直接问实验人员"给个不确定性"吗?

🎓

理想情况是这样,但现实常常不行。你得自己确保数据品质。实务中要做的是:

  • 重复测量:最少3次,最好5次以上。从标准差评估A类不确定性。
  • 确认系统误差:查传感器的校准证书,确认精度等级。位置精度(比如应变片贴装位置偏差)也算B类不确定性。
  • 记录测量条件:温度、湿度、电源噪声等,都要写下来。这些会影响模拟的边界条件设定。
  • 处理离群值:用Chauvenet准则或Grubbs检定来客观判定离群值。不能凭直觉"这个数据看起来很奇怪,删了"。
🧑‍🎓

实务中只有一次实验数据的情况也多,那怎么办?

🎓

那就没办法估A类不确定性,只能靠B类(校准资料、公称精度等)。$u_\text{exp}$就要设得保守一些。这样的话,$u_\text{val}$会偏大,验证的"分辨率"就下降了。这是为什么实验计划时一定要确保能重复测量的原因。

报告中应包含的内容

🧑‍🎓

验证报告里一定要写什么?

🎓

按照ASME V&V 20的要求,必须包括:

  1. SRQ的定义和精度要求$\delta_\text{req}$
  2. 比较误差$E = S - D$的数值(多个测点就列表)
  3. 不确定性的分项:$u_\text{num}$、$u_\text{input}$、$u_\text{exp}$各多少,怎么算的
  4. 验证不确定性$u_\text{val}$及其信赖度($k=1$还是$k=2$)
  5. 判定结论:$|E| \leq u_\text{val}$吗?还是用了面积度量或u-pooling
  6. 验证的适用范围:这个结论对哪些参数范围、工况有效。外推到其他条件需要另外评估。

ASME V&V 20 验证度量的ASME V&V 20 验证度量的软件比较

主要工具的V&V功能

🧑‍🎓

验证度量的计算,商用软件里有吗?还是全靠手工?

🎓

2020年代,主要求解器开始集成V&V支持功能,但没有"一键完成"的按钮。现状整理如下:

工具GCI / 网格收敛不确定性传播面积度量说明
Ansys(Workbench)Design Exploration支持Monte Carlo / PCE支持需外部工具可构建V&V 20兼容工作流
Abaqus / Isight脚本实现Isight DOE/Monte Carlo需外部工具Python脚本功能强大
COMSOL参数扫描支持Uncertainty Quantification Module需外部工具MATLAB LiveLink可扩展
Star-CCM+Design Manager支持Monte Carlo支持需外部工具后处理可定义自定义度量
Dakota(Sandia)支持PCE / SC / Monte Carlo支持开源UQ工具,通用求解器接口
🧑‍🎓

Dakota是什么?

🎓

Sandia国家实验室开发的开源优化和不确定性量化(UQ)框架。可以作为任意模拟代码的包装层,统一接口支持LHS、PCE、贝叶斯推断等。如果要完整实施ASME V&V 20框架,Dakota是最直接的选择之一。

开源中的实现

🧑‍🎓

想用Python自己写验证度量的计算,可以吗?

🎓

完全可以。其实代码相当简洁。核心部分大概是这样:

import numpy as np
from scipy import stats

def validation_comparison(S, D, u_num, u_input, u_exp):
    """ASME V&V 20 验证比较"""
    E = S - D                                          # 比较误差
    u_val = np.sqrt(u_num**2 + u_input**2 + u_exp**2)  # 验证不确定性
    passed = abs(E) <= u_val
    return E, u_val, passed

def area_metric(sim_samples, exp_samples, n_bins=200):
    """面积度量(CDF差的面积)"""
    all_vals = np.concatenate([sim_samples, exp_samples])
    y_grid = np.linspace(all_vals.min(), all_vals.max(), n_bins)
    cdf_sim = np.array([np.mean(sim_samples <= y) for y in y_grid])
    cdf_exp = np.array([np.mean(exp_samples <= y) for y in y_grid])
    dy = np.diff(y_grid)
    d_area = np.sum(np.abs(cdf_sim[:-1] - cdf_exp[:-1]) * dy)
    return d_area

def u_pooling(S_values, D_distributions):
    """u-pooling法:各点的u值集约"""
    u_values = []
    for S_i, (D_mean, D_std) in zip(S_values, D_distributions):
        u_i = stats.norm.cdf(S_i, loc=D_mean, scale=D_std)
        u_values.append(u_i)
    # KS检定与均匀分布的比较
    ks_stat, p_value = stats.kstest(u_values, 'uniform')
    return np.array(u_values), ks_stat, p_value
🧑‍🎓

想象中要复杂得多,其实有scipy就差不多了呢。

ASME V&V 20 验证度量的前沿研究

贝叶斯估计方法

🧑‍🎓

最近听说验证也用贝叶斯?那是什么?

🎓

传统的ASME V&V 20是频率学派的方法,但近年用贝叶斯推断来做验证也很流行。思路是把模型参数本身看作随机变量,用贝叶斯定理更新:

$$ P(\boldsymbol{\theta} | \mathbf{D}) = \frac{P(\mathbf{D} | \boldsymbol{\theta}) \cdot P(\boldsymbol{\theta})}{P(\mathbf{D})} $$
🎓

其中$\boldsymbol{\theta}$是模型参数,$\mathbf{D}$是实验数据。优点是:

  • 纳入先验知识:用文献值或过往实验作$P(\boldsymbol{\theta})$
  • 数据增量学习:新的实验可以逐步更新后验分布
  • 模型比较:用贝叶斯因子量化"哪个模型对数据的解释力更强"

NASA和Sandia等都在研究"贝叶斯V&V",特别在数据稀少条件下很有用。

机器学习与代理模型

🧑‍🎓

蒙特卡洛法要跑数千遍模拟,这太费时。AI能解决吗?

🎓

这正是最热的研究方向。用代理模型(surrogate model)来加速:

  • 高斯过程(Kriging):少量样本就能建立响应面,还能同时输出预测的不确定性。很适合参数不多的情况。
  • 多项式混沌展开(PCE):把输入的概率分布展开成多项式。解析地计算矩(平均值、方差),比蒙特卡洛高效得多。
  • 深度神经网络:对高维参数空间很能伸缩。但是黑盒,不好解释物理意义。

要点是,代理模型自己有近似误差,也要纳入$u_\text{input}$的评估中。不能因为用了AI就忽视这个误差源。

ASME V&V 20 验证度量的故障排除

常见失败模式

🧑‍🎓

验证实施时容易犯什么错?前辈说"只看度量数字别高兴太早",怎么回事?

🎓

实务中最常见的陷阱:

1. 忽视不确定性,直接看误差百分比

  • 症状:"误差3%,合格"或"误差8%,不合格",完全不考虑$u_\text{val}$
  • 对策:必须评估$u_\text{val}$,拿$|E|$和它比。3%的误差若$u_\text{val} = 1\%$就失败;8%的误差若$u_\text{val} = 10\%$就成功。

2. 漏掉网格收敛确认

  • 症状:"网格够细了吧"凭感觉,不算GCI
  • 对策:必须用3种以上网格跑GCI。主观判断"足够细"是不可靠的。

3. 外推到验证范围之外

  • 症状:在流速10 m/s验证,用到流速100 m/s的工况
  • 对策:验证只对已验证范围有效。超出范围需要PCMM(预测能力成熟度模型)等额外评估。

4. 实验条件与模型不符

  • 症状:忽视实验的几何公差、固定方式细节,模拟用"理想"模型
  • 对策:从实验现场照片和图纸确认所有细节,模拟要忠实再现。"理想固定"和"螺栓连接"完全不同。

度量不佳时的对策

🧑‍🎓

$|E| > u_\text{val}$了,该咋办?

🎓

别慌。有系统的诊断方法:

  1. 先看不确定性预算:哪个$u$项支配$u_\text{val}$?$u_\text{num}$支配说网格还是粗;$u_\text{input}$支配说输入参数精度要提高。
  2. 分析$E$的符号模式:全是$E > 0$(系统性高估)?可能材料物性或边界条件有偏差。随机分布?物理模型有问题。
  3. 做灵敏度分析:哪个输入参数对$E$影响最大?用Sobol指标或其他全局灵敏度方法。
  4. 复查物理模型:湍流模型选对了?接触条件对吗?材料构成关系合理吗?
  5. 再审视实验数据:虽然少见,但实验也会出问题。传感器故障?数据记录时间错位?缩放错误?
🧑‍🎓

逐项排查,"一次只改一个"是吧。

🎓

完全同意。还有一个重要的心态:$|E| > u_\text{val}$不一定是"失败"。它说明了模型的边界。"这个模型在这个工况超出不确定性范围"这本身就是V&V的成果。我们的工作是定义这个边界,然后决策"安全系数怎么开"或"这个工况不能用这个模型"。这才是V&V的真目的。

相关模拟器

用这个领域的交互式模拟器来体验理论吧

模拟器列表

相关领域

V&V结构解析流体解析热解析
评价这篇文章
谢谢你的反馈!
有帮助
想看
更多
报告
错误
有帮助
0
想看更多
0
报告错误
0
由NovaSolver贡献者撰写
匿名工程师与AI — 网站地图
查看作者信息