简介这份《电力系统分析》复习题整理文档面向电气工程专业学生及备考电力系统分析课程考试的学习者系统梳理了课程中的核心考点与典型题型。内容覆盖选择题、填空题、问答题及计算题四大板块涉及电抗单位、无限大功率电源、有功与无功功率流动、变压器等值参数、标幺值计算、中枢点逆调压、消弧线圈补偿、单相接地故障分析等关键知识点并配有互联系统调频、三相短路冲击电流等综合计算示例。资源包共1个docx文件约1.16MB文档结构清晰、公式与题目排版规整可直接编辑使用便于打印复习或整理成个人笔记。目前已有68人学习下载。读者可借助这份资料快速定位高频考点通过填空与问答巩固基本概念再结合计算题训练解题思路适合作为期末冲刺、补考复习或考研初试的辅助练习材料。1. 从一份《电力系统分析》复习题整理.docx 说起为什么整理完还是不会做题带过几届电气专业的课程辅导之后我发现一个很普遍的现象几乎每个人手里都有一份《电力系统分析》复习题整理.docx但真正到了考场上该不会的还是不会。这份文档通常长这样——几十道计算题堆在一起潮流计算、短路计算、稳定性分析混着放答案要么是手写拍照转的文字要么是从教材课后题答案里复制粘贴的中间步骤大量省略。你打开它感觉什么都有你合上它脑子里什么都没留下。问题不在复习题本身而在于“整理”这个动作做错了方向。电力系统分析这门课的核心不是记住某道题的答案而是掌握一套建模—计算—校验的流程。潮流计算要会列节点导纳矩阵、设初值、迭代收敛短路计算要会画序网图、求等效阻抗、算冲击电流静态稳定要会列功角特性、判断极限功率。这些流程如果只靠看题是看不出来的必须自己动手把每类题跑通一遍。所以这篇笔记要讲的是怎么把一份零散的复习题整理文档变成一套可复现、可验证、可扩展的复习系统。适合正在备考电气类研究生入学考试、期末考或者注册电气工程师基础考试的人也适合刚上讲台、需要快速梳理知识框架的年轻教师。接下来的内容会从文档结构怎么拆、每类题怎么建模板、参数怎么设、哪里容易翻车几个角度展开最后给一个我自己一直在用的进阶技巧。2. 把复习题按计算流程重新分类从“题型”到“流程节点”2.1 为什么按章节分类是低效的大多数复习题整理文档是按教材章节分的第三章潮流计算、第四章短路计算、第五章稳定性分析。这个分法对第一轮复习有用但到了第二轮、第三轮你会发现很多题跨章节。比如一道题先让你做潮流再基于潮流结果做短路计算最后判断暂态稳定。你按章节去找得翻三个地方。更合理的做法是按计算流程节点分类。电力系统分析的计算流程可以拆成几个核心节点网络建模、潮流求解、故障分析、稳定性判据。每道题不管出现在哪一章都可以归到其中一个或多个节点上。这样整理之后你复习的不是“第三章”而是“潮流求解”这个动作本身。我一般会建一个表格把每道题映射到流程节点上同时标注它用到的原始数据节点数、支路数、发电机参数和输出量电压幅值、相角、短路电流、极限功角。这个表格就是后续建模板的基础。流程节点典型输入典型输出常见题号网络建模支路阻抗、变压器变比节点导纳矩阵3-1, 3-5潮流求解导纳矩阵、PQ/PV节点分类电压幅值与相角3-8, 3-12故障分析序网参数、故障类型短路电流、序分量4-2, 4-7稳定性判据功角特性、故障切除时间极限切除角、稳定裕度5-3, 5-92.2 用 Python 建一个可复用的节点导纳矩阵生成器网络建模是后面所有计算的地基。复习题里给的支路数据格式不统一有的用阻抗有的用导纳有的标幺值有的有名值。与其每次手算不如写一个通用函数把支路表转成节点导纳矩阵。这样不管题目怎么变只要输入支路参数矩阵就自动出来了。import numpy as np def build_ybus(n_bus, branches): 根据支路表生成节点导纳矩阵 n_bus: 节点数 branches: 列表每个元素为 (from, to, R, X, B) from/to 从 1 开始编号R/X 为标幺值B 为线路总充电电纳 返回: n_bus x n_bus 的复数矩阵 Y np.zeros((n_bus, n_bus), dtypecomplex) for f, t, R, X, B in branches: y_series 1 / (R 1j * X) # 对角元素累加串联导纳和并联电纳 Y[f-1, f-1] y_series 1j * B / 2 Y[t-1, t-1] y_series 1j * B / 2 # 非对角元素为负的串联导纳 Y[f-1, t-1] - y_series Y[t-1, f-1] - y_series return Y # 示例3节点系统支路1-22-31-3 branches [ (1, 2, 0.02, 0.06, 0.03), (2, 3, 0.08, 0.24, 0.025), (1, 3, 0.06, 0.18, 0.02) ] Y build_ybus(3, branches) print(np.round(Y, 4))这段代码的关键在于支路表的格式统一。R和X必须是标幺值如果题目给的是有名值先除以基准阻抗。B是线路总充电电纳对角元素里加的是B/2这是常用的π型等效。非对角元素只减串联导纳不加并联部分。运行之后得到的矩阵可以直接用于后续潮流计算。参数说明n_bus是节点总数包括平衡节点、PV节点和PQ节点。branches里每条支路的from和to必须和节点编号一致不能有重复支路。如果题目里有变压器把变压器等效成π型或者直接用变比修正导纳不要混在branches里。2.3 潮流计算的牛顿-拉夫逊法模板有了导纳矩阵下一步就是潮流求解。复习题里最常考的是牛顿-拉夫逊法因为它的收敛性好而且步骤固定。我一般会写一个模板函数把雅可比矩阵的构建和迭代过程封装起来这样每道题只需要改输入数据。def newton_raphson_power_flow(Y, S_spec, V_init, pq_buses, pv_buses, tol1e-6, max_iter20): 牛顿-拉夫逊潮流计算 Y: 节点导纳矩阵 S_spec: 指定功率注入复数数组PQ节点为给定值PV节点P给定Q未知 V_init: 初始电压复数数组 pq_buses: PQ节点索引列表0-based pv_buses: PV节点索引列表0-based tol: 收敛精度 max_iter: 最大迭代次数 返回: 收敛后的电压数组迭代次数 n len(V_init) V V_init.copy() for it in range(max_iter): # 计算注入电流和功率 I Y V S_calc V * np.conj(I) # 功率不平衡量 dS S_spec - S_calc # 只取PQ节点的有功和无功PV节点的有功 mismatch [] for i in pq_buses: mismatch.append(dS[i].real) mismatch.append(dS[i].imag) for i in pv_buses: mismatch.append(dS[i].real) mismatch np.array(mismatch) if np.max(np.abs(mismatch)) tol: return V, it # 构建雅可比矩阵此处省略具体元素计算按教材公式填充 # J ... # 求解修正量并更新电压 # dx np.linalg.solve(J, -mismatch) # V update_voltage(V, dx, pq_buses, pv_buses) return V, max_iter这个模板的核心是功率不平衡量的组装顺序先PQ节点的有功、无功再PV节点的有功。雅可比矩阵的维度是2*n_pq n_pv。每次迭代后PQ节点的电压幅值和相角都修正PV节点只修正相角幅值保持不变。平衡节点的电压和相角都不修正。参数说明S_spec里平衡节点的值可以随便填因为不参与不平衡量计算。V_init一般用平启动PQ节点设1.0∠0°PV节点幅值设给定值、相角设0°。tol取1e-6足够再小可能因为浮点误差不收敛。max_iter设20如果20次还不收敛大概率是雅可比矩阵写错了或者初值太离谱。3. 短路计算和稳定性分析的模板化处理从序网图到极限切除角3.1 对称短路和不对称短路的统一处理思路短路计算是复习题里最容易出错的环节因为不对称短路要画序网图正序、负序、零序三个网络还要根据故障类型连接。很多整理文档里只给最终答案中间序网怎么连的完全省略。我的做法是先建一个通用的序阻抗矩阵生成函数然后根据故障类型选择边界条件。def sequence_impedance(Z1, Z2, Z0, fault_type, fault_bus): 计算不同故障类型下的等效序阻抗 Z1/Z2/Z0: 正序/负序/零序阻抗矩阵 fault_type: 3ph 三相短路, slg 单相接地, ll 两相短路, llg 两相接地 fault_bus: 故障节点索引0-based 返回: 正序等效阻抗用于计算短路电流 z1 Z1[fault_bus, fault_bus] z2 Z2[fault_bus, fault_bus] z0 Z0[fault_bus, fault_bus] if fault_type 3ph: return z1 elif fault_type slg: return z1 z2 z0 elif fault_type ll: return z1 z2 elif fault_type llg: return z1 (z2 * z0) / (z2 z0) else: raise ValueError(未知故障类型)三相短路的等效阻抗就是正序阻抗因为只有正序分量。单相接地是三个序阻抗串联。两相短路是正序加负序。两相接地是正序加上负序和零序的并联。这个函数把四种故障类型的边界条件统一了你只需要准备好三个序网的阻抗矩阵。参数说明Z1、Z2、Z0都是n x n的复数矩阵分别由正序、负序、零序网络参数生成。对于静止元件负序阻抗等于正序阻抗对于旋转电机负序阻抗和正序不同题目一般会单独给。零序阻抗取决于变压器接线方式和接地方式如果题目没给默认零序网络不连通Z0对应元素设无穷大。3.2 静态稳定极限功率和极限切除角的计算稳定性分析在复习题里通常分两种静态稳定和暂态稳定。静态稳定考的是功角特性P E*U*sin(delta)/X求极限功率就是令sin(delta)1。暂态稳定考的是等面积定则求极限切除角。这两个计算都有固定套路但等面积定则的积分容易算错。import scipy.integrate as integrate def critical_clearing_angle(Pm, Pmax_pre, Pmax_post, Pmax_fault, delta0): 用等面积定则求极限切除角 Pm: 原动机机械功率 Pmax_pre: 故障前功角特性幅值 Pmax_post: 故障后功角特性幅值 Pmax_fault: 故障期间功角特性幅值 delta0: 初始功角 返回: 极限切除角弧度 # 故障后稳定平衡点 delta_max np.pi - np.arcsin(Pm / Pmax_post) # 加速面积等于减速面积 def decel_area(delta_c): return integrate.quad(lambda d: Pmax_post * np.sin(d) - Pm, delta_c, delta_max)[0] def accel_area(delta_c): return integrate.quad(lambda d: Pm - Pmax_fault * np.sin(d), delta0, delta_c)[0] # 二分法求根 lo, hi delta0, delta_max for _ in range(50): mid (lo hi) / 2 if accel_area(mid) decel_area(mid): hi mid else: lo mid return (lo hi) / 2这段代码的核心是加速面积和减速面积的平衡。故障期间机械功率大于电磁功率转子加速面积是Pm - Pmax_fault*sin(delta)从delta0到delta_c的积分。故障切除后电磁功率恢复转子减速面积是Pmax_post*sin(delta) - Pm从delta_c到delta_max的积分。两个面积相等时的delta_c就是极限切除角。参数说明Pm是机械功率一般等于故障前的电磁功率。Pmax_pre、Pmax_post、Pmax_fault分别对应故障前、故障后、故障期间的功角特性幅值由E*U/X计算其中X在不同阶段不同。delta0由arcsin(Pm/Pmax_pre)得到。二分法的区间是[delta0, delta_max]delta_max是故障后功角特性的不稳定平衡点。3.3 把复习题数据批量导入模板的脚本有了上面这些函数下一步就是把复习题整理文档里的数据提取出来批量跑一遍。我一般会把文档里的题目数据整理成 CSV 或者 JSON然后用脚本读取、计算、输出结果。这样既能验证自己的手算答案也能快速发现哪些题的数据有问题。import json def load_and_solve(json_file): 读取题目数据并调用相应计算函数 json_file: 包含题目数据的 JSON 文件 with open(json_file, r, encodingutf-8) as f: problems json.load(f) results [] for p in problems: if p[type] power_flow: Y build_ybus(p[n_bus], p[branches]) V, it newton_raphson_power_flow( Y, np.array(p[S_spec], dtypecomplex), np.array(p[V_init], dtypecomplex), p[pq_buses], p[pv_buses] ) results.append({id: p[id], V: V.tolist(), iter: it}) elif p[type] short_circuit: Z1 np.linalg.inv(build_ybus(p[n_bus], p[branches_z1])) Z2 np.linalg.inv(build_ybus(p[n_bus], p[branches_z2])) Z0 np.linalg.inv(build_ybus(p[n_bus], p[branches_z0])) z_eq sequence_impedance(Z1, Z2, Z0, p[fault_type], p[fault_bus]) results.append({id: p[id], z_eq: z_eq}) return results这个脚本的关键是 JSON 文件的结构要统一。每道题至少包含id、type和对应的参数。type决定调用哪个计算函数。潮流题需要n_bus、branches、S_spec、V_init、pq_buses、pv_buses。短路题需要n_bus、branches_z1、branches_z2、branches_z0、fault_type、fault_bus。稳定性题需要Pm、Pmax_pre、Pmax_post、Pmax_fault、delta0。参数说明JSON 文件用 UTF-8 编码避免中文注释乱码。S_spec和V_init用列表表示复数实部和虚部分开或者用字符串10j格式。pq_buses和pv_buses用 0-based 索引和 Python 的列表索引一致。如果题目数据有误脚本会抛出异常根据异常信息定位到具体题目。4. 整理复习题时最容易翻车的五个地方4.1 标幺值基准不一致导致全网数据错乱现象潮流计算迭代不收敛或者短路电流算出来大得离谱。检查代码没问题但结果就是不对。原因复习题整理文档里不同题目用的基准功率和基准电压不一样。有的题基准功率取100MVA有的取1000MVA有的题基准电压取平均额定电压有的取变压器额定电压。你把它们混在一起算标幺值就乱了。解决每道题单独建一个基准表记录S_base和V_base。所有阻抗、功率、电压在进入计算函数之前先统一到同一基准。如果题目给的是有名值先除以基准值转成标幺值。如果题目给的标幺值基准不同用Z_new Z_old * (S_new/S_old) * (V_old/V_new)^2换算。4.2 变压器变比处理成非标准变比时漏掉移相现象节点导纳矩阵不对称潮流计算出来的电压相角差和预期不符。原因复习题里的变压器有时候用非标准变比k而且k是复数包含移相角。很多人在建导纳矩阵时只考虑了幅值比忽略了相角导致矩阵不对称。解决非标准变比变压器的导纳矩阵修正公式是Y_ij -y/kY_ji -y/conj(k)Y_ii和Y_jj也要相应修正。如果k是实数矩阵对称如果k是复数矩阵不对称。检查方法很简单打印导纳矩阵看它是否对称。不对称是正常的对称反而可能漏了移相。4.3 序网连接时零序网络接地阻抗搞错现象单相接地短路电流算出来偏大或偏小和答案对不上。原因零序网络里变压器的接线方式决定零序电流能不能流通。Y0/Δ 接线的变压器零序电流在 Δ 侧环流不流出Y0/Y0 接线的变压器零序电流可以流通。复习题里经常不明确说接线方式你得从题目描述里推断。解决先画零序网络图标出每个变压器的接线方式和中性点接地阻抗。Y0/Δ 接线时零序网络在 Δ 侧断开Y0/Y0 接线时零序网络连通但中性点接地阻抗要乘以3。如果题目给了零序阻抗矩阵直接查对应元素如果没给按接线方式手动构建。4.4 等面积定则积分区间取错现象极限切除角算出来大于delta_max或者小于delta0明显不合理。原因加速面积的积分上限是切除角delta_c下限是初始角delta0减速面积的积分上限是delta_max下限是delta_c。如果delta_c的搜索区间设错了二分法会收敛到错误的值。解决先确认delta0 delta_c delta_max。delta0由故障前功角特性决定delta_max由故障后功角特性决定。如果Pm大于Pmax_post系统本来就不稳定不存在极限切除角。检查Pmax_fault是否小于Pm如果大于故障期间转子加速加速面积可能为负说明故障期间电磁功率反而大于机械功率这种情况很少见需要重新审题。4.5 复习题答案本身有错现象你按标准流程算出来的结果和整理文档里的答案不一致反复检查代码和手算都没问题。原因复习题整理文档的来源很杂有的是学长手写的有的是从不同教材复制粘贴的答案可能抄错、漏步骤、甚至用错公式。尤其是短路计算和稳定性分析中间步骤多抄错一个符号结果就全错。解决不要迷信文档里的答案。用你的模板跑一遍如果结果和答案不一致先检查输入数据是否抄对再检查公式是否用对。如果都对了大概率是答案错了。这时候以你的计算为准把正确答案标注在文档里。我一般会在文档里加一列“验证结果”用脚本跑出来的值填进去和原答案对比不一致的标红。5. 用参数扫描验证复习题答案一个我一直在用的进阶技巧前面讲的都是怎么把复习题整理成可计算、可复现的模板。但模板跑出来的结果对不对还需要验证。我常用的方法是参数扫描把题目里的某个关键参数比如故障切除时间、变压器变比、负荷功率在一个合理范围内连续变化观察输出量的变化趋势。如果趋势符合物理规律说明模型和代码是对的如果趋势突变或者不单调说明某个环节有问题。举个例子。一道暂态稳定题给定故障切除时间t_c求系统是否稳定。你可以把t_c从0.1秒扫到0.5秒步长0.01秒对每个t_c计算极限切除角然后判断实际切除角是否小于极限切除角。如果t_c小于某个临界值时系统稳定大于时不稳定这个临界值就是极限切除时间。这个扫描过程能帮你直观理解稳定裕度的概念也能验证单点计算的正确性。import numpy as np def scan_clearing_time(Pm, Pmax_pre, Pmax_post, Pmax_fault, delta0, tc_range): 扫描故障切除时间返回每个时间点的稳定判断 tc_range: 切除时间数组 results [] for tc in tc_range: # 假设切除角与切除时间成正比比例系数由转子运动方程决定 # 这里简化处理实际应用需要解摇摆方程 delta_c delta0 100 * tc # 示例比例实际需根据惯性时间常数计算 delta_lim critical_clearing_angle(Pm, Pmax_pre, Pmax_post, Pmax_fault, delta0) stable delta_c delta_lim results.append({tc: tc, delta_c: delta_c, delta_lim: delta_lim, stable: stable}) return results tc_range np.arange(0.1, 0.5, 0.01) results scan_clearing_time(0.8, 1.5, 1.2, 0.5, 0.5, tc_range) for r in results: print(ftc{r[tc]:.2f}s, delta_c{r[delta_c]:.3f}, delta_lim{r[delta_lim]:.3f}, stable{r[stable]})这段代码里的delta_c和tc的关系是简化的实际应该解转子运动方程d²δ/dt² (ω0/M)(Pm - Pe)。但即使简化你也能看到稳定判断随切除时间的变化趋势。如果delta_lim不随tc变化因为它是故障后系统的属性而delta_c随tc线性增加那么临界tc就是delta_c delta_lim的那个点。参数说明tc_range的范围根据题目给的惯性时间常数M和初始功角delta0估计。一般tc在0.1到0.5秒之间。delta_c的计算如果不用摇摆方程可以用等面积定则反推给定delta_c加速面积等于减速面积解出对应的tc。但更直接的方法是数值积分摇摆方程得到delta(t)曲线看delta是否超过delta_max。这个参数扫描的方法还有一个好处它能帮你发现复习题里的“边界题”。有些题目的参数刚好在稳定和不稳定的临界点上答案可能因为四舍五入而模棱两可。扫描之后你能看到稳定裕度有多大如果裕度很小说明这道题本身设计得不好考试时如果遇到类似题要特别小心计算精度。我自己复习的时候会把每类计算题都做一次参数扫描把扫描结果画成曲线贴在复习题旁边。这样复习的时候不光是看一道题的答案而是看一个参数变化范围内系统行为的全貌。血泪经验是考试里最容易错的不是计算本身而是参数边界条件。比如题目问“当负荷增加到多少时系统失去稳定”你如果只算一个点很容易漏掉另一个解。扫描能帮你找到所有临界点。最后说一个习惯我整理任何复习题文档都会在最后留一页“验证记录”写清楚每道题用什么脚本跑的、输入数据是什么、输出结果是什么、和原答案是否一致。这样过一个月再回头看不用重新算直接看验证记录就知道当时怎么想的。希望帮到你。本文还有配套的精品资源点击获取
