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 知识体系框架
下面这张图,是我自己总结的灵敏度分析知识体系。你可以把它当作一个「决策地图」。
3.5 实战建议:我的「三步走」策略
说了这么多理论,最后给大家一个可以直接用的流程。这是我做复杂曲面优化时,总结出来的「三步走」策略。
- 第一步:全局筛选(Morris 方法)
- 目标:从30~50个变量中,快速剔除明显不重要的变量。
- 计算量:每个变量只需要几十次仿真。
- 输出:变量重要性排序,保留前10~15个。
- 第二步:全局精细分析(Sobol' 方法)
- 目标:对保留的10~15个变量,计算主效应和总效应。
- 计算量:需要数千次仿真,但值得。
- 输出:明确哪些变量有交互作用,哪些是独立影响。
- 第三步:局部梯度计算(有限差分法)
- 目标:为梯度优化算法提供准确的搜索方向。
- 计算量:每次迭代需要N+1次仿真。
- 输出:精确的梯度向量,指导优化收敛。
最后提醒一句:
灵敏度分析不是一次性工作。随着优化迭代,设计点会移动,变量的重要性也可能发生变化。我习惯每迭代10步左右,重新做一次局部灵敏度校验,确保梯度方向没有跑偏。