
简介这份资源是河南工业大学电力系统分析课程设计的潮流计算完整报告面向电气工程及自动化专业学生、电力系统课程学习者与需要完成同类课设的读者可用于梳理潮流计算原理、完成计算与仿真、撰写课程设计说明书。文档以PDF形式交付共1个文件压缩包约376KB内容为一份结构完整的设计报告从设计目的、设计要求与算例题目入手依次讲解电力系统、潮流计算与牛顿-拉夫逊算法的基本原理并说明MATLAB仿真思路。报告重点解析了节点类型划分、待求量选取、节点导纳矩阵形成与潮流方程列写随后给出程序框图、算例计算与结果分析并附总结、参考文献与附录。依托一份含1.2j2.4Ω等有名值参数的算例读者可对照掌握建模、编程与结果校验的完整流程也可作为课设排版与内容组织的参考。目前已有1510人学习下载。1. 电力系统分析课程设计里的潮流计算到底交付什么课程设计一般不会给你现成答案而是丢过来一张接线图、一张支路参数表和一组发电机与负荷数据要求你算出全网每个节点的电压幅值和相角再回代出各条支路的功率、全网网损和平衡节点的出力。标题里电力系统分析和潮流计算这两个词落到课程设计上就是一条固定的流水线把电网抽象成节点导纳矩阵把已知量归到 PQ、PV、平衡三类节点用迭代法解那组非线性功率方程。河南工业大学的这类题目通常控制在 3 到 14 个节点手算到 5 个节点就开始崩所以多数人会用 MATLAB 把算法写出来。这一章先把交付物定清楚一份能收敛、结果对得上参考答案的程序加上一份说明数据来源、假设和校验过程的报告。谁在跟这门课谁就绕不开这条线。2. 节点分类、导纳矩阵与牛顿-拉夫逊法潮流计算的三个地基在动手敲代码之前有三件事必须先想明白否则程序跑起来只会给你一堆 NaN 或者发散的迭代值。第一是节点怎么分类第二是节点导纳矩阵怎么拼第三是牛顿-拉夫逊法的修正方程怎么列。这三件事对应潮流计算的数据层、网络层和算法层缺一个都做不下去。2.1 PQ、PV、平衡节点的划分规则和物理含义每个节点有四个状态量有功 P、无功 Q、电压幅值 V、电压相角 θ。功率方程本身是二阶的四个量全未知就解不出来所以每个节点必须给定其中两个。给定量的不同组合就把节点分成了三类这也是潮流计算里最基础的一张对照表。节点类型已知量待求量典型对应数量约束PQ 节点P、QV、θ负荷母线、恒功率发电任意多个PV 节点P、VQ、θ带励磁调节的发电厂至少 0 个平衡节点V、θP、Q主调频厂、大容量机组有且仅有 1 个PQ 节点最好理解负荷要多少有功无功就是多少电压随网压浮动。PV 节点对应发电厂有功由汽轮机出力决定电压由励磁系统维持无功是算出来多少就是多少。平衡节点承担全网网损它的有功无功都不事先给定而是迭代收敛后由功率平衡反推出来。这里有个新手最容易踩的坑平衡节点选错位置网损分配就不合理报告里的平衡机出力会离谱。2.2 Ybus 的构造为什么支路参数要写成 π 型等值节点导纳矩阵 Ybus 是潮流计算里唯一一个只跟网络结构有关的量节点分类和数据怎么变它都不变。线路按 π 型等值处理串联支路是 RjX两端各并一个对地导纳通常是线路充电电容的一半。变压器则写成理想变压器变比加串联阻抗的形式非标准变比要标清楚在哪一侧。对角元和非对角元的口诀很固定对角元 Y(i,i) 接在节点 i 上的所有支路导纳与对地导纳之和非对角元 Y(i,j) 节点 i 和 j 之间串联支路导纳的负值没有支路就是 0下面这段 MATLAB 函数是我常用的写法输入是一张支路表输出就是复数导纳矩阵。function Y build_ybus(branch, nb) % branch: [from to R X B tap]tap0 表示普通线路无变压器 % nb: 节点总数 Y zeros(nb, nb); for k 1:size(branch,1) f branch(k,1); t branch(k,2); R branch(k,3); X branch(k,4); B branch(k,5); % 线路总充电电纳 tap branch(k,6); if tap 0 tap 1; end y 1/(R 1j*X); % 串联支路导纳 % 对角元i 侧还要除以变比平方 Y(f,f) Y(f,f) y/(tap^2) 1j*B/2; Y(t,t) Y(t,t) y 1j*B/2; % 非对角元考虑变比 Y(f,t) Y(f,t) - y/tap; Y(t,f) Y(t,f) - y/tap; end end逻辑上就是按支路逐条叠加到矩阵里对角元做加法累加所有连接关系非对角元只在两个端点之间写一次负导纳。参数里最需要留意的是tap变压器支路如果算例给的变比是 1.05 这种非标准值写错一边就会导致潮流从变压器侧漏掉。另外B的单位要和 R、X 一致全都用标幺值否则量纲会乱。2.3 牛顿-拉夫逊法的修正方程与雅可比矩阵有了 Ybus 和节点数据就可以列功率方程。节点 i 的注入功率写成极坐标形式是P_i V_i * Σ V_j (G_ij cosθ_ij B_ij sinθ_ij) Q_i V_i * Σ V_j (G_ij sinθ_ij - B_ij cosθ_ij)θ_ij θ_i - θ_jG、B 是 Ybus 元素的实部和虚部。这组方程是超越方程直接解没有闭式只能迭代。牛顿-拉夫逊法的做法是把不平衡量 ΔP、ΔQ 在当前点做泰勒展开取一阶项得到线性修正方程[ΔP] [H N] [Δθ ] [ΔQ] [M L] [ΔV/V]H、N、M、L 四个分块统称雅可比矩阵。H 是 ΔP 对 Δθ 的偏导L 是 ΔQ 对 ΔV/V 的偏导N 和 M 是交叉项。雅可比矩阵的维数等于未知量个数如果全网有 n 个节点一个平衡节点m 个 PV 节点那么 θ 有 n-1 个未知V 有 n-1-m 个未知矩阵就是 (2n-2-m) 阶的方阵。迭代顺序是算不平衡量 → 组雅可比 → 解线性方程得 Δθ 和 ΔV/V → 更新 θ 和 V → 判断 max|ΔP|、max|ΔQ| 是否小于收敛精度 ε一般取 1e-5 到 1e-6。收敛快是牛顿法的优点初值合适时 3 到 5 次就能压到精度内代价是每次迭代都要重新组雅可比并做一次 LU 分解。3. 用 MATLAB 把牛顿-拉夫逊潮流计算写成可跑的脚本地基讲清楚之后剩下就是把它翻译成代码。我一般把程序拆成四块数据录入与标幺化、Ybus 生成、迭代主循环、结果回代。拆开写的好处是出错时定位快改了算例不用动主循环。3.1 原始数据的录入格式与标幺化算例通常给的是有名值写程序前第一步是统一到标幺值。基准功率取 100 MVA 最常见基准电压按各电压等级取平均额定电压。节点表我习惯用矩阵存一行一个节点。% 节点数据: [bus_id type Pg Qg Pl Ql Vm theta] % type 1 为 PQ, 2 为 PV, 3 为平衡节点 % Pg/Qg/Pl/Ql 单位 MW/MvarVm 是初值(pu)theta 是初值(度) bus [ 1 3 0 0 0 0 1.05 0; 2 2 50 0 20 10 1.02 0; 3 1 0 0 60 30 1.00 0; ]; baseMVA 100; bus(:,3:6) bus(:,3:6) / baseMVA; % 功率标幺化 bus(:,8) bus(:,8) * pi/180; % 相角转弧度这里最重要的是把发电减负荷的净注入提前算出来省得在主循环里反复算。参数baseMVA一变全网所有功率数据都要跟着变所以这个值一般不在中途改。节点初值按 1.0 平启动PV 和平衡节点用给定电压值PQ 节点用 1.0这套初值对课程设计规模的算例基本都能一次收敛。3.2 节点注入功率和雅可比组装主循环每一轮要做的事是把当前电压代进去算注入功率然后和不平衡量作差。为了不让代码过长我把功率计算单独封成函数返回 P、Q 两个列向量。function [P, Q] calc_power(Y, V, theta) % 计算所有节点的注入功率 nb length(V); P zeros(nb,1); Q zeros(nb,1); for i 1:nb for j 1:nb G real(Y(i,j)); B imag(Y(i,j)); d theta(i) - theta(j); P(i) P(i) V(i)*V(j)*(G*cos(d) B*sin(d)); Q(i) Q(i) V(i)*V(j)*(G*sin(d) - B*cos(d)); end end end这个双层循环的写法直观缺点是慢节点数一多就要向量化。课程设计规模下不用优化能看懂比跑得快更重要。两个返回值 P、Q 是当前电压下的实际注入下一步要用它们和给定值做差得到 ΔP、ΔQ。注意平衡节点的 P、Q 和 PV 节点的 Q 不参与不平衡量因为它们本身就是待求量。3.3 雅可比矩阵的分块和迭代终止条件雅可比矩阵的组装是整段代码里最容易写错的地方分块位置搞混迭代就会原地打转。我的经验是把 H、N、M、L 分开写最后用[H N; M L]拼起来这样报错时能一眼看出是哪一块。% 假设已经算好 P_calc、Q_calc并整理出待求变量索引 tol 1e-6; max_iter 20; for iter 1:max_iter [P_calc, Q_calc] calc_power(Y, V, theta); dP Pspec - P_calc; % 只取 PQ 与 PV 节点的 P dQ Qspec - Q_calc; % 只取 PQ 节点的 Q if max(abs([dP; dQ])) tol fprintf(第 %d 次迭代收敛\n, iter); break; end % 组装雅可比 J [H N; M L]此处省略逐元素偏导展开 dx J \ [dP; dQ]; % 解线性修正方程 % 回写更新量 theta(idx_theta) theta(idx_theta) dx(1:n_theta); V(idx_V) V(idx_V) dx(n_theta1:end) .* V(idx_V); end这里有两个细节值得说明。J \ [dP; dQ]用的是 MATLAB 的左除内部走 LU 分解不要写成inv(J)*...。第二个是电压的更新方式牛顿法修正的是 ΔV/V也就是相对变化量所以回写时要乘回当前 V写成V V dV会把量纲弄错这是新手最常见的一个隐形 bug。3.4 结果回代支路功率、网损和平衡节点功率收敛之后拿到的只是各节点电压报告要的支路功率和网损还得再算一遍。支路 i 到 j 的功率用 π 型等值两端分别算% 逐条支路计算潮流 for k 1:size(branch,1) f branch(k,1); t branch(k,2); y 1/(branch(k,3) 1j*branch(k,4)); Bc branch(k,5); Vf V(f)*exp(1j*theta(f)); Vt V(t)*exp(1j*theta(t)); Sft Vf * conj((Vf - Vt)*y 1j*Bc/2*Vf); % f 端流向 t 端 Stf Vt * conj((Vt - Vf)*y 1j*Bc/2*Vt); % 反向 Sloss Sft Stf; % 支路损耗 end三个量里Sft和Stf是两端各自的视在功率Sloss是这一条支路的损耗。全网网损就是所有支路损耗的和它应该等于平衡节点注入减去所有负荷加上所有发电机出力这个等式是后面校验程序对不对的关键。4. 课程设计实战算例调试、不收敛定位与报告数据整理程序写出来只是第一步能不能通过课程设计答辩看的还是算例跑出来的结果合不合理。这一章讲三个实际问题怎么用小算例验证、不收敛时怎么查、以及报告里那些表格从哪来。4.1 用三节点手算例验证程序不要一上来就跑 14 节点那样出错无从下手。我一般先构造一个三节点的教科书算例PQ、PV、平衡三种节点各占一个自己手算一遍首轮迭代再和程序对。手算的重点是 Ybus 和第一轮不平衡量手算的首轮 ΔP、ΔQ 和程序打印的值对不上基本可以确定是 Ybus 或节点分类写错了。这个手算例的另一个用处是验证平衡节点的注入功率手算等于全网负荷加网损时说明功率平衡关系没错。4.2 常见不收敛的五个原因和定位方法牛顿-拉夫逊法在课程设计规模下发散八成是下面五个原因之一。现象可能原因定位方法首轮 ΔP 巨大标幺化漏做或基准不一致检查各节点 P 的数量级迭代值来回震荡雅可比分块错位用小算例逐块核对偏导第二三轮回弹PV 节点无功越限打印各 PV 节点 Q 值NaN 出现Ybus 有孤立节点检查每行是否全零收敛但网损为负支路方向或变比写反核对支路表 from/to排查顺序我习惯从数据层往上查先打印 Ybus 看有没有明显异常再打印首轮不平衡量最后才怀疑雅可比。绝大多数问题都出在前两步雅可比反而不容易写错。4.3 PV 节点无功越限后的处理课程设计里经常给一个 PV 节点的无功上下限迭代过程中如果算出来的 Q 超过上限物理上意味着这台机组不能再维持给定电压了。这时要把该节点从 PV 转成 PQ把 Q 固定在限值上V 变成待求量然后重新迭代。这个转换在程序里就是改一下节点类型索引重新组一次雅可比。很多同学忽略这一步结果电压算出来偏离额定值很多报告里解释不清其实原因就是没做 PV-PQ 转换。做法上我一般加一个判断每轮迭代结束后检查 PV 节点的 Q越限就标记下一轮改用 PQ 处理最多允许转一次避免反复横跳。4.4 输出报告需要的表格一份完整的课程设计报告潮流结果部分至少要四张表。% 节点结果表: [节点号 V(pu) theta(度) P注入 Q注入] % 支路结果表: [首端 末端 P_ij Q_ij P_ji Q_ji 损耗] % 网损汇总: 总网损 平衡节点注入 - 总负荷 % 迭代信息: 迭代次数、最终 max|dP| 和 max|dQ|把这四张表整理成 CSV 或直接打印成 LaTeX 表格报告的结果与分析一节就有东西可写了。max|dP|和max|dQ|的最终值要写在报告里它是收敛性的直接证据比只写程序收敛有说服力得多。5. 进阶PQ 分解法加速与潮流结果的交叉校验牛顿-拉夫逊法能解出结果但每次迭代组雅可比开销不小。工程上更常用的是 PQ 分解法它利用高压电网里 R 远小于 X 的特点做两个简化有功不平衡主要影响相角无功不平衡主要影响电压幅值于是把雅可比拆成两个低阶矩阵分别迭代。课程设计里用不用看算例规模超过 10 个节点时 PQ 分解法的迭代次数会明显少一些单次迭代也更快。代价是它对 R/X 比敏感配电网这种 R 不小的场景不适合用。5.1 PQ 分解法的简化假设和边界PQ 分解法的核心是把修正方程写成 BΔθ ΔP/V 和 BΔV ΔQ/V 两组B 和 B 是常数矩阵只需在迭代前组一次之后每轮只算不平衡量和做一次三角分解。% B 用 Ybus 的虚部构成迭代中保持不变 Bp -imag(Y(idx_theta, idx_theta)); Bpp -imag(Y(idx_V, idx_V)); % 每次迭代 dtheta Bp \ (dP ./ V(idx_theta)); dV Bpp \ (dQ ./ V(idx_V)); theta(idx_theta) theta(idx_theta) dtheta; V(idx_V) V(idx_V) dV;这个写法的迭代次数一般比牛顿法多一两次但每轮省掉了雅可比重组的开销。边界在于R/X 比超过 0.5 左右时收敛性会变差所以纯输电网算例才推荐它。另外注意Bp和Bpp的符号取负号是因为极坐标下的偏导符号约定写错会导致第一步就发散。5.2 用功率平衡和网损做交叉校验结果出来之前一定做两件事反向验证。第一件是全网功率平衡平衡节点的有功注入应该等于总负荷有功加网损误差在 1e-4 以内算合格。第二件是电压合理性所有节点电压应该在 0.95 到 1.05 之间超出范围的通常是 PV 节点没做无功越限转换或者负荷过大接近电压崩溃点。提示网损为负数基本可以断定支路方向或变压器变比写反不要急着改收敛精度那样只会把错误藏起来。还有一种更严格的校验方式把牛顿拉夫逊法和 PQ 分解法分别跑一遍两者的节点电压差应该在小数点后四位以上一致不一致就说明某个方法的分块或符号有问题。这套互查习惯能省掉答辩现场被追问时的手忙脚乱也是把潮流计算从能跑做成可信的最后一步。本文还有配套的精品资源点击获取