【电力系统】两节点电力系统的高斯 - 赛德尔(Gauss-Seidel)潮流计算MATLAB代码,求解电力网络中 PQ 节点(母线 2)的电压幅值和相角

简介: ✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。🔥 内容介绍 一、引言:潮流计算的核心意义与高斯 - 赛德尔算法的价值1.1 潮流计算:电力系统分析的 “基石”潮流计算是电力系统规划、运行与控制的核心基础,其本质是求解电力网络的稳态运行状态 —— 通过已知的负荷、电源参数,计算各母线的电压幅值、相角,以及线路功率流向与损耗。无论是电网

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

👇 关注我领取海量matlab电子书和数学建模资料

🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。

🔥 内容介绍
一、引言:潮流计算的核心意义与高斯 - 赛德尔算法的价值
1.1 潮流计算:电力系统分析的 “基石”
潮流计算是电力系统规划、运行与控制的核心基础,其本质是求解电力网络的稳态运行状态 —— 通过已知的负荷、电源参数,计算各母线的电压幅值、相角,以及线路功率流向与损耗。无论是电网扩容规划、新能源接入评估,还是调度运行中的安全校验,都离不开潮流计算的支撑。

1.2 两节点系统:潮流计算的 “入门模型”
两节点电力系统是最简单的电力网络拓扑(含 1 个平衡节点、1 个 PQ 节点),虽结构简单,但能直观体现潮流计算的核心逻辑。本文聚焦两节点系统,采用经典的高斯 - 赛德尔(Gauss-Seidel)迭代法,手把手演示 PQ 节点(未知电压幅值和相角)的求解过程,帮助读者快速掌握潮流计算的核心思路。

1.3 高斯 - 赛德尔算法:迭代法的 “经典代表”
高斯 - 赛德尔算法是潮流计算中最基础的迭代算法,核心优势是原理简单、计算量小、易实现—— 基于节点功率平衡方程,通过逐次迭代更新未知节点电压,直至满足收敛条件。虽收敛速度慢于牛顿 - 拉夫逊法,但对于简单系统(如两节点、三节点),是理解潮流计算本质的最佳切入点。

二、核心原理:两节点系统建模与高斯 - 赛德尔迭代公式
2.1 两节点系统拓扑与参数定义
2.1.1 系统结构
两节点系统由母线 1(平衡节点) 、母线 2(PQ 节点) 及连接线路组成,结构如下:

平衡节点(母线 1):电压幅值 V₁和相角 θ₁已知(通常设为 V₁=1.0∠0° pu,作为电压参考点),承担平衡系统功率损耗的角色;

PQ 节点(母线 2):注入有功功率 P₂、无功功率 Q₂已知(由负荷或电源决定),需求解电压幅值 V₂和相角 θ₂;

线路参数:线路阻抗 Z=R+jX(或导纳 Y=G+jB=1/Z,B 为线路电纳,忽略时 Y=G+j0)。

2.1.2 节点导纳矩阵(Y 矩阵)
两节点系统的节点导纳矩阵为 2×2 矩阵,核心是描述节点间的电气连接关系:

Image

Image

⛳️ 运行结果
Image

Image

📣 部分代码
%---------Initial settings-----------

clc;

clear;

close all

Convergence_Tolerance=1e-6; %Newton Raphon Convergence Tolerance

disp(['Convergence Tolerance, Ep:',num2str(Convergence_Tolerance)]);

%-----------------Node, tributary data---------------

% Node data

node = ...

[...

    1 3 0        0.065      0     0     1.06      0       0

    2 1 1.82    0.64       0     0       1       0       0

  ];

% Matrix formed by node data: column 1 node number, column 2 node type:1 - PQ 2 - PV 3 - balance

% column 3 load active, column 4 load reactive, column 5 generation active, column 6 generation reactive

% column 7 voltage real, column 8 voltage imaginary

% column 9 node-to-ground conductance

% Branch data

branch = ...

[...

%bus_i %bus_j % R % X % Bi/2 % k

1 2 0 0.034 0 1;

];

% bus_i denotes the first node of a branch.

% bus_j denotes the end node of the branch.

% R and X denote the branch resistance and reactance, respectively, and B denotes the dana.

% k denotes the transformer ratio of the first node to the last node.

n=size(node,1); %Number of nodes

l=size(branch,1); %Number of branches

%%--------------------------------------

%Calculating the nodal derivative matrix

%%--------------------------------------

Y=zeros(n); %Calculating the nodal conductance matrix

for j=1:l

s1=branch(j,1);s2=branch(j,2);  %s1 is the first segment node of each branch and s2 is the end node

kij=branch(j,6); %Branch transformer ratio

Y(s1,s2)=-1/( (branch(j,3)+1i*branch(j,4))*kij );

Y(s2,s1)=Y(s1,s2);

Y(s1,s1)=Y(s1,s1)+1/( (branch(j,3)+1i*branch(j,4))*kij^2 )+i*branch(j,5);  

Y(s2,s2)=Y(s2,s2)+1/(branch(j,3)+1i*branch(j,4))+i*branch(j,5);  

end

for a=1:n %--Calculation of conductivity to earth--

Y(a,a)=Y(a,a)+1i*node(a,9);

end

G=real(Y); %Nodal derivative matrix real part matrix

B=imag(Y); %Nodal derivative matrix imaginary part matrix

%%Newton Raphon method of calculating currents

e=node(:,7); %Initial value of the real part of the voltage

f=zeros(n,1); %Initial value of the imaginary part of the voltage

for a=1:n %Search to balance nodes

if node(a,2)==3

    slack=a;

end

end

it=0; %Number of iterations

Convergence=[];

while 1

DP=zeros(n,1); DQ=zeros(n,1); %Uneven measurement

Pi=zeros(n,1); Qi=zeros(n,1); %Nodal injected power calculated by the tidal equation

for a=1:n %Calculating Pi, Qi

   if node(a,2)==1 || node(a,2)==3 %Determined to be a PQ node

      for b=1:n

          Pi(a,1)=Pi(a,1)+e(a,1)*( G(a,b)*e(b,1)-B(a,b)*f(b,1) )+ f(a,1)*( G(a,b)*f(b,1)+B(a,b)*e(b,1) );

          Qi(a,1)=Qi(a,1)+f(a,1)*( G(a,b)*e(b,1)-B(a,b)*f(b,1) )- e(a,1)*( G(a,b)*f(b,1)+B(a,b)*e(b,1) );

      end

      DP(a,1)=( node(a,5)-node(a,3) )-Pi(a,1);  %Calculating unevenness

      DQ(a,1)=( node(a,6)-node(a,4) )-Qi(a,1);

   elseif node(a,2)==2  %Determined to be a PV node

       for b=1:n

          Pi(a,1)=Pi(a,1)+e(a,1)*( G(a,b)*e(b,1)-B(a,b)*f(b,1) )+ f(a,1)*( G(a,b)*f(b,1)+B(a,b)*e(b,1) );

          Qi(a,1)=e(a,1)^2+f(a,1)^2;

       end

      DP(a,1)=( node(a,5)-node(a,3) )-Pi(a,1);

      DQ(a,1)=node(a,7)^2-Qi(a,1);  %PV node voltage imbalance

   end  %Balance nodes regardless of

end

DPQ=zeros(2*n,1); %Integration of active, reactive and voltage inequalities into one matrix

for a=1:n

   DPQ(2*a-1,1)=DP(a,1);

   DPQ(2*a,1)=DQ(a,1);

end

DPQ([2slack-1,2slack],:)=[]; % The slack node is a balancing node and does not participate in iterations, remove

xV=zeros(n,1);   %Node voltage amplitude

xR=zeros(n,1);   %Node voltage phase angle

for a=1:n

   xV(a,1)=sqrt( e(a,1)^2+f(a,1)^2 );

   xR(a,1)=atan(f(a,1)/e(a,1))*180/pi;

end

disp(['Number of iteration:',num2str(it),' Max(|DP|,|DQ|):',num2str(max(abs(DPQ))),' Voltage Magnitude at bus 2:',num2str(xV(2,1)),' Voltage Angle at bus 2:',num2str(xR(2,1))]);

%If the inequality is less than the convergence accuracy, then the convergence condition has been reached and the iteration is skipped

Convergence=[Convergence;max(abs(DPQ))];

if max(abs(DPQ))<=Convergence_Tolerance

   break;

end

%If accuracy is achieved, the Jacobi matrix and corrections are calculated downwards and the iteration continues

H=zeros(n,n);  % Calculation of DP/De

N=zeros(n,n);  % Calculation of DP/Df

K=zeros(n,n);  % Calculate DQ/De for the PQ node and DU/De for the PV node

L=zeros(n,n);  % Calculate DQ/Df for the PQ node and DU/Df for the PV node

for a=1:n

   if node(a,2)==1 %Determined to be a PQ node

       for b=1:n

           if a~=b 

               H(a,b)=-( G(a,b)*e(a,1)+B(a,b)*f(a,1) );

               N(a,b)=B(a,b)*e(a,1)-G(a,b)*f(a,1) ;

               K(a,b)=B(a,b)*e(a,1)-G(a,b)*f(a,1) ;

               L(a,b)=G(a,b)*e(a,1)+B(a,b)*f(a,1) ;

           elseif a==b

               for c=1:n

                  H(a,b)=H(a,b)-( G(a,c)*e(c,1)-B(a,c)*f(c,1) ); 

                  N(a,b)=N(a,b)-( G(a,c)*f(c,1)+B(a,c)*e(c,1) );

                  K(a,b)=K(a,b)+( G(a,c)*f(c,1)+B(a,c)*e(c,1) );

                  L(a,b)=L(a,b)-( G(a,c)*e(c,1)-B(a,c)*f(c,1) );

               end

               H(a,b)=H(a,b)-G(a,a)*e(a,1)-B(a,a)*f(a,1);

               N(a,b)=N(a,b)+B(a,a)*e(a,1)-G(a,a)*f(a,1);

               K(a,b)=K(a,b)+B(a,a)*e(a,1)-G(a,a)*f(a,1);

               L(a,b)=L(a,b)+G(a,a)*e(a,1)+B(a,a)*f(a,1);

           end

       end

   elseif node(a,2)==2 %Determined to be a PV node

       for b=1:n

           if a~=b 

               H(a,b)=-( G(a,b)*e(a,1)+B(a,b)*f(a,1) );

               N(a,b)=B(a,b)*e(a,1)-G(a,b)*f(a,1) ;

               K(a,b)=0 ; 

               L(a,b)=0 ;

           elseif a==b

               for c=1:n

                  H(a,b)=H(a,b)-( G(a,c)*e(c,1)-B(a,c)*f(c,1) ); 

                  N(a,b)=N(a,b)-( G(a,c)*f(c,1)+B(a,c)*e(c,1) );

               end

               H(a,b)=H(a,b)-G(a,a)*e(a,1)-B(a,a)*f(a,1);

               N(a,b)=N(a,b)+B(a,a)*e(a,1)-G(a,a)*f(a,1);

               K(a,b)=-2*e(a,1); 

               L(a,b)=-2*f(a,1);

           end

       end

   end  %Balance nodes regardless of

end

jacobi=zeros(2*n); %Jacobi Matrix

for a=1:n

    for b=1:n

       jacobi(2*a-1,2*b-1)=H(a,b);

       jacobi(2*a-1,2*b)=N(a,b);

       jacobi(2*a,2*b-1)=K(a,b);

       jacobi(2*a,2*b)=L(a,b);

    end

end

jacobi([2*slack-1,2*slack],:)=[]; jacobi(:,[2*slack-1,2*slack])=[]; % The slack node is a balancing node and does not participate in iterations, remove



delt=-jacobi\DPQ;    %Calculation of corrections to variables



%Balance node (node with slack number) with e and f corrections of 0

if slack==1

    delt=[0;0;delt];

elseif slack==n

    delt=[delt;0;0];

else

    delt1=delt(1:2*slack-2,:);

    delt2=delt(2*slack-1:2*n-2,:);

    delt=[delt1;0;0;delt2];

end





for a=1:n

    e(a,1)=e(a,1)+delt(2*a-1,1);

    f(a,1)=f(a,1)+delt(2*a,1);

end





it=it+1; %Number of iterations

end

Pi=zeros(n,1); Qi=zeros(n,1);

for a=1:n %Calculating Pi, Qi

for b=1:n

    Pi(a,1)=Pi(a,1)+e(a,1)*( G(a,b)*e(b,1)-B(a,b)*f(b,1) )+ f(a,1)*( G(a,b)*f(b,1)+B(a,b)*e(b,1) );

    Qi(a,1)=Qi(a,1)+f(a,1)*( G(a,b)*e(b,1)-B(a,b)*f(b,1) )- e(a,1)*( G(a,b)*f(b,1)+B(a,b)*e(b,1) );

end

end

disp(['Active Power Injection at bus 2:',num2str(Pi(2,1)),' Reactive Power Injection at bus 2:',num2str(Qi(2,1))]);

figure(1);

k=1:it+1;

plot(k-1,Convergence(k,1),'-b'),xlabel('k'),ylabel('Convergence Tolerance'); hold on;

🔗 参考文献
[1]涂志军,曹晔,李伟,等.一种新型高斯塞德尔算法在电力系统潮流计算中的应用研究[J].江西科学, 2010, 28(6):4.DOI:10.3969/j.issn.1001-3679.2010.06.024.

图片
🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:

相关文章
|
5天前
|
人工智能 自然语言处理 Shell
🦞 如何在 Moltbot 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 Moltbot 配置阿里云百炼 API
|
3天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
4854 10
|
9天前
|
人工智能 API 开发者
Claude Code 国内保姆级使用指南:实测 GLM-4.7 与 Claude Opus 4.5 全方案解
Claude Code是Anthropic推出的编程AI代理工具。2026年国内开发者可通过配置`ANTHROPIC_BASE_URL`实现本地化接入:①极速平替——用Qwen Code v0.5.0或GLM-4.7,毫秒响应,适合日常编码;②满血原版——经灵芽API中转调用Claude Opus 4.5,胜任复杂架构与深度推理。
6564 10
|
3天前
|
人工智能 JavaScript API
零门槛部署本地 AI 助手:Clawdbot/Meltbot 部署深度保姆级教程
Clawdbot(Moltbot)是一款智能体AI助手,具备“手”(读写文件、执行代码)、“脚”(联网搜索、分析网页)和“脑”(接入Qwen/OpenAI等API或本地GPU模型)。本指南详解Windows下从Node.js环境搭建、一键安装到Token配置的全流程,助你快速部署本地AI助理。(239字)
3019 17
|
4天前
|
机器人 API 数据安全/隐私保护
只需3步,无影云电脑一键部署Moltbot(Clawdbot)
本指南详解Moltbot(Clawdbot)部署全流程:一、购买无影云电脑Moltbot专属套餐(含2000核时);二、下载客户端并配置百炼API Key、钉钉APP KEY及QQ通道;三、验证钉钉/群聊交互。支持多端,7×24运行可关闭休眠。
3256 4
|
4天前
|
人工智能 安全 Shell
在 Moltbot (Clawdbot) 里配置调用阿里云百炼 API 完整教程
Moltbot(原Clawdbot)是一款开源AI个人助手,支持通过自然语言控制设备、处理自动化任务,兼容Qwen、Claude、GPT等主流大语言模型。若需在Moltbot中调用阿里云百炼提供的模型能力(如通义千问3系列),需完成API配置、环境变量设置、配置文件编辑等步骤。本文将严格遵循原教程逻辑,用通俗易懂的语言拆解完整流程,涵盖前置条件、安装部署、API获取、配置验证等核心环节,确保不改变原意且无营销表述。
1929 5
|
4天前
|
存储 安全 数据库
使用 Docker 部署 Clawdbot(官方推荐方式)
Clawdbot 是一款开源、本地运行的个人AI助手,支持 WhatsApp、Telegram、Slack 等十余种通信渠道,兼容 macOS/iOS/Android,可渲染实时 Canvas 界面。本文提供基于 Docker Compose 的生产级部署指南,涵盖安全配置、持久化、备份、监控等关键运维实践(官方无预构建镜像,需源码本地构建)。
2287 7
|
13天前
|
JSON API 数据格式
OpenCode入门使用教程
本教程介绍如何通过安装OpenCode并配置Canopy Wave API来使用开源模型。首先全局安装OpenCode,然后设置API密钥并创建配置文件,最后在控制台中连接模型并开始交互。
5350 9
|
4天前
|
人工智能 应用服务中间件 API
刚刚,阿里云上线Clawdbot全套云服务!
阿里云上线Moltbot(原Clawdbot)全套云服务,支持轻量服务器/无影云电脑一键部署,可调用百炼平台百余款千问模型,打通iMessage与钉钉消息通道,打造开箱即用的AI智能体助手。
2471 21
刚刚,阿里云上线Clawdbot全套云服务!
|
4天前
|
人工智能 应用服务中间件 API
阿里云上线Clawdbot全套云服务,阿里云 Moltbot 全套云服务部署与使用指南
近期,阿里云正式上线 Moltbot(原名 Clawdbot)全套云服务,这套服务整合了 Agent 所需的算力、模型与消息应用能力,用户无需复杂配置,就能在轻量应用服务器或无影云电脑上快速启用 Moltbot,还能按需调用阿里云百炼平台的千问系列模型,同时支持 iMessage、钉钉等消息通道互动。相比传统本地部署方式,云服务方案不仅降低了硬件成本,还解决了网络依赖与多任务处理瓶颈,让普通用户也能轻松拥有专属 AI 助手。本文结合官方部署教程与全网实操经验,用通俗语言拆解从环境准备到功能使用的完整流程,同时说明核心组件的作用与注意事项,帮助用户顺利落地 Moltbot 云服务。
1853 0
阿里云上线Clawdbot全套云服务,阿里云 Moltbot 全套云服务部署与使用指南