第三十九篇:不确定性量化与可靠性分析

摘要

在电磁仿真工程实践中,输入参数(材料属性、几何尺寸、工作条件等)往往存在不确定性,这些不确定性会传播到仿真结果中,影响设计的可靠性和稳健性。本主题系统介绍不确定性量化(Uncertainty Quantification, UQ)与可靠性分析的理论基础和方法体系,包括概率统计基础、蒙特卡洛模拟、代理模型方法、敏感性分析以及可靠性评估方法。通过Python实现典型电磁问题的不确定性分析,包括微带线参数不确定性传播、天线性能稳健性评估和电磁兼容可靠性分析,帮助读者掌握在实际工程中处理不确定性的系统化方法。

关键词

不确定性量化,可靠性分析,蒙特卡洛模拟,代理模型,敏感性分析,稳健设计,电磁仿真,概率方法


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1. 不确定性量化基础理论

1.1 不确定性的来源与分类

在电磁仿真中,不确定性主要来源于以下几个方面:

几何不确定性:制造公差导致的结构尺寸偏差。例如,印刷电路板(PCB)的线宽、线间距由于蚀刻工艺的精度限制,通常存在±5%~±10%的偏差。天线结构的加工误差会影响其谐振频率和辐射特性。

材料不确定性:材料电磁参数(介电常数ε、磁导率μ、电导率σ)的批次差异和温度依赖性。FR-4基板的介电常数在4.2~4.6范围内变化,且随频率和温度变化。

边界条件不确定性:工作环境的变化,如温度、湿度、外部电磁干扰等。这些环境因素会影响材料的电磁特性和系统的整体性能。

模型不确定性:仿真模型本身的简化假设、网格离散误差、数值算法误差等。模型不确定性通常难以量化,但可以通过验证和确认(V&V)过程进行评估。

根据数学描述方式,不确定性可分为两类:

** aleatory不确定性(随机不确定性)**:固有的、不可减少的随机性,如量子效应、热噪声等。这类不确定性通常用概率分布描述。

** epistemic不确定性(认知不确定性)**:由于知识不足或信息缺乏导致的不确定性,如模型参数的不精确估计。这类不确定性可以用区间分析、模糊理论或证据理论描述。

1.2 概率统计基础

1.2.1 随机变量与概率分布

随机变量XXX是定义在概率空间上的可测函数。对于连续随机变量,其概率分布由概率密度函数(PDF)fX(x)f_X(x)fX(x)描述:

P(a≤X≤b)=∫abfX(x)dxP(a \leq X \leq b) = \int_a^b f_X(x) dxP(aXb)=abfX(x)dx

累积分布函数(CDF)定义为:

FX(x)=P(X≤x)=∫−∞xfX(t)dtF_X(x) = P(X \leq x) = \int_{-\infty}^x f_X(t) dtFX(x)=P(Xx)=xfX(t)dt

电磁仿真中常用的概率分布包括:

正态分布(高斯分布)

fX(x)=1σ2πexp⁡(−(x−μ)22σ2)f_X(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)fX(x)=σ2π 1exp(2σ2(xμ)2)

其中μ\muμ为均值,σ\sigmaσ为标准差。正态分布适用于描述许多自然现象的随机波动,如制造公差、测量误差等。

均匀分布

fX(x)={1b−a,a≤x≤b0,其他f_X(x) = \begin{cases} \frac{1}{b-a}, & a \leq x \leq b \\ 0, & \text{其他} \end{cases}fX(x)={ba1,0,axb其他

当只知道参数的变化范围而不知其分布形态时,常采用均匀分布作为保守估计。

对数正态分布

ln⁡X\ln XlnX服从正态分布,则XXX服从对数正态分布。该分布适用于描述非负参数(如材料损耗、粗糙度等),且能处理较大的变化范围。

威布尔分布

fX(x)=kλ(xλ)k−1exp⁡(−(xλ)k),x≥0f_X(x) = \frac{k}{\lambda}\left(\frac{x}{\lambda}\right)^{k-1} \exp\left(-\left(\frac{x}{\lambda}\right)^k\right), \quad x \geq 0fX(x)=λk(λx)k1exp((λx)k),x0

威布尔分布常用于可靠性分析中描述失效时间,也适用于描述材料强度和疲劳寿命。

1.2.2 随机向量的统计特性

对于nnn维随机向量X=[X1,X2,...,Xn]T\mathbf{X} = [X_1, X_2, ..., X_n]^TX=[X1,X2,...,Xn]T,其联合概率密度函数为fX(x)f_{\mathbf{X}}(\mathbf{x})fX(x)

均值向量

μ=E[X]=[μ1,μ2,...,μn]T\boldsymbol{\mu} = E[\mathbf{X}] = [\mu_1, \mu_2, ..., \mu_n]^Tμ=E[X]=[μ1,μ2,...,μn]T

其中μi=E[Xi]\mu_i = E[X_i]μi=E[Xi]为第iii个分量的均值。

协方差矩阵

C=E[(X−μ)(X−μ)T]\mathbf{C} = E[(\mathbf{X}-\boldsymbol{\mu})(\mathbf{X}-\boldsymbol{\mu})^T]C=E[(Xμ)(Xμ)T]

协方差矩阵的对角元素Cii=σi2C_{ii} = \sigma_i^2Cii=σi2为各分量的方差,非对角元素Cij=Cov(Xi,Xj)C_{ij} = \text{Cov}(X_i, X_j)Cij=Cov(Xi,Xj)为协方差,反映变量间的相关性。

相关系数矩阵

Rij=Cijσiσj\mathbf{R}_{ij} = \frac{C_{ij}}{\sigma_i \sigma_j}Rij=σiσjCij

相关系数ρij∈[−1,1]\rho_{ij} \in [-1, 1]ρij[1,1]ρij=0\rho_{ij} = 0ρij=0表示不相关,ρij=±1\rho_{ij} = \pm 1ρij=±1表示完全线性相关。

对于相关的随机变量,可以通过Cholesky分解或Nataf变换将其转换为独立的标准正态变量,便于后续分析。

1.3 不确定性传播理论

1.3.1 不确定性传播问题定义

设电磁仿真模型为:

Y=g(X)Y = g(\mathbf{X})Y=g(X)

其中X=[X1,X2,...,Xn]T\mathbf{X} = [X_1, X_2, ..., X_n]^TX=[X1,X2,...,Xn]T为输入随机变量向量,YYY为输出响应(如S参数、增益、RCS等)。不确定性传播问题即:已知X\mathbf{X}X的概率分布,求YYY的统计特性(均值、方差、概率分布等)。

1.3.2 一阶泰勒展开方法(FOSM)

对于小不确定性情况,可在均值点μ\boldsymbol{\mu}μ处对g(X)g(\mathbf{X})g(X)进行一阶泰勒展开:

Y≈g(μ)+∑i=1n∂g∂Xi∣μ(Xi−μi)Y \approx g(\boldsymbol{\mu}) + \sum_{i=1}^n \frac{\partial g}{\partial X_i}\bigg|_{\boldsymbol{\mu}} (X_i - \mu_i)Yg(μ)+i=1nXig μ(Xiμi)

由此可得输出均值和方差的近似:

μY≈g(μ)\mu_Y \approx g(\boldsymbol{\mu})μYg(μ)

σY2≈∑i=1n∑j=1n∂g∂Xi∂g∂XjCij\sigma_Y^2 \approx \sum_{i=1}^n \sum_{j=1}^n \frac{\partial g}{\partial X_i}\frac{\partial g}{\partial X_j} C_{ij}σY2i=1nj=1nXigXjgCij

对于独立变量,简化为:

σY2≈∑i=1n(∂g∂Xi)2σi2\sigma_Y^2 \approx \sum_{i=1}^n \left(\frac{\partial g}{\partial X_i}\right)^2 \sigma_i^2σY2i=1n(Xig)2σi2

FOSM方法计算简单,但对于非线性程度高的模型或大的输入不确定性,精度较差。

1.3.3 高阶展开方法

二阶泰勒展开

Y≈g(μ)+∑i=1n∂g∂Xi(Xi−μi)+12∑i=1n∑j=1n∂2g∂Xi∂Xj(Xi−μi)(Xj−μj)Y \approx g(\boldsymbol{\mu}) + \sum_{i=1}^n \frac{\partial g}{\partial X_i} (X_i - \mu_i) + \frac{1}{2}\sum_{i=1}^n\sum_{j=1}^n \frac{\partial^2 g}{\partial X_i \partial X_j} (X_i - \mu_i)(X_j - \mu_j)Yg(μ)+i=1nXig(Xiμi)+21i=1nj=1nXiXj2g(Xiμi)(Xjμj)

二阶展开可以捕捉模型的曲率效应,提高精度,但需要计算Hessian矩阵,计算量较大。

摄动法:将随机变量表示为均值加摄动:Xi=μi+δXiX_i = \mu_i + \delta X_iXi=μi+δXi,通过逐阶求解摄动方程获得输出的统计特性。


2. 蒙特卡洛模拟方法

2.1 蒙特卡洛方法原理

蒙特卡洛(Monte Carlo, MC)方法是一种基于随机采样的统计模拟方法,通过大量重复试验来估计数学问题的数值解。

2.1.1 基本算法流程

对于不确定性传播问题Y=g(X)Y = g(\mathbf{X})Y=g(X),MC方法的基本步骤为:

  1. 随机抽样:根据输入变量X\mathbf{X}X的联合概率分布,生成NNN组独立同分布的样本{x(1),x(2),...,x(N)}\{\mathbf{x}^{(1)}, \mathbf{x}^{(2)}, ..., \mathbf{x}^{(N)}\}{x(1),x(2),...,x(N)}

  2. 确定性计算:对每个样本x(i)\mathbf{x}^{(i)}x(i),计算对应的输出y(i)=g(x(i))y^{(i)} = g(\mathbf{x}^{(i)})y(i)=g(x(i))

  3. 统计分析:基于输出样本{y(i)}\{y^{(i)}\}{y(i)}估计输出的统计特性:

    • 样本均值:yˉ=1N∑i=1Ny(i)\bar{y} = \frac{1}{N}\sum_{i=1}^N y^{(i)}yˉ=N1i=1Ny(i)
    • 样本方差:sY2=1N−1∑i=1N(y(i)−yˉ)2s_Y^2 = \frac{1}{N-1}\sum_{i=1}^N (y^{(i)} - \bar{y})^2sY2=N11i=1N(y(i)yˉ)2
    • 经验CDF:F^Y(y)=1N∑i=1NI(y(i)≤y)\hat{F}_Y(y) = \frac{1}{N}\sum_{i=1}^N I(y^{(i)} \leq y)F^Y(y)=N1i=1NI(y(i)y)
2.1.2 收敛性与误差分析

根据大数定律,当N→∞N \to \inftyN时,样本均值几乎必然收敛于真实均值:

yˉ→a.s.μYasN→∞\bar{y} \xrightarrow{\text{a.s.}} \mu_Y \quad \text{as} \quad N \to \inftyyˉa.s. μYasN

根据中心极限定理,估计误差服从正态分布:

N(yˉ−μY)→dN(0,σY2)\sqrt{N}(\bar{y} - \mu_Y) \xrightarrow{d} \mathcal{N}(0, \sigma_Y^2)N (yˉμY)d N(0,σY2)

MC方法的均方根误差(RMSE)为:

RMSE=σYN\text{RMSE} = \frac{\sigma_Y}{\sqrt{N}}RMSE=N σY

这意味着要达到ϵ\epsilonϵ的精度,需要N∝ϵ−2N \propto \epsilon^{-2}Nϵ2的样本量。MC方法的收敛速度O(N−1/2)O(N^{-1/2})O(N1/2)与问题维度无关,这是其相对于确定性方法的主要优势。

2.1.3 方差缩减技术

为提高MC方法的效率,发展了多种方差缩减技术:

对偶抽样(Antithetic Variates):对于每个随机样本u\mathbf{u}u,同时使用1−u1-\mathbf{u}1u,利用负相关减小方差。

重要性抽样(Importance Sampling):从偏向"重要区域"的偏置分布中抽样,通过权重修正估计无偏结果。在可靠性分析中尤为重要。

拉丁超立方抽样(Latin Hypercube Sampling, LHS):将每个变量的分布划分为NNN个等概率区间,在每个区间中随机抽样,保证样本均匀覆盖分布空间。LHS可以显著减少达到相同精度所需的样本量。

拟蒙特卡洛(Quasi-Monte Carlo, QMC):使用低差异序列(如Sobol序列、Halton序列)代替伪随机数,获得更均匀的样本分布,收敛速度可达O(N−1)O(N^{-1})O(N1)

2.2 随机抽样方法

2.2.1 逆变换抽样

U∼Uniform(0,1)U \sim \text{Uniform}(0, 1)UUniform(0,1)FX(x)F_X(x)FX(x)为目标分布的CDF。则:

X=FX−1(U)X = F_X^{-1}(U)X=FX1(U)

服从目标分布。逆变换抽样适用于CDF易求逆的分布(如指数分布、威布尔分布)。

2.2.2 接受-拒绝抽样

当目标PDFfX(x)f_X(x)fX(x)难以直接抽样时,选取提议分布q(x)q(x)q(x)满足Mq(x)≥fX(x)M q(x) \geq f_X(x)Mq(x)fX(x),算法步骤为:

  1. q(x)q(x)q(x)生成候选样本x∗x^*x
  2. Uniform(0,1)\text{Uniform}(0, 1)Uniform(0,1)生成uuu
  3. u≤fX(x∗)/(Mq(x∗))u \leq f_X(x^*) / (M q(x^*))ufX(x)/(Mq(x)),接受x∗x^*x;否则拒绝并重复

接受-拒绝抽样适用于复杂分布,但效率取决于MMM的大小。

2.2.3 相关随机变量的生成

对于具有相关结构的高斯随机向量,可通过Cholesky分解生成:

Z∼N(0,I)\mathbf{Z} \sim \mathcal{N}(\mathbf{0}, \mathbf{I})ZN(0,I)为标准正态向量,协方差矩阵C=LLT\mathbf{C} = \mathbf{L}\mathbf{L}^TC=LLT(Cholesky分解),则:

X=μ+LZ∼N(μ,C)\mathbf{X} = \boldsymbol{\mu} + \mathbf{L}\mathbf{Z} \sim \mathcal{N}(\boldsymbol{\mu}, \mathbf{C})X=μ+LZN(μ,C)

对于非高斯相关变量,Nataf变换提供了一种基于高斯Copula的建模方法。

2.3 电磁仿真中的MC应用

2.3.1 微带线参数不确定性分析

考虑微带线的特性阻抗公式:

Z0=87εr+1.41ln⁡(5.98h0.8w+t)Z_0 = \frac{87}{\sqrt{\varepsilon_r + 1.41}} \ln\left(\frac{5.98h}{0.8w + t}\right)Z0=εr+1.41 87ln(0.8w+t5.98h)

其中εr\varepsilon_rεr为基板介电常数,hhh为基板厚度,www为线宽,ttt为铜箔厚度。这些参数存在制造公差,通过MC模拟可以评估特性阻抗的分布。

2.3.2 天线性能稳健性评估

天线的谐振频率frf_rfr、增益GGG、带宽BWBWBW等性能指标受几何参数和材料参数影响。MC模拟可以:

  • 评估性能指标的均值、方差和置信区间
  • 识别对性能影响最大的敏感参数
  • 评估设计满足规格要求的概率
2.3.3 电磁兼容可靠性分析

在电磁兼容(EMC)设计中,需要确保设备在各种工况下的辐射发射和抗扰度满足标准要求。MC模拟可以考虑:

  • 电缆长度、布局的不确定性
  • 接地阻抗的变化
  • 屏蔽效能的波动
  • 评估超标风险和裕量

3. 代理模型与降阶方法

3.1 代理模型概述

代理模型(Surrogate Model)或元模型(Metamodel)是一种计算成本低廉的近似模型,用于替代复杂的高保真仿真模型。

3.1.1 代理模型的优势

在不确定性量化中,代理模型的主要优势包括:

  1. 计算效率:代理模型的评估成本远低于原始仿真,使得大规模MC模拟成为可能
  2. 光滑性:代理模型通常具有更好的数学性质(连续可微),便于优化和敏感性分析
  3. 降维:通过识别重要变量,实现问题的降维
  4. 可视化:低维代理模型便于可视化分析
3.1.2 代理模型构建流程
  1. 试验设计(Design of Experiments, DoE):确定样本点的分布策略
  2. 高保真计算:在样本点上运行原始仿真获取响应
  3. 模型拟合:基于样本数据构建代理模型
  4. 模型验证:评估代理模型的精度和泛化能力

3.2 多项式混沌展开

3.2.1 广义多项式混沌

多项式混沌展开(Polynomial Chaos Expansion, PCE)将随机输出表示为随机输入的正交多项式级数:

Y(ξ)=∑αcαΨα(ξ)Y(\boldsymbol{\xi}) = \sum_{\boldsymbol{\alpha}} c_{\boldsymbol{\alpha}} \Psi_{\boldsymbol{\alpha}}(\boldsymbol{\xi})Y(ξ)=αcαΨα(ξ)

其中ξ\boldsymbol{\xi}ξ为标准随机变量(通常为N(0,1)\mathcal{N}(0,1)N(0,1)Uniform(−1,1)\text{Uniform}(-1,1)Uniform(1,1)),Ψα\Psi_{\boldsymbol{\alpha}}Ψα为多变量正交多项式,cαc_{\boldsymbol{\alpha}}cα为展开系数。

正交多项式的选择取决于输入分布类型(Wiener-Askey方案):

输入分布 正交多项式 支撑集
高斯分布 Hermite (−∞,∞)(-\infty, \infty)(,)
伽马分布 Laguerre [0,∞)[0, \infty)[0,)
贝塔分布 Jacobi [a,b][a, b][a,b]
均匀分布 Legendre [−1,1][-1, 1][1,1]
3.2.2 展开系数的计算

投影法:利用正交性

cα=E[YΨα]E[Ψα2]c_{\boldsymbol{\alpha}} = \frac{E[Y \Psi_{\boldsymbol{\alpha}}]}{E[\Psi_{\boldsymbol{\alpha}}^2]}cα=E[Ψα2]E[YΨα]

通过高斯求积或MC积分计算分子。

回归法:在样本点上最小二乘拟合

min⁡c∑i=1N(y(i)−∑αcαΨα(ξ(i)))2\min_{\mathbf{c}} \sum_{i=1}^N \left(y^{(i)} - \sum_{\boldsymbol{\alpha}} c_{\boldsymbol{\alpha}} \Psi_{\boldsymbol{\alpha}}(\boldsymbol{\xi}^{(i)})\right)^2cmini=1N(y(i)αcαΨα(ξ(i)))2

回归法更灵活,适用于非侵入式(non-intrusive)实现。

3.2.3 统计矩的解析计算

PCE的一个重要优势是可以直接解析计算统计矩:

均值μY=c0\mu_Y = c_{\mathbf{0}}μY=c0(零阶系数)

方差σY2=∑α≠0cα2E[Ψα2]\sigma_Y^2 = \sum_{\boldsymbol{\alpha} \neq \mathbf{0}} c_{\boldsymbol{\alpha}}^2 E[\Psi_{\boldsymbol{\alpha}}^2]σY2=α=0cα2E[Ψα2]

高阶矩:类似地,三阶、四阶矩也可由系数解析表达。

3.3 Kriging代理模型

3.3.1 Kriging基本原理

Kriging(高斯过程回归)假设响应是一个高斯随机过程:

Y(x)=f(x)Tβ+Z(x)Y(\mathbf{x}) = f(\mathbf{x})^T \boldsymbol{\beta} + Z(\mathbf{x})Y(x)=f(x)Tβ+Z(x)

其中f(x)Tβf(\mathbf{x})^T \boldsymbol{\beta}f(x)Tβ为趋势函数(通常为多项式),Z(x)Z(\mathbf{x})Z(x)为零均值高斯过程,协方差函数为:

Cov(Z(x),Z(x′))=σ2R(x,x′)\text{Cov}(Z(\mathbf{x}), Z(\mathbf{x}')) = \sigma^2 R(\mathbf{x}, \mathbf{x}')Cov(Z(x),Z(x))=σ2R(x,x)

R(x,x′)R(\mathbf{x}, \mathbf{x}')R(x,x)为相关函数,常用高斯相关函数:

R(x,x′)=exp⁡(−∑i=1nθi(xi−xi′)2)R(\mathbf{x}, \mathbf{x}') = \exp\left(-\sum_{i=1}^n \theta_i (x_i - x_i')^2\right)R(x,x)=exp(i=1nθi(xixi)2)

3.3.2 Kriging预测

给定样本点X=[x(1),...,x(N)]T\mathbf{X} = [\mathbf{x}^{(1)}, ..., \mathbf{x}^{(N)}]^TX=[x(1),...,x(N)]T和响应y=[y(1),...,y(N)]T\mathbf{y} = [y^{(1)}, ..., y^{(N)}]^Ty=[y(1),...,y(N)]T,在新点x∗\mathbf{x}^*x的预测为:

y^(x∗)=f(x∗)Tβ^+r(x∗)TR−1(y−Fβ^)\hat{y}(\mathbf{x}^*) = f(\mathbf{x}^*)^T \hat{\boldsymbol{\beta}} + \mathbf{r}(\mathbf{x}^*)^T \mathbf{R}^{-1}(\mathbf{y} - \mathbf{F}\hat{\boldsymbol{\beta}})y^(x)=f(x)Tβ^+r(x)TR1(yFβ^)

其中r(x∗)=[R(x∗,x(1)),...,R(x∗,x(N))]T\mathbf{r}(\mathbf{x}^*) = [R(\mathbf{x}^*, \mathbf{x}^{(1)}), ..., R(\mathbf{x}^*, \mathbf{x}^{(N)})]^Tr(x)=[R(x,x(1)),...,R(x,x(N))]TR\mathbf{R}R为样本点间的相关矩阵,F\mathbf{F}F为趋势函数设计矩阵。

预测方差(MSE)为:

s^2(x∗)=σ2(1−rTR−1r+uT(FTR−1F)−1u)\hat{s}^2(\mathbf{x}^*) = \sigma^2 \left(1 - \mathbf{r}^T \mathbf{R}^{-1}\mathbf{r} + \mathbf{u}^T(\mathbf{F}^T\mathbf{R}^{-1}\mathbf{F})^{-1}\mathbf{u}\right)s^2(x)=σ2(1rTR1r+uT(FTR1F)1u)

其中u=FTR−1r−f(x∗)\mathbf{u} = \mathbf{F}^T\mathbf{R}^{-1}\mathbf{r} - f(\mathbf{x}^*)u=FTR1rf(x)

Kriging不仅提供预测值,还提供预测不确定性,这对自适应采样和可靠性分析非常有价值。

3.4 径向基函数网络

3.4.1 RBF模型形式

径向基函数(Radial Basis Function, RBF)代理模型表示为:

y^(x)=∑i=1Nwiϕ(∣∣x−x(i)∣∣)\hat{y}(\mathbf{x}) = \sum_{i=1}^N w_i \phi(||\mathbf{x} - \mathbf{x}^{(i)}||)y^(x)=i=1Nwiϕ(∣∣xx(i)∣∣)

其中ϕ(r)\phi(r)ϕ(r)为径向基函数,常用形式包括:

  • 高斯函数:ϕ(r)=exp⁡(−(ϵr)2)\phi(r) = \exp(-(\epsilon r)^2)ϕ(r)=exp((ϵr)2)
  • 多二次函数:ϕ(r)=1+(ϵr)2\phi(r) = \sqrt{1 + (\epsilon r)^2}ϕ(r)=1+(ϵr)2
  • 逆多二次函数:ϕ(r)=1/1+(ϵr)2\phi(r) = 1/\sqrt{1 + (\epsilon r)^2}ϕ(r)=1/1+(ϵr)2
  • 薄板样条:ϕ(r)=r2ln⁡(r)\phi(r) = r^2 \ln(r)ϕ(r)=r2ln(r)
3.4.2 权重系数的确定

通过插值条件y^(x(i))=y(i)\hat{y}(\mathbf{x}^{(i)}) = y^{(i)}y^(x(i))=y(i),得到线性方程组:

Φw=y\boldsymbol{\Phi} \mathbf{w} = \mathbf{y}Φw=y

其中Φij=ϕ(∣∣x(i)−x(j)∣∣)\Phi_{ij} = \phi(||\mathbf{x}^{(i)} - \mathbf{x}^{(j)}||)Φij=ϕ(∣∣x(i)x(j)∣∣)。解此方程组得到权重w\mathbf{w}w

为改善数值稳定性,常引入正则化或多项式项:

y^(x)=∑i=1Nwiϕ(∣∣x−x(i)∣∣)+∑j=1Mβjpj(x)\hat{y}(\mathbf{x}) = \sum_{i=1}^N w_i \phi(||\mathbf{x} - \mathbf{x}^{(i)}||) + \sum_{j=1}^M \beta_j p_j(\mathbf{x})y^(x)=i=1Nwiϕ(∣∣xx(i)∣∣)+j=1Mβjpj(x)


4. 敏感性分析方法

4.1 敏感性分析概述

敏感性分析(Sensitivity Analysis, SA)研究输入参数变化对输出响应的影响程度,帮助识别关键参数、简化模型和指导设计优化。

4.1.1 敏感性分析的分类

局部敏感性分析:在参数名义值附近分析单个参数的影响,如偏导数、差分法。

全局敏感性分析:在整个参数变化范围内分析参数及其交互作用的影响,如Sobol指数、 Morris方法。

定性分析:识别重要参数,不提供定量影响程度。

定量分析:提供参数影响的数值度量。

4.2 基于方差的全局敏感性分析

4.2.1 Sobol分解

设输入变量X=[X1,X2,...,Xn]\mathbf{X} = [X_1, X_2, ..., X_n]X=[X1,X2,...,Xn]独立,输出Y=g(X)Y = g(\mathbf{X})Y=g(X)可分解为:

g(X)=g0+∑igi(Xi)+∑i<jgij(Xi,Xj)+...+g12...n(X1,...,Xn)g(\mathbf{X}) = g_0 + \sum_i g_i(X_i) + \sum_{i<j} g_{ij}(X_i, X_j) + ... + g_{12...n}(X_1, ..., X_n)g(X)=g0+igi(Xi)+i<jgij(Xi,Xj)+...+g12...n(X1,...,Xn)

其中各分量正交:

∫gi1...is(Xi1,...,Xis)dXk=0,k∈{i1,...,is}\int g_{i_1...i_s}(X_{i_1}, ..., X_{i_s}) dX_k = 0, \quad k \in \{i_1, ..., i_s\}gi1...is(Xi1,...,Xis)dXk=0,k{i1,...,is}

4.2.2 Sobol敏感性指数

基于上述分解,总方差可分解为:

V(Y)=∑iVi+∑i<jVij+...+V12...nV(Y) = \sum_i V_i + \sum_{i<j} V_{ij} + ... + V_{12...n}V(Y)=iVi+i<jVij+...+V12...n

其中:

  • 一阶效应:Vi=V(E[Y∣Xi])V_i = V(E[Y|X_i])Vi=V(E[YXi])
  • 二阶交互效应:Vij=V(E[Y∣Xi,Xj])−Vi−VjV_{ij} = V(E[Y|X_i, X_j]) - V_i - V_jVij=V(E[YXi,Xj])ViVj
  • 高阶效应类似定义

一阶Sobol指数

Si=ViV(Y)S_i = \frac{V_i}{V(Y)}Si=V(Y)Vi

表示XiX_iXi单独对输出方差的贡献比例。

总效应指数

STi=1−V(E[Y∣X∼i])V(Y)=E[V(Y∣X∼i)]V(Y)S_{Ti} = 1 - \frac{V(E[Y|\mathbf{X}_{\sim i}])}{V(Y)} = \frac{E[V(Y|\mathbf{X}_{\sim i})]}{V(Y)}STi=1V(Y)V(E[YXi])=V(Y)E[V(YXi)]

表示XiX_iXi及其与其他参数的所有交互作用对输出方差的总贡献。

4.2.3 Sobol指数的计算

Sobol指数可通过MC模拟估计:

Vi≈1N∑k=1Ng(x(k))g(x∼i(k),x~i(k))−g02V_i \approx \frac{1}{N}\sum_{k=1}^N g(\mathbf{x}^{(k)})g(\mathbf{x}_{\sim i}^{(k)}, \tilde{x}_i^{(k)}) - g_0^2ViN1k=1Ng(x(k))g(xi(k),x~i(k))g02

V(Y)≈1N∑k=1Ng(x(k))2−g02V(Y) \approx \frac{1}{N}\sum_{k=1}^N g(\mathbf{x}^{(k)})^2 - g_0^2V(Y)N1k=1Ng(x(k))2g02

其中(x(k),x~(k))(\mathbf{x}^{(k)}, \tilde{\mathbf{x}}^{(k)})(x(k),x~(k))为两组独立样本。

4.3 Morris筛选方法

4.3.1 基本元效应

Morris方法通过计算"基本元效应"(Elementary Effects)来筛选重要参数:

EEi=g(x1,...,xi+Δ,...,xn)−g(x)ΔEE_i = \frac{g(x_1, ..., x_i + \Delta, ..., x_n) - g(\mathbf{x})}{\Delta}EEi=Δg(x1,...,xi+Δ,...,xn)g(x)

其中Δ\DeltaΔ为预设的步长。

4.3.2 统计度量

对每个参数,在输入空间的不同点重复计算EEiEE_iEEi,得到样本{EEi(1),...,EEi(r)}\{EE_i^{(1)}, ..., EE_i^{(r)}\}{EEi(1),...,EEi(r)}。定义两个统计量:

  • 均值μi\mu_iμi:衡量参数的总体影响
  • 标准差σi\sigma_iσi:衡量参数影响的非线性程度和交互作用

参数分类:

  • 不重要:μi\mu_iμiσi\sigma_iσi都小
  • 线性重要:μi\mu_iμi大,σi\sigma_iσi
  • 非线性/交互:σi\sigma_iσi

Morris方法计算成本低(O(r(n+1))O(r(n+1))O(r(n+1))),适合参数筛选的初步分析。

4.4 基于导数的敏感性分析

4.4.1 局部敏感性系数

在名义点x0\mathbf{x}^0x0处,局部敏感性系数定义为:

Silocal=∂g∂xi∣x0⋅σiσYS_i^{local} = \frac{\partial g}{\partial x_i}\bigg|_{\mathbf{x}^0} \cdot \frac{\sigma_i}{\sigma_Y}Silocal=xig x0σYσi

该系数无量纲,表示XiX_iXi变化一个标准差引起的YYY的标准差变化。

4.4.2 伴随方法

对于高维问题,直接计算所有偏导数成本高昂。伴随方法通过求解伴随方程高效计算梯度:

设仿真模型为残差形式R(u,x)=0\mathbf{R}(\mathbf{u}, \mathbf{x}) = \mathbf{0}R(u,x)=0,输出Y=h(u,x)Y = h(\mathbf{u}, \mathbf{x})Y=h(u,x)。则:

dYdxi=∂h∂xi+λT∂R∂xi\frac{dY}{dx_i} = \frac{\partial h}{\partial x_i} + \boldsymbol{\lambda}^T \frac{\partial \mathbf{R}}{\partial x_i}dxidY=xih+λTxiR

其中伴随变量λ\boldsymbol{\lambda}λ满足:

(∂R∂u)Tλ=−(∂h∂u)T\left(\frac{\partial \mathbf{R}}{\partial \mathbf{u}}\right)^T \boldsymbol{\lambda} = -\left(\frac{\partial h}{\partial \mathbf{u}}\right)^T(uR)Tλ=(uh)T

求解一次伴随方程即可获得所有参数的梯度,计算成本与参数维度无关。


5. 可靠性分析与稳健设计

5.1 可靠性分析基础

5.1.1 失效概率定义

设系统的极限状态函数为g(X)g(\mathbf{X})g(X),通常定义为:

  • g(X)>0g(\mathbf{X}) > 0g(X)>0:安全状态
  • g(X)=0g(\mathbf{X}) = 0g(X)=0:极限状态
  • g(X)<0g(\mathbf{X}) < 0g(X)<0:失效状态

失效概率为:

Pf=P(g(X)≤0)=∫g(x)≤0fX(x)dxP_f = P(g(\mathbf{X}) \leq 0) = \int_{g(\mathbf{x}) \leq 0} f_{\mathbf{X}}(\mathbf{x}) d\mathbf{x}Pf=P(g(X)0)=g(x)0fX(x)dx

5.1.2 可靠性指数

可靠性指数β\betaβ定义为标准正态空间中原点到极限状态曲面的最短距离:

β=min⁡g(u)=0∣∣u∣∣\beta = \min_{g(\mathbf{u}) = 0} ||\mathbf{u}||β=g(u)=0min∣∣u∣∣

对于线性极限状态函数和高斯变量,失效概率与可靠性指数的关系为:

Pf=Φ(−β)P_f = \Phi(-\beta)Pf=Φ(β)

其中Φ\PhiΦ为标准正态CDF。

5.2 一阶可靠性方法(FORM)

5.2.1 标准正态变换

首先将原始变量X\mathbf{X}X变换为标准正态变量U\mathbf{U}U

Ui=Φ−1(FXi(Xi))U_i = \Phi^{-1}(F_{X_i}(X_i))Ui=Φ1(FXi(Xi))

对于相关变量,先通过Cholesky分解去相关,再独立变换。

5.2.2 最可能失效点(MPP)

FORM通过求解优化问题找到最可能失效点(MPP或设计点):

min⁡u∣∣u∣∣s.t.g(u)=0\min_{\mathbf{u}} ||\mathbf{u}|| \quad \text{s.t.} \quad g(\mathbf{u}) = 0umin∣∣u∣∣s.t.g(u)=0

常用算法包括HL-RF(Hasofer-Lind Rackwitz-Fiessler)迭代:

u(k+1)=∇g(u(k))Tu(k)−g(u(k))∣∣∇g(u(k))∣∣2∇g(u(k))\mathbf{u}^{(k+1)} = \frac{\nabla g(\mathbf{u}^{(k)})^T \mathbf{u}^{(k)} - g(\mathbf{u}^{(k)})}{||\nabla g(\mathbf{u}^{(k)})||^2} \nabla g(\mathbf{u}^{(k)})u(k+1)=∣∣∇g(u(k))2g(u(k))Tu(k)g(u(k))g(u(k))

5.2.3 失效概率估计

在MPP处将极限状态函数线性化:

g(u)≈∇g(u∗)T(u−u∗)g(\mathbf{u}) \approx \nabla g(\mathbf{u}^*)^T (\mathbf{u} - \mathbf{u}^*)g(u)g(u)T(uu)

失效概率近似为:

Pf≈Φ(−β)P_f \approx \Phi(-\beta)PfΦ(β)

FORM计算效率高,但对于高度非线性的极限状态函数,精度可能不足。

5.3 二阶可靠性方法(SORM)

5.3.1 二次近似

SORM在MPP处进行二阶泰勒展开:

g(u)≈∇g(u∗)T(u−u∗)+12(u−u∗)TH(u−u∗)g(\mathbf{u}) \approx \nabla g(\mathbf{u}^*)^T (\mathbf{u} - \mathbf{u}^*) + \frac{1}{2}(\mathbf{u} - \mathbf{u}^*)^T \mathbf{H} (\mathbf{u} - \mathbf{u}^*)g(u)g(u)T(uu)+21(uu)TH(uu)

其中H\mathbf{H}H为Hessian矩阵。

5.3.2 Breitung公式

SORM的失效概率估计(Breitung公式):

Pf≈Φ(−β)∏i=1n−1(1+βκi)−1/2P_f \approx \Phi(-\beta) \prod_{i=1}^{n-1} (1 + \beta \kappa_i)^{-1/2}PfΦ(β)i=1n1(1+βκi)1/2

其中κi\kappa_iκi为极限状态曲面在MPP处的主曲率。

SORM比FORM更精确,但需要计算二阶导数,计算成本更高。

5.4 重要性抽样

5.4.1 基本原理

重要性抽样从偏置分布q(x)q(\mathbf{x})q(x)中抽样,失效概率估计为:

Pf=∫I(g(x)≤0)f(x)q(x)q(x)dx≈1N∑i=1NI(g(x(i))≤0)f(x(i))q(x(i))P_f = \int I(g(\mathbf{x}) \leq 0) \frac{f(\mathbf{x})}{q(\mathbf{x})} q(\mathbf{x}) d\mathbf{x} \approx \frac{1}{N}\sum_{i=1}^N I(g(\mathbf{x}^{(i)}) \leq 0) \frac{f(\mathbf{x}^{(i)})}{q(\mathbf{x}^{(i)})}Pf=I(g(x)0)q(x)f(x)q(x)dxN1i=1NI(g(x(i))0)q(x(i))f(x(i))

5.4.2 最优偏置分布

理论上最优的偏置分布为:

q∗(x)=I(g(x)≤0)f(x)Pfq^*(\mathbf{x}) = \frac{I(g(\mathbf{x}) \leq 0) f(\mathbf{x})}{P_f}q(x)=PfI(g(x)0)f(x)

但这需要已知PfP_fPf。实践中,常将偏置分布中心移至MPP,或采用自适应方法。

5.4.3 自适应重要性抽样

自适应重要性抽样(AIS)迭代更新偏置分布:

  1. 初始从先验分布抽样
  2. 基于已评估样本更新偏置分布参数
  3. 重复直到收敛

AIS可以自动聚焦于重要区域,提高效率。

5.5 稳健设计优化

5.5.1 稳健性概念

稳健设计旨在使产品性能对参数变化不敏感,即"稳健性"。Taguchi方法将质量损失定义为偏离目标值的二次函数:

L(Y)=k(Y−Ytarget)2L(Y) = k(Y - Y_{target})^2L(Y)=k(YYtarget)2

期望质量损失为:

E[L]=k[(μY−Ytarget)2+σY2]E[L] = k[(\mu_Y - Y_{target})^2 + \sigma_Y^2]E[L]=k[(μYYtarget)2+σY2]

稳健设计优化问题可表述为:

min⁡dE[L]=min⁡d[(μY(d)−Ytarget)2+σY2(d)]\min_{\mathbf{d}} E[L] = \min_{\mathbf{d}} \left[(\mu_Y(\mathbf{d}) - Y_{target})^2 + \sigma_Y^2(\mathbf{d})\right]dminE[L]=dmin[(μY(d)Ytarget)2+σY2(d)]

其中d\mathbf{d}d为设计变量(可控参数)。

5.5.2 双循环优化

稳健设计优化通常采用双循环结构:

外循环:优化设计变量d\mathbf{d}d

内循环:对于给定d\mathbf{d}d,通过UQ方法(如MC、PCE)估计μY\mu_YμYσY\sigma_YσY

为提高效率,可采用单循环方法或基于代理模型的方法。

5.5.3 六西格玛设计

六西格玛设计要求设计满足:

∣Ytarget−μY∣+6σYUSL−LSL≤1\frac{|Y_{target} - \mu_Y| + 6\sigma_Y}{USL - LSL} \leq 1USLLSLYtargetμY+6σY1

其中USLUSLUSLLSLLSLLSL为上下规格限。这确保即使在±6σ\pm 6\sigma±6σ的极端情况下,产品仍满足规格。


6. Python实现:不确定性量化与可靠性分析

6.1 蒙特卡洛模拟实现

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

# 微带线特性阻抗的不确定性分析
def microstrip_impedance(er, h, w, t):
    """
    计算微带线特性阻抗(简化公式)
    er: 介电常数
    h: 基板厚度 (mm)
    w: 线宽 (mm)
    t: 铜箔厚度 (mm)
    """
    # 有效介电常数
    ereff = (er + 1) / 2 + (er - 1) / 2 / np.sqrt(1 + 12 * h / w)
    
    # 特性阻抗
    if w / h < 1:
        z0 = 60 / np.sqrt(ereff) * np.log(8 * h / w + w / (4 * h))
    else:
        z0 = 120 * np.pi / (np.sqrt(ereff) * (w / h + 1.393 + 0.667 * np.log(w / h + 1.444)))
    
    return z0

# 参数分布
N = 10000  # MC样本数

# 正态分布参数
er_mean, er_std = 4.4, 0.2  # 介电常数
h_mean, h_std = 1.6, 0.05   # 基板厚度 (mm)
w_mean, w_std = 1.0, 0.03   # 线宽 (mm)
t_mean, t_std = 0.035, 0.005  # 铜箔厚度 (mm)

# 生成随机样本
er_samples = np.random.normal(er_mean, er_std, N)
h_samples = np.random.normal(h_mean, h_std, N)
w_samples = np.random.normal(w_mean, w_std, N)
t_samples = np.random.normal(t_mean, t_std, N)

# 计算特性阻抗
z0_samples = []
for i in range(N):
    z0 = microstrip_impedance(er_samples[i], h_samples[i], 
                              w_samples[i], t_samples[i])
    z0_samples.append(z0)

z0_samples = np.array(z0_samples)

# 统计分析
print(f"特性阻抗统计:")
print(f"  均值: {np.mean(z0_samples):.2f} Ω")
print(f"  标准差: {np.std(z0_samples):.2f} Ω")
print(f"  95%置信区间: [{np.percentile(z0_samples, 2.5):.2f}, {np.percentile(z0_samples, 97.5):.2f}] Ω")

# 可视化
plt.figure(figsize=(12, 4))

plt.subplot(131)
plt.hist(z0_samples, bins=50, density=True, alpha=0.7, color='steelblue')
plt.xlabel('Characteristic Impedance (Ω)')
plt.ylabel('PDF')
plt.title('Distribution of Z0')
plt.grid(True, alpha=0.3)

plt.subplot(132)
plt.hist(er_samples, bins=30, alpha=0.5, label='εr', color='red')
plt.hist(h_samples, bins=30, alpha=0.5, label='h', color='green')
plt.hist(w_samples, bins=30, alpha=0.5, label='w', color='blue')
plt.xlabel('Parameter Value')
plt.ylabel('Frequency')
plt.title('Input Distributions')
plt.legend()
plt.grid(True, alpha=0.3)

plt.subplot(133)
# 散点图:线宽vs阻抗
plt.scatter(w_samples[::50], z0_samples[::50], alpha=0.5, s=10)
plt.xlabel('Line Width w (mm)')
plt.ylabel('Z0 (Ω)')
plt.title('Correlation: w vs Z0')
plt.grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('mc_microstrip.png', dpi=150)
plt.close()

6.2 多项式混沌展开实现

import numpy as np
from numpy.polynomial.hermite import hermval
from scipy.special import factorial

class PolynomialChaos:
    """
    多项式混沌展开类
    """
    def __init__(self, n_vars, order):
        self.n_vars = n_vars
        self.order = order
        self.coeffs = None
        self.multi_indices = self._generate_multi_indices()
        
    def _generate_multi_indices(self):
        """生成多指标集合"""
        from itertools import product
        indices = []
        for o in range(self.order + 1):
            for idx in product(range(o + 1), repeat=self.n_vars):
                if sum(idx) == o:
                    indices.append(idx)
        return indices
    
    def _hermite_poly(self, xi, n):
        """计算概率Hermite多项式( physicist's version normalized)"""
        # 使用numpy的hermite多项式
        coeffs = [0] * (n + 1)
        coeffs[n] = 1
        return hermval(xi, coeffs)
    
    def _multivariate_hermite(self, xi, alpha):
        """计算多变量Hermite多项式"""
        result = 1.0
        for i, a in enumerate(alpha):
            result *= self._hermite_poly(xi[i], a)
        return result
    
    def fit_regression(self, xi_samples, y_samples):
        """
        使用回归法拟合PCE系数
        xi_samples: 标准正态样本 (N, n_vars)
        y_samples: 响应样本 (N,)
        """
        N = len(y_samples)
        n_terms = len(self.multi_indices)
        
        # 构建设计矩阵
        Phi = np.zeros((N, n_terms))
        for i, alpha in enumerate(self.multi_indices):
            for j in range(N):
                Phi[j, i] = self._multivariate_hermite(xi_samples[j], alpha)
        
        # 最小二乘求解
        self.coeffs, residuals, rank, s = np.linalg.lstsq(Phi, y_samples, rcond=None)
        
        return self
    
    def predict(self, xi):
        """预测响应"""
        if self.coeffs is None:
            raise ValueError("Model not fitted yet")
        
        y_pred = 0.0
        for i, alpha in enumerate(self.multi_indices):
            y_pred += self.coeffs[i] * self._multivariate_hermite(xi, alpha)
        return y_pred
    
    def get_statistics(self):
        """获取统计矩"""
        if self.coeffs is None:
            raise ValueError("Model not fitted yet")
        
        # 均值(零阶系数)
        mean = self.coeffs[0]
        
        # 方差(其他系数的平方和,需归一化)
        variance = 0.0
        for i, alpha in enumerate(self.multi_indices):
            if sum(alpha) > 0:
                # Hermite多项式的范数
                norm = 1.0
                for a in alpha:
                    norm *= factorial(a)
                variance += self.coeffs[i]**2 * norm
        
        return {'mean': mean, 'variance': variance, 'std': np.sqrt(variance)}
    
    def sobol_indices(self):
        """计算Sobol敏感性指数"""
        if self.coeffs is None:
            raise ValueError("Model not fitted yet")
        
        stats = self.get_statistics()
        total_var = stats['variance']
        
        # 一阶Sobol指数
        S1 = np.zeros(self.n_vars)
        for i, alpha in enumerate(self.multi_indices):
            if sum(alpha) == 1:  # 一阶项
                for j, a in enumerate(alpha):
                    if a > 0:
                        norm = factorial(a)
                        S1[j] += self.coeffs[i]**2 * norm / total_var
        
        return {'S1': S1}

# 使用示例
def ishigami_function(x):
    """Ishigami测试函数"""
    return np.sin(x[0]) + 7 * np.sin(x[1])**2 + 0.1 * x[2]**4 * np.sin(x[0])

# 生成训练样本
N_train = 1000
xi_train = np.random.randn(N_train, 3)
# 转换到[-π, π]区间
x_train = xi_train * np.pi / np.sqrt(3)  # 近似均匀分布
y_train = np.array([ishigami_function(x) for x in x_train])

# 拟合PCE
pce = PolynomialChaos(n_vars=3, order=3)
pce.fit_regression(xi_train, y_train)

# 获取统计信息
stats = pce.get_statistics()
print(f"PCE统计:")
print(f"  均值: {stats['mean']:.4f}")
print(f"  标准差: {stats['std']:.4f}")

# Sobol指数
sobol = pce.sobol_indices()
print(f"\n一阶Sobol指数:")
for i, s in enumerate(sobol['S1']):
    print(f"  X{i+1}: {s:.4f}")

6.3 Kriging代理模型实现

import numpy as np
from scipy.optimize import minimize
from scipy.spatial.distance import cdist

class KrigingModel:
    """
    简单Kriging代理模型
    """
    def __init__(self, theta=1.0, p=2.0):
        self.theta = theta  # 相关长度参数
        self.p = p  # 幂指数
        self.X = None  # 训练样本
        self.y = None  # 训练响应
        self.R = None  # 相关矩阵
        self.R_inv = None
        self.beta = None  # 趋势系数
        self.sigma2 = None  # 过程方差
        
    def _correlation(self, x1, x2):
        """高斯相关函数"""
        dist = np.sum(self.theta * np.abs(x1 - x2)**self.p)
        return np.exp(-dist)
    
    def _build_correlation_matrix(self, X1, X2=None):
        """构建相关矩阵"""
        if X2 is None:
            X2 = X1
        
        n1, n2 = len(X1), len(X2)
        R = np.zeros((n1, n2))
        for i in range(n1):
            for j in range(n2):
                R[i, j] = self._correlation(X1[i], X2[j])
        return R
    
    def fit(self, X, y):
        """拟合Kriging模型"""
        self.X = np.array(X)
        self.y = np.array(y)
        n = len(y)
        
        # 构建相关矩阵
        self.R = self._build_correlation_matrix(self.X)
        self.R_inv = np.linalg.inv(self.R + 1e-6 * np.eye(n))  # 正则化
        
        # 简单Kriging:假设已知均值为0
        self.beta = 0
        
        # 估计过程方差
        self.sigma2 = np.dot(self.y, np.dot(self.R_inv, self.y)) / n
        
        return self
    
    def predict(self, x_new, return_std=False):
        """预测新点"""
        x_new = np.array(x_new)
        
        # 计算与训练点的相关向量
        r = np.array([self._correlation(x_new, xi) for xi in self.X])
        
        # 预测值
        y_pred = self.beta + np.dot(r, np.dot(self.R_inv, (self.y - self.beta)))
        
        if return_std:
            # 预测方差
            rRr = np.dot(r, np.dot(self.R_inv, r))
            mse = self.sigma2 * (1 - rRr)
            std = np.sqrt(max(mse, 0))
            return y_pred, std
        
        return y_pred

# 测试:一维函数
np.random.seed(42)

# 真实函数
def f_true(x):
    return np.sin(3 * x) + 0.5 * np.cos(5 * x)

# 训练样本
X_train = np.linspace(0, 2*np.pi, 10).reshape(-1, 1)
y_train = f_true(X_train.flatten())

# 拟合Kriging
krig = KrigingModel(theta=0.5)
krig.fit(X_train, y_train)

# 预测
X_test = np.linspace(0, 2*np.pi, 100).reshape(-1, 1)
y_pred = []
y_std = []

for x in X_test:
    pred, std = krig.predict(x, return_std=True)
    y_pred.append(pred)
    y_std.append(std)

y_pred = np.array(y_pred)
y_std = np.array(y_std)

# 可视化
plt.figure(figsize=(10, 6))
plt.plot(X_test.flatten(), f_true(X_test.flatten()), 'b-', label='True Function', linewidth=2)
plt.plot(X_test.flatten(), y_pred, 'r--', label='Kriging Prediction', linewidth=2)
plt.fill_between(X_test.flatten(), y_pred - 2*y_std, y_pred + 2*y_std, 
                 alpha=0.3, color='red', label='95% Confidence')
plt.scatter(X_train.flatten(), y_train, c='black', s=50, zorder=5, label='Training Points')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Kriging Surrogate Model')
plt.legend()
plt.grid(True, alpha=0.3)
plt.savefig('kriging_1d.png', dpi=150)
plt.close()

6.4 FORM可靠性分析实现

import numpy as np
from scipy.optimize import minimize
from scipy.stats import norm

def form_analysis(g_func, mean, std, max_iter=100, tol=1e-6):
    """
    一阶可靠性方法(FORM)
    
    参数:
        g_func: 极限状态函数 g(x),g(x) <= 0 表示失效
        mean: 变量均值向量
        std: 变量标准差向量
        max_iter: 最大迭代次数
        tol: 收敛容差
    
    返回:
        beta: 可靠性指数
        u_star: 标准正态空间中的MPP点
        x_star: 原始空间中的MPP点
        Pf: 失效概率估计
    """
    n_vars = len(mean)
    
    # 初始化(标准正态空间原点)
    u = np.zeros(n_vars)
    
    for iteration in range(max_iter):
        # 变换到原始空间
        x = mean + std * u
        
        # 计算极限状态函数值和梯度
        g_val = g_func(x)
        
        # 数值梯度
        grad_g = np.zeros(n_vars)
        h = 1e-6
        for i in range(n_vars):
            x_plus = x.copy()
            x_plus[i] += h
            grad_g[i] = (g_func(x_plus) - g_val) / h
        
        # 梯度变换到标准正态空间
        grad_g_u = grad_g * std
        
        # 单位法向量(指向失效域)
        alpha = grad_g_u / np.linalg.norm(grad_g_u)
        
        # 新的MPP估计
        beta_new = -g_val / np.linalg.norm(grad_g_u) + np.dot(alpha, u)
        u_new = -beta_new * alpha
        
        # 检查收敛
        if np.linalg.norm(u_new - u) < tol:
            beta = beta_new
            u_star = u_new
            x_star = mean + std * u_star
            Pf = norm.cdf(-beta)
            return beta, u_star, x_star, Pf
        
        u = u_new
    
    # 达到最大迭代次数
    beta = np.linalg.norm(u)
    u_star = u
    x_star = mean + std * u_star
    Pf = norm.cdf(-beta)
    return beta, u_star, x_star, Pf

# 示例:悬臂梁可靠性分析
def cantilever_reliability():
    """
    悬臂梁端部挠度可靠性分析
    极限状态:挠度 <= 允许值
    """
    # 随机变量:宽度b,高度h,长度L,载荷P,弹性模量E
    # 简化:考虑b, h, P的不确定性
    
    mean = np.array([0.2, 0.4, 1000])  # b(m), h(m), P(N)
    std = np.array([0.01, 0.02, 100])   # 变异系数5%
    
    L = 2.0  # 梁长度 (m)
    E = 2e11  # 弹性模量 (Pa)
    delta_allow = 0.015  # 允许挠度 (m)
    
    def g_func(x):
        b, h, P = x
        # 端部挠度公式
        I = b * h**3 / 12  # 截面惯性矩
        delta = P * L**3 / (3 * E * I)
        return delta_allow - delta  # g > 0 安全
    
    beta, u_star, x_star, Pf = form_analysis(g_func, mean, std)
    
    print("悬臂梁可靠性分析结果:")
    print(f"  可靠性指数 β = {beta:.4f}")
    print(f"  失效概率 Pf = {Pf:.6e}")
    print(f"  MPP点 (原始空间): b={x_star[0]:.4f}, h={x_star[1]:.4f}, P={x_star[2]:.2f}")
    print(f"  MPP点 (标准空间): u=[{u_star[0]:.4f}, {u_star[1]:.4f}, {u_star[2]:.4f}]")
    
    return beta, Pf

# 运行分析
beta, Pf = cantilever_reliability()

7. 高级主题与前沿进展

7.1 非概率不确定性方法

当概率分布难以确定时,可采用非概率方法:

区间分析:用区间[x‾,x‾][\underline{x}, \overline{x}][x,x]描述不确定性,通过区间运算传播不确定性。计算简单但可能过于保守。

模糊理论:用隶属函数描述"大约"、"接近"等模糊概念,适合处理语言描述的不确定性。

证据理论(Dempster-Shafer):用信任函数和似然函数表示不确定性,可以处理冲突证据。

概率盒(P-box):结合概率分布和区间边界,提供更完整的不确定性描述。

7.2 深度学习在UQ中的应用

深度神经网络代理模型:利用DNN构建高维、强非线性的代理模型,通过迁移学习和主动学习提高效率。

贝叶斯神经网络:将网络权重视为随机变量,提供预测不确定性估计,适合小样本情况。

生成模型:使用VAE、GAN等生成模型学习输入分布,用于生成MC样本。

物理信息神经网络(PINN):将物理方程约束融入神经网络,提高外推能力和物理一致性。

7.3 高维不确定性量化

对于高维问题(n>20n > 20n>20),传统方法面临"维度灾难":

稀疏网格:在多维空间中使用稀疏的样本点组合,减少样本量同时保持精度。

低秩近似:假设响应函数具有低秩结构,用张量分解等方法降维。

主动子空间:识别对输出影响最大的低维子空间,在子空间中进行UQ分析。

流形学习:假设高维数据位于低维流形上,用流形学习方法降维。

7.4 时变可靠性分析

对于动态系统,需要考虑时间累积效应:

首次穿越问题:计算响应首次超出安全域的时间分布。

极值分布:分析时间历程中的极值统计特性。

累积损伤模型:对于疲劳、老化等问题,建立累积损伤的随机过程模型。


8. 工程应用案例

8.1 天线阵列稳健设计

考虑一个8元微带天线阵列,设计目标是在存在制造公差的情况下,保证增益波动小于1dB。

不确定性参数

  • 贴片长度:L=15.5±0.2L = 15.5 \pm 0.2L=15.5±0.2 mm
  • 贴片宽度:W=20±0.2W = 20 \pm 0.2W=20±0.2 mm
  • 单元间距:d=30±0.3d = 30 \pm 0.3d=30±0.3 mm
  • 基板介电常数:εr=4.4±0.2\varepsilon_r = 4.4 \pm 0.2εr=4.4±0.2

分析方法

  1. 使用全波仿真建立参数化模型
  2. 构建Kriging代理模型
  3. MC模拟评估增益分布
  4. Sobol分析识别关键参数
  5. 优化设计提高稳健性

8.2 高速PCB信号完整性分析

在高速数字设计中,信号完整性受多种不确定性影响:

不确定性来源

  • 走线几何:线宽、线间距、层厚偏差
  • 材料特性:介电常数频变和温度依赖
  • 连接器:阻抗不连续和串扰
  • 工艺:过孔stub长度、焊盘尺寸

分析流程

  1. 建立参数化电磁模型
  2. 使用LHS生成代表性样本
  3. 提取S参数并计算眼图指标
  4. 评估时序裕量和误码率
  5. 识别关键工艺控制点

8.3 雷达截面(RCS)统计特性

隐身目标的RCS受姿态角、表面粗糙度、材料特性等影响:

分析方法

  • 使用PCE建立RCS与参数的函数关系
  • 计算RCS的均值、方差和概率分布
  • 评估特定方向上的RCS超标概率
  • 优化外形和材料降低统计均值

9. 总结与展望

9.1 方法选择指南

在实际工程中,应根据问题特点选择合适的方法:

方法 适用场景 优点 缺点
MC模拟 通用,特别是复杂模型 简单、准确、可并行 计算成本高
PCE 光滑响应,中等维度 解析统计矩、敏感性 高维时项数爆炸
Kriging 非光滑,小样本 插值精确、提供不确定性 高维时相关矩阵病态
FORM/SORM 可靠性分析 高效 对非线性敏感
LHS/QMC 替代纯随机采样 收敛快 实现稍复杂

9.2 最佳实践建议

  1. 问题定义:明确不确定性来源、输出响应和精度要求
  2. 预处理:进行敏感性分析,识别重要参数,降维
  3. 方法选择:根据问题特点选择合适方法,必要时组合使用
  4. 验证确认:通过交叉验证、收敛性分析确保结果可靠
  5. 可视化:充分可视化不确定性传播和敏感性结果

9.3 未来发展趋势

  1. 自动化UQ:与CAD/CAE软件深度集成,实现一键式不确定性分析
  2. 实时UQ:结合数字孪生,实现运行时的不确定性更新
  3. 多尺度UQ:跨尺度(材料-组件-系统)的不确定性传播
  4. 认知不确定性:更好的处理模型不确定性和数据稀缺性
  5. AI增强UQ:利用机器学习提高效率和精度

参考文献

  1. Ghanem, R. G., & Spanos, P. D. (1991). Stochastic finite elements: a spectral approach. Springer.
  2. Sudret, B. (2008). Global sensitivity analysis using polynomial chaos expansions. Reliability Engineering & System Safety, 93(7), 964-979.
  3. Forrester, A., Sobester, A., & Keane, A. (2008). Engineering design via surrogate modelling: a practical guide. Wiley.
  4. Melchers, R. E., & Beck, A. T. (2018). Structural reliability analysis and prediction. John Wiley & Sons.
  5. Saltelli, A., et al. (2008). Global Sensitivity Analysis: The Primer. Wiley.
  6. Xiu, D. (2010). Numerical methods for stochastic computations: a spectral method approach. Princeton University Press.
  7. Taguchi, G. (1986). Introduction to quality engineering: designing quality into products and processes.
  8. Der Kiureghian, A., & Ditlevsen, O. (2009). Aleatory or epistemic? Does it matter? Structural Safety, 31(2), 105-112.
  9. 刘浩, 等. (2018). 不确定性量化方法及其在工程中的应用. 科学出版社.
  10. 张崎, 等. (2015). 结构可靠性分析与优化设计. 机械工业出版社.

附录:常用概率分布参数

分布 参数 均值 方差 应用场景
正态分布 μ,σ\mu, \sigmaμ,σ μ\muμ σ2\sigma^2σ2 制造公差、测量误差
对数正态分布 μln,σln\mu_{ln}, \sigma_{ln}μln,σln eμln+σln2/2e^{\mu_{ln} + \sigma_{ln}^2/2}eμln+σln2/2 (eσln2−1)e2μln+σln2(e^{\sigma_{ln}^2}-1)e^{2\mu_{ln}+\sigma_{ln}^2}(eσln21)e2μln+σln2 材料损耗、寿命
均匀分布 a,ba, ba,b (a+b)/2(a+b)/2(a+b)/2 (b−a)2/12(b-a)^2/12(ba)2/12 保守估计、缺乏信息
威布尔分布 λ,k\lambda, kλ,k λΓ(1+1/k)\lambda\Gamma(1+1/k)λΓ(1+1/k) λ2[Γ(1+2/k)−Γ2(1+1/k)]\lambda^2[\Gamma(1+2/k)-\Gamma^2(1+1/k)]λ2[Γ(1+2/k)Γ2(1+1/k)] 可靠性、疲劳寿命
伽马分布 α,β\alpha, \betaα,β α/β\alpha/\betaα/β α/β2\alpha/\beta^2α/β2 等待时间、强度

本教程系统介绍了不确定性量化与可靠性分析的理论方法和工程应用,通过Python实现展示了各种方法的实际应用。掌握这些方法对于提高电磁仿真结果的可靠性和工程设计的稳健性具有重要意义。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐