【内有代码】节点导纳矩阵如何用代码实现?

在电力系统分析中,节点导纳矩阵(Y矩阵)是进行潮流计算、短路分析等研究的重要基础工具。


一、什么是节点导纳矩阵?

节点导纳矩阵是描述电力网络中各节点电压与电流关系的矩阵,其每个元素的定义如下:

  • 对角元素:某节点对地的导纳总和。
  • 非对角元素:某节点与其他节点之间导纳的负值。

数学表达为:

Y [ i , j ] = { ∑ 连接至节点  i  的导纳 i = j 节点  i  和  j  之间的导纳 i ≠ j Y[i,j] = \begin{cases} \sum \text{连接至节点 $i$ 的导纳} & i = j \\ \text{节点 $i$ 和 $j$ 之间的导纳} & i \neq j \end{cases} Y[i,j]={连接至节点 i 的导纳节点 i  j 之间的导纳i=ji=j


二、节点导纳矩阵的意义

1. 描述电力网络的基本特性

节点导纳矩阵是一个 N × N 的复数矩阵(其中 N 为电力系统的节点数量),它完整描述了电力网络中节点电压与注入电流的关系:

I = Y ⋅ V I = Y \cdot V I=YV
其中:
I : 节点注入电流向量 Y : 节点导纳矩阵 V : 节点电压向量 I: \text{节点注入电流向量} \\ Y: \text{节点导纳矩阵} \\ V: \text{节点电压向量} I:节点注入电流向量Y:节点导纳矩阵V:节点电压向量
通过导纳矩阵,可以直接建立节点的电流与电压之间的线性关系,从而为电力系统的分析提供基础。

2. 反映网络拓扑结构和支路特性

节点导纳矩阵的结构直接体现了电力系统的拓扑结构和支路的导纳特性:

对角元素(自导纳):一个节点与其他所有连接支路导纳的总和,反映该节点的对地导纳。
非对角元素(互导纳):节点之间的导纳负值,反映了节点之间支路的电气耦合关系。
通过导纳矩阵,可以轻松识别网络中节点和支路的连接情况。

3. 便于进行潮流计算

在电力系统的潮流计算中,节点导纳矩阵是核心数据结构之一。根据导纳矩阵,结合节点的注入功率或电流,可以求解网络中各节点的电压幅值和相位,从而了解电网的运行状态。

4. 用于短路计算

在短路分析中,节点导纳矩阵可用于快速计算短路电流和故障点的电压。例如:

通过矩阵变换得到等效阻抗。
分析故障点与系统其他部分的电气联系。

5. 为动态分析提供支持

在动态稳定分析和频率稳定分析中,节点导纳矩阵可结合生成机模型和负荷模型,建立电力系统的动态方程,分析电力系统在扰动下的稳定性。

6. 实现快速计算

节点导纳矩阵是稀疏矩阵,稀疏性源于实际电网的节点连接情况(不是所有节点都直接连接)。利用稀疏矩阵算法,能极大提升计算效率,尤其在大规模电力网络分析中。

7. 工程实际中的意义

优化电网设计:通过导纳矩阵分析网络的潮流分布和电压水平,优化电网配置。
故障定位:结合实际运行数据,利用导纳矩阵分析故障位置和影响范围。
电网安全性分析:评估电网在不同运行方式下的稳定性和可靠性。

总结

节点导纳矩阵是电力系统分析的核心工具,其意义体现在:

数学层面:建立节点电压与电流的线性关系。
工程层面:支持电网的潮流计算、短路分析、动态稳定分析等。 通过节点导纳矩阵,能够高效、直观地分析电网运行状态及其特性,为电网规划、运行和优化提供强有力的支撑。


三、节点导纳矩阵构建的基本步骤

  1. 获取网络拓扑结构(如支路连接关系)。
  2. 计算支路导纳 y = 1 / z y = 1/z y=1/z(其中 z z z 为支路阻抗)。
  3. 按公式构造节点导纳矩阵。

逻辑流程图

流程分解步骤:

初始化 𝑌 矩阵为 𝑁×𝑁 的零矩阵。
   遍历所有支路参数:
      提取起始节点、终止节点以及支路参数。
      计算支路导纳 𝑦。
      更新互导纳(非对角元素)。
      计算自导纳增量(对角元素)。
   更新导纳矩阵 𝑌。
返回完整的节点导纳矩阵。


四、代码逻辑分析

函数定义与输入参数

函数 YMatrix 的定义如下:

def YMatrix(row, coloum, ls):

函数有三个输入参数:

row:节点总数 𝑁,即导纳矩阵的大小为 𝑁×𝑁。
coloum:支路数量 𝑀,即电网中支路的条数。
ls:支路参数列表,每一条支路的参数包含:
ls[i][0]: 起始节点编号。
ls[i][1]: 终止节点编号。
ls[i][2]: 支路阻抗的实部 𝑅。
ls[i][3]: 支路阻抗的虚部 𝑋。
ls[i][4]: 支路虚部修正(如电纳 𝐵)。
ls[i][5]: 变压器变比(为 0 时表示没有变压器)。
ls[i][6]: 变压器方向(区分方向为 1:2 或 2:1)。

初始化节点导纳矩阵
Y = np.zeros(row*row, dtype=complex).reshape(row, row)

初始化一个大小为 𝑁×𝑁的零矩阵 𝑌,数据类型为复数 complex
矩阵用于存储节点之间的导纳关系。

遍历支路数据
for i in range(coloum):

遍历每一条支路的参数,根据支路数据更新节点导纳矩阵。

计算支路导纳
start = int(ls[i][0]) - 1
end = int(ls[i][1]) - 1
y = 1 / complex(ls[i][2], ls[i][3])

提取支路的起始节点和终止节点(数组索引从 0 开始)。
通过支路的阻抗 𝑍=𝑅+𝑗𝑋 计算导纳 𝑦=1/𝑍。

更新非对角元素(互导纳)
if(ls[i][5] == 0):  # 没有变压器
    Y[start][end] = -y
else:  # 有变压器
    Y[start][end] = -y / complex(ls[i][5])

如果支路没有变压器,直接设置互导纳 Y i j = − y Y_{ij} =-y Yij=y
如果支路有变压器,需根据变比 𝑘 修正互导纳: Y i j = − y k Y_{ij} = -\frac{y}{k} Yij=ky

计算对角元素增量(自导纳)
if (ls[i][5] != 0):  # 有变压器
    if ls[i][6] == 0:  # 方向 1:2
        delta = y
        delta2 = y / pow(ls[i][5], 2)
    else:  # 方向 2:1
        delta = y / pow(ls[i][5], 2)
        delta2 = y
else:  # 无变压器
    delta = y
    delta2 = y
  • 无变压器时:自导纳增量为 Δ i i = Δ j j = y Δii = Δjj = y Δii=Δjj=y

  • 有变压器时:

    • 如果方向为 1:2(低压侧到高压侧),修正为:
      • Δ i i = y , Δ j j = y / k 2 Δii = y,Δjj = y / k^2 Δii=yΔjj=y/k2
    • 如果方向为 2:1(高压侧到低压侧),修正为:
      • Δ i i = y / k 2 , Δ j j = y Δii = y / k^2,Δjj = y Δii=y/k2Δjj=y
更新节点导纳矩阵
Y[end][start] = Y[start][end]  # 矩阵对称性
Y[start][start] = Y[start][start] + delta + complex(0, ls[i][4])
Y[end][end] = Y[end][end] + delta2 + complex(0, ls[i][4])

非对角元素:互导纳满足对称性 Y i j = Y j i Y_{ij} =Y_{ji} Yij=Yji
对角元素:将自导纳增量 Δ i i , Δ j j Δii, Δjj Δii,Δjj和电纳修正 𝑗𝐵 累加到对应位置。

返回节点导纳矩阵
return Y

返回最终计算的节点导纳矩阵 𝑌


五、用 Python 实现节点导纳矩阵

以下是用 Python 编写的实现代码:

import openpyxl as op
import numpy as np
#计算节点导纳矩阵
def  YMatrix(row,coloum,ls):
    Y = np.zeros(row*row,dtype = complex).reshape(row, row)
    #print(Y)
    for i in range(coloum):
        start = int(ls[i][0])-1              #开始节点
        end = int(ls[i][1])-1                #终止节点
        y = 1/complex(ls[i][2],ls[i][3])     #导纳yT
        #print(complex(ls[i][5]))
        #计算yij
        if(ls[i][5]==0):                    #没有变压器
            Y[start][end] = -y
        else:
            Y[start][end] = -y / complex(ls[i][5])          #yT/k
        #计算delta_yii和delta2_yjj
        if (ls[i][5] != 0):                 #有变压器
            if ls[i][6] == 0:               #变压器方向为1:2
                delta = y
                delta2 = y / pow(ls[i][5], 2)
            else:                           #变压器方向为2:1
                delta = y / pow(ls[i][5], 2)
                delta2 = y
        else:
            delta = y
            delta2 = y
        Y[end][start] = Y[start][end]
        Y[start][start] = Y[start][start] + delta + complex(0,ls[i][4])
        Y[end][end] = Y[end][end] + delta2 + complex(0,ls[i][4])
    return Y

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值