3、灵敏度分析基础:局部灵敏度与全局灵敏度的概念、一阶导数法、有限差分法

做复杂曲面优化,最头疼的问题是什么?我个人觉得,是变量太多。

几十个设计变量摆在你面前,哪个该保留,哪个该扔掉?这时候,灵敏度分析就是你的「照妖镜」。它能告诉你,每个变量对目标函数的影响到底有多大。

说白了,灵敏度分析就是算一个「导数」。但这个导数怎么算,算局部的还是算全局的,这里面的门道可不少。我刚开始做CAE那会儿,就吃过「局部灵敏度」的亏,差点把关键变量给筛掉了。

3.1 局部灵敏度:一阶导数法的「陷阱」

局部灵敏度,顾名思义,就是看某个设计变量在当前点附近发生微小变化时,目标函数的变化率。数学上,它就是偏导数。

核心公式:

Si = ∂f / ∂xi

其中 f 是目标函数,xi 是第 i 个设计变量。

这个公式看着简单,但有个致命问题:它只反映「当前点」的信息。如果你的优化问题是非线性的,换个点算,结果可能完全不一样。

一阶导数法的两种实现方式:

方法 原理 计算成本 精度
解析法 直接对目标函数求导 低(一次计算) 高(精确值)
有限差分法 用差分近似代替导数 高(N+1次计算) 中等(受步长影响)

解析法虽然好,但大多数工程问题,目标函数都是黑箱,根本拿不到显式表达式。所以,有限差分法成了工程界的「标配」。

3.1.1 有限差分法的步长选择

有限差分法看着简单,但步长选不好,结果就是灾难。我踩过这个坑,跟大家说说。

前向差分公式:

∂f/∂x ≈ (f(x + Δx) - f(x)) / Δx

中心差分公式(更推荐):

∂f/∂x ≈ (f(x + Δx) - f(x - Δx)) / (2 * Δx)

避坑指南:

  • 步长太大:截断误差大,结果失真。我曾经用1%的步长算一个薄壁结构的灵敏度,结果完全偏离物理规律。
  • 步长太小:舍入误差占主导,尤其当目标函数本身有数值噪声时。我记得有一次算气动优化,步长取到1e-6,结果灵敏度全是噪声。
  • 经验法则:对于大多数工程问题,步长取变量范围的0.1%~1%比较稳妥。如果条件允许,做个步长收敛性研究。

3.2 全局灵敏度:跳出「局部最优」的视野

局部灵敏度只盯着一个点看,但复杂曲面优化往往是全局问题。变量之间可能有交互作用,目标函数可能有多个极值点。这时候,全局灵敏度就派上用场了。

全局灵敏度分析的核心思想是:在整个设计空间内,评估每个变量对目标函数方差的贡献度。说白了,就是看哪个变量「折腾」得最厉害,对结果影响最大。

常用方法:

  • Sobol' 方法:基于方差分解,能计算主效应和总效应。我个人最常用这个方法,因为它能清晰区分「变量自身影响」和「变量交互影响」。
  • Morris 方法:一种筛选方法,计算成本低,适合变量特别多的情况(比如50个以上)。
  • 基于回归的方法:用响应面或代理模型来近似灵敏度,适合计算资源有限的情况。

我的经验:

如果变量少于20个,我建议直接用Sobol'方法。虽然计算量大(需要数千次仿真),但信息量最丰富。如果变量超过30个,先用Morris方法做一轮筛选,把不重要的变量剔除,再用Sobol'方法做精细分析。

3.3 局部 vs 全局:什么时候用哪个?

这个问题,很多新手会问。我的回答是:看你的优化阶段。

场景 推荐方法 原因
初步筛选变量 全局灵敏度(Morris) 快速剔除不敏感变量
局部精细优化 局部灵敏度(有限差分) 指导梯度下降方向
变量交互分析 全局灵敏度(Sobol') 识别耦合效应
梯度优化算法 局部灵敏度(解析法优先) 保证收敛速度

嗯,这里要注意:不要迷信任何一种方法。我见过有人只用局部灵敏度做全局优化,结果变量筛选完全错误。也见过有人只用全局灵敏度,结果在局部最优附近浪费了大量计算资源。

3.4 知识体系框架

下面这张图,是我自己总结的灵敏度分析知识体系。你可以把它当作一个「决策地图」。

灵敏度分析知识体系框架 灵敏度分析知识体系 灵敏度分析 局部灵敏度 全局灵敏度 解析法 有限差分法 Sobol' 方法 Morris 方法 适用:梯度优化 局部精细调整 适用:变量筛选 全局设计空间探索 核心建议 局部灵敏度用于「怎么走」,全局灵敏度用于「往哪走」 两者结合使用,才能避免「局部最优陷阱」和「变量误删」

3.5 实战建议:我的「三步走」策略

说了这么多理论,最后给大家一个可以直接用的流程。这是我做复杂曲面优化时,总结出来的「三步走」策略。

  1. 第一步:全局筛选(Morris 方法)
    • 目标:从30~50个变量中,快速剔除明显不重要的变量。
    • 计算量:每个变量只需要几十次仿真。
    • 输出:变量重要性排序,保留前10~15个。
  2. 第二步:全局精细分析(Sobol' 方法)
    • 目标:对保留的10~15个变量,计算主效应和总效应。
    • 计算量:需要数千次仿真,但值得。
    • 输出:明确哪些变量有交互作用,哪些是独立影响。
  3. 第三步:局部梯度计算(有限差分法)
    • 目标:为梯度优化算法提供准确的搜索方向。
    • 计算量:每次迭代需要N+1次仿真。
    • 输出:精确的梯度向量,指导优化收敛。

最后提醒一句:

灵敏度分析不是一次性工作。随着优化迭代,设计点会移动,变量的重要性也可能发生变化。我习惯每迭代10步左右,重新做一次局部灵敏度校验,确保梯度方向没有跑偏。