Python 实现G-S法矩阵潮流计算——blog13

本文详细介绍了如何使用Python实现Gauss-Seidel方法来解决电力系统中的潮流问题,包括形成节点导纳矩阵、预设电压初值、设置迭代次数、计算精度以及通过Tk创建的人机交互界面。
摘要由CSDN通过智能技术生成

目录

​编辑

概述

代码实现

0.导入所需库

1.形成节点导纳矩阵

2.预设电压初值和无功值

3.设置迭代次数

4.计算精度

5.通过前后精度判断收敛

6.简易人机交互界面(tk)

觉得有帮助的小伙伴还请点个关注


概述

Gauss-Seidel(G-S)法是一种常用的潮流计算方法,用于解决电力系统中的潮流问题。其基本思想是通过迭代计算,不断更新节点电压和功率,直到满足收敛条件为止。

其优点是简单易实现,收敛速度较快。然而,由于G-S法是一种迭代计算方法,也可能会出现不收敛的情况,具体问题具体分析。

代码实现

0.导入所需库

import time
import numpy as np
import tkinter as tk

1.形成节点导纳矩阵

n = input("请输入节点个数:")
'''
mat = []
sap = []
'''
theta = float(input("请输入功率因数角:"))
m = np.zeros((int(n), int(n)))
for t in range(int(n)):
    m[t][t] = float(input(f"请输入第{t + 1}节点的自导纳:"))
    if t > 0:
        for c in range(t):
            m[c][t] = m[t][c] = float(input(f"请输入第{t + 1}-{c + 1}节点互导纳:"))
    time.sleep(0.1)
#print(f"{m}\nx\n{m}\n=\n{m * m}")
print(f"节点导纳矩阵为\n{m}")

2.预设电压初值和无功值

U = []
U_1 = []
Q = []
P = []
for a in range(int(n)):
    U_0 = float(input(f"请输入{a + 1}节点的电压初值:"))
    Q_0 = float(input(f"请输入注入{a + 1}节点的无功:"))
    P_0 = float(input(f"请输入注入{a + 1}节点的有功:"))
    U.append(U_0), Q.append(Q_0), P.append(P_0), U_1.append(U_0)
  • 对于发电机节点:根据功率注入和节点电压得到电流注入,然后通过导纳得到其他节点的电流注入,并更新节点电压。
  • 对于负荷节点:根据功率消耗和节点电压得到电流注入,并更新节点电压。
  • 对于支路:根据节点电压差和导纳得到支路电流,更新节点电压。

3.设置迭代次数

k = int(input("请输入迭代次数:"))


def diedai(i, U):
    i = i
    # i为节点编号,Yii = m[i][i]
    # Yij = m[i][for j in range(i)]
    U_ = (complex(float(P[i]), - float(Q[i])) / U[i])
    for b in range(int(n) - 1):
        if b + 2 != i and b + 2 < int(n):
            U_ = U_ - m[i][b + 2] * U[b + 2]
    return U_
#迭代式

4.计算精度

for k_ in range(k):
    for i in range(int(n)):
        U[i] = diedai(i, U)

5.通过前后精度判断收敛

if k - 1 != 0:
    for k_1 in range(k - 1):
        for i in range(int(n)):
            U_1[i] = diedai(i, U)
#print(f"精度差:{U[0] - U_1[0]}")

print(U)

S = []

for t in range(int(n)):
    s = complex(U[t] * np.cos(theta), U[t] * np.sin(theta))
    S.append(s)

6.简易人机交互界面(tk)

def root_tk():
    root = tk.Tk()
    root.geometry("800x840")
    root.title("G-S法潮流计算")
    photo = tk.PhotoImage(file="back_0.gif")
    theLabel = tk.Label(root,
                        text="",  # 内容
                        justify=tk.LEFT,  # 对齐方式
                        image=photo,  # 加入图片
                        compound=tk.CENTER,  # 关键:设置为背景图片
                        font=("华文行楷", 20),  # 字体和字号
                        fg="black")  # 前景色
    theLabel.pack()
    lb1 = tk.Label(text="请输入节点个数:", fg="blue", bg="lightblue")
    en1 = tk.Entry(fg="blue", bg="lightblue")
    en1.place(relx=0.33, rely=0.12, relheight=0.06, relwidth=0.3)
    lb1.place(relx=0.11, rely=0.13)

    lb2 = tk.Label(text="请依次输入节点自导纳(用逗号隔开)):", fg="blue", bg="lightblue")
    en2 = tk.Entry(fg="blue", bg="lightblue")
    en2.place(relx=0.2, rely=0.26, relheight=0.06, relwidth=0.45)
    lb2.place(relx=0.11, rely=0.21)

    lb3 = tk.Label(text="请依次输入节点互导纳(用逗号隔开)):", fg="blue", bg="lightblue")
    en3 = tk.Entry(fg="blue", bg="lightblue")
    en3.place(relx=0.2, rely=0.4, relheight=0.06, relwidth=0.45)
    lb3.place(relx=0.11, rely=0.35)

    lb4 = tk.Label(text="请依次节点电压(初值,有功,无功;初值……)):", fg="blue", bg="lightblue")
    en4 = tk.Entry(fg="blue", bg="lightblue")
    en4.place(relx=0.2, rely=0.54, relheight=0.06, relwidth=0.45)
    lb4.place(relx=0.11, rely=0.49)

    lb3 = tk.Label(text="请输入迭代次数:", fg="blue", bg="lightblue")
    en3 = tk.Entry(fg="blue", bg="lightblue")
    en3.place(relx=0.33, rely=0.62, relheight=0.06, relwidth=0.1)
    lb3.place(relx=0.11, rely=0.63)

    lb4 = tk.Label(text="确定", relief="raised", fg="blue", bg="lightblue")
    lb4.place(relx=0.11, rely=0.73)

    txt = en1.get()
    print(txt)
    root.mainloop()


root_tk()

觉得有帮助的小伙伴还请点个关注

后续会持续分享 免费、高质量 的高校相关以及Python学习文章

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值