轨迹灵敏度在电力系统动态安全评估中的应用
2026/9/17 19:14:11 网站建设 项目流程

简介:基于轨迹灵敏度方法的电力系统动态安全评估论文复现与代码解析资料,面向电力系统研究人员、研究生及动态安全评估工程师,重点解决暂态角度稳定、电压稳定与低频减载控制中的灵敏度建模与计算问题。资源为单份PDF文档,约1.01MB,内容包含论文方法解读与可运行的Python代码示例,覆盖PSAT灵敏度元素实现、DAE求解器、并行集群计算、改进型‘非常不诚实牛顿法’及精度验证等关键环节。文档结合WECC系统实例,讨论线性近似精度与扰动大小的关系,并演示了暂态稳定性分析、考虑负荷不确定性的电压稳定评估以及基于模型预测控制的低频减载策略设计,代码与解释对应完整,便于二次调整。该资源已有83人学习,适合希望从理论推导到代码实现完整掌握轨迹灵敏度动态安全评估方法的科研与工程人员。

1. 为什么要用轨迹灵敏度做动态安全评估

电网运行方式调整和新能源并网带来的一个直接后果是:安全稳定边界不再是静态断面能够描述清楚的。过去调度员看着N-1扫描结果、监视断面潮流和电压幅值就能判断系统是否安全,但遇到低频振荡、暂态失步、电压失稳这类动态问题时,静态指标往往给出乐观结论。轨迹灵敏度把目光从“稳态运行点”挪到“动态响应轨迹”上,回答的是这样一个问题:当某个参数或控制量发生小扰动时,系统状态变量的整条时域轨迹会朝哪个方向偏、偏离多少。这个“方向”和“偏离量”既是稳定性分析的工具,也是控制策略设计的依据。

对一线工程师来说,轨迹灵敏度最大的价值在于它可以复用现有仿真程序的输出。不需要重新推导李雅普诺夫函数,也不需要搭建新的硬件在环平台,只要能在时域仿真里拿到状态变量的轨迹,就能用数值差分或伴随方程法算出一组灵敏度。这组灵敏度可以用来看清系统中最薄弱的环节,可以用来筛选候选控制措施,也可以直接用于最优励磁控制或切机切负荷策略的在线预决策。本文按理论、数值实现、稳定分析、控制设计的顺序展开,所有代码都是可运行的示例,参数和边界条件会逐一说明。

2. 轨迹灵敏度的数学定义与数值求取方法

2.1 从微分代数方程组到轨迹灵敏度

电力系统动态模型通常写成微分代数方程组:

其中 x 是动态状态变量,y 是代数变量,p 是参数向量(如负荷功率、发电机出力、控制器增益),u 是控制输入。轨迹灵敏度定义为状态变量对参数的偏导数沿标称轨迹的取值:

这个偏导数的物理含义是:在 t 时刻,参数 p_j 变化一个单位时,状态 x_i 的轨迹会偏离标称轨迹多少。值得注意的是,这里不是比较两个终值,而是比较整条时间曲线,所以能捕捉振荡过程中灵敏度的时变特征。一个参数可能在初始时刻灵敏度很小,但在第二个摇摆周期后主导了轨迹分叉,这是静态灵敏度看不到的信息。

对 DAE 系统求轨迹灵敏度,标准做法是对原方程组关于参数求全导数,形成灵敏度方程。把式(1)对 p 求导,注意 x 和 y 都是 t 和 p 的函数,得到一组线性时变微分代数方程:

其中 FX、FY、GX、GY 分别是原方程对 x 和 y 的雅可比矩阵。FP、GP 是对方程中显式依赖参数 p 的项求导。这套方程的求解不需要重新做非线性时域仿真,而是随着原方程的每一步积分同步推进,因此计算开销相对可控。对于大规模系统,灵敏度方程的维度和状态变量相同,这也是在线应用的主要瓶颈,后面会给出一个降维思路。

2.2 数值差分法:实现最简单但要注意步长

先实现一个雏形。实际工程中最容易落地的是“扰动法”,即分别对参数取 p0 和 p0+Δp 做两次时域仿真,然后对状态轨迹做差分。下面以单机无穷大系统为例,发电机用二阶经典模型,摇摆方程为:

其中 δ 为功角,ω 为角速度,H 为惯性时间常数,Pm 为机械功率,Pe 为电磁功率。电磁功率可以写为 Pe = EV/X sinδ,E 和 V 分别是发电机内电势和无穷大母线电压,X 为总电抗。对机械功率 Pm 求轨迹灵敏度,需要分别用 Pm 和 Pm+ΔPm 仿真两次,再逐时点做差分。

import numpy as np from scipy.integrate import solve_ivp # 单机无穷大系统参数 H = 5.0 # 惯性时间常数,秒 X = 0.8 # 总电抗,标幺值 E = 1.0 # 发电机内电势 V = 1.0 # 无穷大母线电压 D = 0.05 # 阻尼系数 Pm = 0.9 # 机械功率,标幺值 omega_s = 2 * np.pi * 50 # 同步角速度 def swing_dynamics(t, z, pm): """经典二阶模型右侧函数 z[0] = delta, z[1] = omega """ delta, omega = z Pe = E * V / X * np.sin(delta) ddelta = omega_s * (omega - 1.0) domega = (pm - Pe - D * (omega - 1.0)) / (2 * H) return [ddelta, domega] # 标称轨迹 t_span = (0, 5) z0 = [0.5, 1.0] # 初始功角0.5rad,角速度同步 sol_nominal = solve_ivp(swing_dynamics, t_span, z0, args=(Pm,), t_eval=np.linspace(0, 5, 1001)) # 扰动轨迹:Pm 增加0.01 dPm = 0.01 sol_pert = solve_ivp(swing_dynamics, t_span, z0, args=(Pm + dPm,), t_eval=sol_nominal.t) # 轨迹灵敏度:delta 对 Pm 的灵敏度 sens_delta = (sol_pert.y[0] - sol_nominal.y[0]) / dPm # 轨迹灵敏度:角速度对 Pm 的灵敏度 sens_omega = (sol_pert.y[1] - sol_nominal.y[1]) / dPm

这段代码的关键在于两次仿真的时间采样点必须完全一致,否则差分会混入时间离散误差。solve_ivp 中 t_eval 显式指定输出点,能保证这一点。扰动步长 dPm 的选择需要谨慎:太大则灵敏度被非线性失真污染,太小则差分结果被数值噪声淹没。这里选 0.01,对应机械功率量级的 1% 左右,是经验上比较稳妥的起点。

提示:实际电力系统仿真中,如果使用商用软件,扰动法需要把同一预想故障场景跑两遍,且要确认故障发生时刻、故障切除时间、仿真步长等设置完全一致。不一致造成的误差远大于差分误差。

2.3 伴随方程法:一次仿真算出所有灵敏度

扰动法的缺点是多一个参数就要多跑一遍仿真,参数数量较多时计算量线性增长。伴随方程法(Adjoint Method)可以解决这个问题:对每个目标函数或输出量,只需要一次原方程正向仿真和一次伴随方程反向仿真,就能得到该输出对所有参数的梯度。具体推导是构造拉格朗日函数,引入伴随变量 λ(t),将原微分方程作为等式约束,然后对目标函数求参数梯度时,反向积分伴随方程:

其中 A(t) 是原方程雅可比矩阵的转置,∂J/∂p 是目标函数对参数的直接依赖项。这个方法的复杂度不再正比于参数个数,而是正比于输出量个数。如果在动态安全评估中只关注少数几个关键指标,比如最大功角偏差、最低电压值,伴随法非常划算。

实际使用中,伴随方程法的实现难度在于需要存储正向轨迹或做检查点,因为反向积分时要回代状态值。大规模系统中存储全部轨迹可能内存吃紧,常见做法是每隔若干步存一次检查点,反向积分时再插值还原。这个技术路线在深度学习框架里已经很成熟,但把它用到电力系统专用仿真程序里还需要自己实现插值模块。

2.4 轨迹灵敏度数值计算的精度检验

无论用哪种方法,计算完成后都要做精度校验。我一般推荐用“有限差分验证伴随结果”的方法:随机挑几个参数,分别用扰动法和伴随法计算同一组灵敏度,然后对比相对误差。如果两者偏差超过 1%,优先怀疑伴随方程中雅可比矩阵的组装是否正确,其次检查正向轨迹是否已收敛到稳定解。表 1 列出一组典型工况下的对比结果,可以看出两种方法在数值上的一致性。

表 1 扰动法与伴随法轨迹灵敏度对比示例

参数扰动法灵敏度(δ, t=2.0s)伴随法灵敏度(δ, t=2.0s)相对误差
Pm0.084230.084190.05%
H-0.04211-0.042080.07%
D-0.15673-0.156610.08%

数据只是示意,但量级关系符合物理直觉:机械功率增大,功角增大,所以灵敏度为正;惯性常数和阻尼系数增大,功角动态更平稳,灵敏度为负。校验通过后,这些灵敏度才能用于稳定性分析和控制设计。

3. 基于轨迹灵敏度的稳定性分析流程

3.1 确定评估场景与关键参数集合

轨迹灵敏度本身不告诉你系统是否稳定,它提供的是“趋势”和“主导因素”的信息。要完成动态安全评估,得先定义预想故障集和评估指标。预想故障集一般参考 N-1 原则,外加调度运行部门重点关注的 N-2 故障。每次仿真记录的关键输出包括:发电机功角差轨迹、母线电压幅值轨迹、关键断面有功潮流轨迹。

关键参数的选取不用贪多。结合热词“电力系统稳定性分析”,一般先粗筛候选参数:发电机有功出力、无功出力、负荷水平、励磁系统增益、调速器调差系数等。筛选标准是这个参数是否在运行方式调整或控制设计中可调。不可调的参数即使灵敏度高,对控制策略设计也没有直接作用。以某区域电网为例,短路故障后的功角响应主要受相邻两台大机组的有功出力和励磁增益影响,那么参数集合就锁定在这几个量上。

3.2 故障后轨迹的动态安全量化指标

有了轨迹灵敏度曲线,怎么把它变成“是否安全”的判据?常见做法是定义几个基于轨迹的指标。第一个是暂态功角稳定裕度,用故障后最大相对功角差与稳定极限的差值表示;第二个是电压恢复指标,统计故障切除后母线电压在规定时间内恢复到 0.8 pu 以上的能力;第三个是频率动态指标,记录最大频率偏差和稳态频差。

轨迹灵敏度对这些指标的贡献在于“裕度对参数的梯度”。比如系统在基准方式下的暂态功角稳定裕度是 15%,灵敏度表明某台机组出力每增加 100 MW,裕度下降 2.5 个百分点,那么这个信息可以直接指导运行方式调整。这种“裕度 + 梯度”的组合比单纯看仿真曲线是否稳定更有决策价值,也更容易与安全稳定控制系统配合。

3.3 灵敏度轨迹的可视化与主导参数识别

画出灵敏度曲线之后,怎么判断哪个参数主导响应?我常用的方法是看“灵敏度幅值包络”和“峰值时刻”。如果某个参数的灵敏度轨迹在故障发生后 0.2 到 0.5 秒内出现大幅振荡,说明这个参数对首摆稳定影响显著;如果灵敏度在 1 秒后才持续增大,说明它对后续振荡或电压恢复影响更大。

# 在已有灵敏度计算结果上做主导性排序 import numpy as np # 假设 sensitivity_matrix 形状为 (n_params, n_time) # 每个参数一行,每列对应一个时刻的灵敏度 time = sol_nominal.t envelope = np.max(np.abs(sensitivity_matrix), axis=1) # 找出灵敏度峰值对应的时刻 peak_time = time[np.argmax(np.abs(sensitivity_matrix), axis=1)] for idx, (env, pt) in enumerate(zip(envelope, peak_time)): print(f"参数{idx}: 灵敏度包络峰值={env:.4f}, 出现在t={pt:.2f}s")

这段代码只是示意,但思路很明确:先算每个参数灵敏度曲线的绝对值包络,然后找峰值时刻。包络大且峰值早的参数,通常是暂态稳定的主导因素;包络大但峰值晚的参数,往往对动态过程的持续阶段影响更大。可视化时建议把多条灵敏度曲线画在同一张图里,横轴时间,纵轴灵敏度值,不同参数用不同线型区分,并标出故障切除时刻和系统关键模态周期。

3.4 结合暂态能量函数的拓展分析

轨迹灵敏度除了看单个参数的时域响应,还能与暂态能量函数结合,用于识别系统失稳的临界割集。暂态能量函数中的势能项由网络支路传输功率和相角差构成,轨迹灵敏度可以导出支路势能对各参数的偏导,进而判断哪条支路在故障后最容易成为能量“瓶颈”。这个分析在电力系统稳定性分析中属于进阶做法,但对定位电网薄弱环节非常有效。

实现层面不需要自己写能量函数计算,常见的时域仿真工具都能量化支路能量。关键是计算支路势能对参数的灵敏度时,需要同时用到状态灵敏度(功角、电压幅值)和代数灵敏度(支路功率),所以在灵敏度方程中要把代数变量对参数的偏导一并解出。这也是为什么前面强调要处理完整的 DAE 灵敏度方程,而不是只看发电机状态。

4. 控制策略设计与轨迹灵敏度优化配置

4.1 控制措施的灵敏度筛选框架

控制策略设计的核心问题有两个:选什么控制措施,以及控制量定多大。轨迹灵敏度天然的适用场景是控制措施的筛选和排序。每类控制措施可以抽象为一个控制参数的变化,比如切机对应某一台机组有功出力归零,快关汽门对应机械功率的短时下调,切负荷对应某些母线节点负荷功率降低,励磁增强对应电压参考值的提升。

筛选框架可以这样建立:先把措施展开成参数变化向量,每个向量代表一种控制组合。然后用轨迹灵敏度做一阶近似,估计该措施对关键指标的改善量。举切机措施来说,如果系统因为某一台机组功角失步,那么切除该机组的效果近似等于把这台机组出力作为参数反向大幅度调整对失步指标的灵敏度积分。灵敏度高的措施排在前面,再结合措施成本形成推荐清单。这个过程完全可以在仿真后处理阶段自动完成,不需要反复试算。

4.2 轨迹灵敏度驱动的参数优化问题

当控制参数连续可调时,比如励磁系统增益、PSS 相位补偿参数、HVDC 附加功率调制增益,可以把动态安全指标作为目标函数,用轨迹灵敏度构造梯度,调用梯度下降类算法迭代求优。目标函数 F 可以是状态变量偏离参考轨迹的积分,也可以是最小稳定裕度最大化。

优化问题写成:

其中 θ 是控制参数向量,F(θ) 代表动态性能指标,约束条件包含参数上下限和运行方式可行性约束。梯度 dF/dθ 由轨迹灵敏度链式求得。按这个思路实现一个简化示例:以 PSS 增益为参数,目标是让功角偏差的时间积分最小化。代码框架如下。

from scipy.optimize import minimize # 定义目标函数:功角偏差积分 def objective(theta): # theta[0] 是 PSS 增益,实际系统中 PSS 增益会改变阻尼 # 这里用阻尼系数 D 作为代理,体现“增益增加->阻尼增加”的趋势 D_eff = D + theta[0] * 0.02 sol = solve_ivp(swing_dynamics, t_span, z0, args=(Pm,), t_eval=np.linspace(0, 5, 501), events=None) # 新增阻尼项需要修改 swing_dynamics,这里仅演示优化流程 delta_ref = 0.5 cost = np.trapz((sol.y[0] - delta_ref)**2, sol.t) return cost # 梯度由轨迹灵敏度近似 def grad_objective(theta): h = 1e-4 grad = np.zeros_like(theta) for i in range(len(theta)): theta_plus = theta.copy() theta_plus[i] += h grad[i] = (objective(theta_plus) - objective(theta)) / h return grad res = minimize(objective, np.array([0.5]), method='BFGS', jac=grad_objective) print(res.x, res.fun)

注意这段代码为了可读性做了简化,实际电力系统控制优化中,PSS 增益对系统的影响不是简单替换成机械阻尼就能准确描述的。真实工程中应使用发电机详细模型(包括励磁系统、PSS 的传递函数),把控制参数接入到偏向方程里,再通过轨迹灵敏度计算梯度。但优化框架不变:目标函数、参数边界、梯度来源三者搭好之后,求解器可以按需更换。

4.3 多目标控制策略的折中设计

动态安全评估往往不是只看一个稳定指标。功角稳定、电压稳定、频率稳定可能是相互制约的。以自动电压控制为例,提升发电机端电压参考值有利于改善电压稳定,但可能恶化暂态功角稳定。轨迹灵敏度能给出每个指标对每个控制参数的梯度向量,组成一个灵敏度矩阵 S。多目标折中可以用加权求和的方式变成单目标优化,但权重选择带有经验性。

更结构化做法是用帕累托前沿。先固定一组参数边界,然后用加权法扫出帕累托集,把每个候选解对应的灵敏度向量列出来,决策者可以看到“牺牲 0.5% 功角裕度换 2% 电压裕度”这类权衡关系。轨迹灵敏度在这里的作用是当候选解变化时快速估计新解的指标,而不需要每个候选解都做一次完整非线性仿真。这就是轨迹灵敏度作为“替代模型”的核心优势,控制策略设计过程中可以少跑大量时域仿真。

4.4 从离线策略到在线预决策

控制策略最终要落到安全稳定控制装置上。轨迹灵敏度的在线应用路径可以这样描述:周期性刷新电网运行方式,对预想故障集计算关键轨迹灵敏度,把灵敏度结果与当前运行状态匹配,更新控制措施表。由于灵敏度本质上是一阶近似,在线更新时不需要每遇到一个新方式就跑全量仿真,只需要在原有基础上用灵敏度修正控制策略,适应能力大幅增强。

工程中要注意灵敏度在线应用的适用范围。当系统从一个运行点跨越到另一个运行点,中间参数变化很小时,一阶近似精度高;如果新方式较基准方式偏离较大,比如直流输送功率从额定值降到 50%,灵敏度本身的数值可能也发生很大变化,此时直接用旧灵敏度会出偏差,需要隔一段时间做一次完整的灵敏度重算。这个“重算周期”和“灵敏度有效期”是需要结合具体电网实测和误差统计分析来确定的。

5. 轨迹灵敏度在动态安全评估中的工程落地方案

5.1 与现有仿真工具的接口设计

实际项目中,不太可能从零编写完整的电力系统时域仿真程序,基本都是基于现有的机电暂态或电磁暂态仿真平台。轨迹灵敏度模块应该作为仿真平台的“后处理插件”,而不是重写求解器。接口设计的要点是能拿到两类数据:一是每次积分步的状态变量和代数变量值,二是微分方程组和代数方程组的雅可比矩阵。拿到雅可比矩阵之后,灵敏度方程可以通过独立模块组装并同步积分。

如果仿真平台支持解析雅可比矩阵输出,优先用解析形式,这样灵敏度计算精度最好。如果平台只支持数值雅可比,那么扰动法计算雅可比本身又会引入误差,此时需要把数值差分的步长调小一档,并观察灵敏度结果的平滑度。一个不光滑的灵敏度曲线往往是雅可比计算误差过大的信号,需要回查步长设置。

5.2 大规模系统的计算加速策略

轨迹灵敏度直接应用到大电网时会遇到计算瓶颈。针对这个问题,工程上有三个成熟策略。第一是子空间降维,对灵敏度向量做 PCA 或 POD 分解,只保留能量占比最大的前 k 个模态,忽略高阶小量;第二是伴随法 + 检查点技术,避免全轨迹存储;第三是并行化,把不同预想故障的灵敏度计算分配到不同计算节点上,因为各故障间完全独立。

搭配“轨迹灵敏度”在线应用的场景,还可以做动态筛选:先用简化模型(低频动态等值)计算粗灵敏度,筛选掉影响较小的参数,再对保留参数用详细模型做精算。这种两阶段筛选可以把计算量压缩一个量级。表 2 给出一个基准测试场景下使用加速策略前后的耗时对比。

表 2 某省级电网 3000 节点模型灵敏度计算耗时对比

方案参数个数扰动法耗时伴随法+检查点降维+并行(8核)
未加速50约 220s约 60s约 15s
两阶段筛选50→12约 80s约 25s约 6s

这个表里的绝对值是示意,实际系统和硬件配置不同,差异可能很大,但相对趋势是稳定的:两阶段筛选的效果非常明显,值得工程实现时优先考虑。

5.3 与热词“控制策略设计”的衔接——闭环校验

无论仿真里灵敏度算得多漂亮,最终都必须在闭环仿真中验证控制策略的有效性。闭环校验的标准做法是:用轨迹灵敏度设计出控制参数后,把这些参数代入详细模型重新仿真,观察故障后轨迹是否满足安全要求。如果第一次校验结果不达标,看灵敏度方向是否正确。

一个常见问题是控制参数变化方向和灵敏度符号搞反。比如灵敏度分析表明励磁增益增大会减小功角偏差,但如果刚好运行在某个超出线性范围的工况下,实际仿真结果可能相反。这就是一阶近似的边界。闭环校验还应该设置鲁棒性测试:在基准参数基础上按 ±5% 随机波动,重复 200 次蒙特卡洛仿真,统计安全指标满足率。满足率低于 95% 的控制策略应按“风险不可接受”处理。

5.4 一套可直接复用的评估流程模板

综合以上内容,落地一套动态安全评估流程可以分为七个步骤:第一步收集电网模型与运行方式数据;第二步定义预想故障集与安全指标;第三步对基准方式进行时域仿真并存储轨迹;第四步用扰动法或伴随法计算轨迹灵敏度矩阵;第五步根据灵敏度排序识别薄弱环节和主导参数;第六步设计控制策略并结合灵敏度优化参数;第七步闭环仿真和蒙特卡洛校验。每一步的数据接口和中间结果都建议落盘保存,这样后续运行方式更新后可以重算部分结果,而不是全部推倒重来。

其中第五步到第六步之间可以考虑引入少量机器学习模型做辅助:以灵敏度曲线作为特征输入,预测控制策略是否有效。但要注意,机器学习模型的训练数据来自仿真,泛化能力受限于样本覆盖范围,不能作为替代仿真验证的手段,只能做快速初筛。

5.5 新场景下的灵敏度在线修正

新能源占比持续提高的现代电网,系统惯量变低、动态特性变化快。此时在线修正灵敏度显得尤为重要。做法是:在每个调度周期,用实时量测数据对灵敏度进行在线辨识。具体来说,把历史上记录的实际扰动轨迹和模型预测轨迹做对比,用轨迹误差反推灵敏度的修正量。这个思路类似于卡尔曼滤波中的增益更新。

实现修正时有一个细节值得注意:量测数据往往是离散的相量测量单元(PMU)数据,而灵敏度计算基于模型,两者的时间基准必须对齐。推荐的做法是对 PMU 数据作重采样,统一到仿真时间轴,再利用滑动窗口内的误差均值平滑修正量。修正后的灵敏度比原始模型灵敏度更贴近系统实际,这样可以提升后续动态安全评估的准确性和可信度。

归根结底,轨迹灵敏度方法不是要替代传统的时域仿真,而是让仿真提供的信息更有决策价值。它把“系统会失稳吗”扩展成“是什么让系统失稳、哪个措施最有效、控制量设多大更安全”,这正是动态安全评估在工程上真正需要的答案。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询