MATLAB 电力系统潮流计算(采用稀疏矩阵,可计算1000节点)
MATLAB电力系统潮流计算
用MATLAB利用牛顿-拉夫逊法计算电科院22节点系统(使用稀疏技术),计算出各节点的电压相角、各支路的功率等。使用了稀疏计算技术,能计算1000节点以上的系统,且计算时间小于1秒。
计算思路
- 形成节点导纳矩阵,分析各节点的类型,找出待求量;
- 设定各节点电压的初值,并给定迭代误差判据;;
- 计算不平衡量;
- 求修正方程的系数矩阵,即雅可比矩阵的各元素;
- 形成雅可比矩阵,求解修正方程,得到各节点电压变化量;
- 计算各节点电压新值;
- 检查是否收敛,如不收敛,则运用各节点电压新值自第3步开始下一次迭代;
- 计算平衡节点功率和线路功率。
结果展示
22节点网络潮流计算
1047节点潮流计算
部分代码
读取文件
%% 取数据文件和参数
[open_filename] = uigetfile('.TXT');
data=dlmread(open_filename);
node_num=data(1,1); %节点数
branchnum=data(1,2); %支路数
balancenode=data(1,3); %平衡节点号数
v_balancenode=data(1,4); %平衡节点电压
base_power=data(1,6); %基准功率
convergence_accuracy=data(1,7); %运算精度
index=find(data(:,1)==0); %index存放矩阵中第一列为0的元素(区分各块参数)
Line=data(index(1)+1:index(2)-1,:); %线路为第一块
Line_ground=data(index(2)+1:index(3)-1,:); %对地支路为第二块
Transformer=data(index(3)+1:index(4)-1,1:6); %变压器为第三块
PQ=data(index(4)+1:index(5)-1,:); %PQ节点为第四块
PV=data(index(5)+1:index(6)-1,:); %PV节点为第五块
PV_num=PV(:,1); %PV节点数
R=Line(:,4);X=1j*Line(:,5); B=1j*Line(:,6);Z=R+X;Line_Y=1./Z; %Y是Z的逆矩阵,线路参数
Rt=Transformer(:,4); Xt=Transformer(:,5); k=Transformer(:,6); %变压器参数
Gt=Rt./(Rt.*Rt+Xt.*Xt);Bt=-Xt./(Rt.*Rt+Xt.*Xt);
Yt=Gt+1j.*Bt; Yt2=Yt./k; Yt3=Yt./k./k; %变压器等值电路参数
G_ground=1j*Line_ground(:,2); %对地支路参数
Nonzero_num=node_num+2*(size(Line,1)+size(Transformer,1)); %非零元素:对角线+2*(线路+变压器)
形成节点导纳矩阵(应用稀疏矩阵)
tic; %计时
Y=spalloc(node_num,node_num,Nonzero_num); %创建一个节点数*节点数的全零稀疏矩阵Y,该矩阵具有Nonzero_num个非零值的空间
node_i=Line(:,2);node_j=Line(:,3); %节点i、j
Y=Y-sparse(node_i,node_j,Line_Y,node_num,node_num)-sparse(node_j,node_i,Line_Y,node_num,node_num); %把互导纳放进Y的(node_i,node_j)和(node_j,node_i)位置
Y_new=Y;
i=1:node_num; %创建一个由1到22的行向量
Y=Y-sparse(i,i,sum(Y_new,2),node_num,node_num); %把自导纳放进Y的(i,i)位置node_i=Transformer(:,2);node_j=Transformer(:,3); %将变压器等值参数电路放进矩阵
Y=Y-sparse(node_i,node_j,Yt2,node_num,node_num)-sparse(node_j,node_i,Yt2,node_num,node_num); %互导纳
Y=Y+sparse(node_i,node_i,Yt3,node_num,node_num)+sparse(node_j,node_j,Yt,node_num,node_num); %自导纳i=Line_ground(:,1);
Y=Y+sparse(i,i,G_ground,node_num,node_num); %自导纳放入对地支路的G
i=Line(:,2);
Y=Y+sparse(i,i,B,node_num,node_num); %自导纳放入i支路的B
i=Line(:,3);
Y=Y+sparse(i,i,B,node_num,node_num); %自导纳放入j支路的B
Y_abs=abs(full(Y)); %形成导纳矩阵的幅值矩阵
Y_angle=angle(full(Y)); %导纳矩阵的相角矩阵
迭代设置
V=ones(node_num,1); %计算启动的电压幅值为1
deta=zeros(node_num,1); %相角为0
%deta=ones(node_num,1)*100*pi/180; %问9:平衡节点相角设为100°
V(PV(:,1),1)=PV(:,2); %PV节点电压设置
V(balancenode)=v_balancenode; %平衡节点电压设置
JDV=[deta;V]; %修正量的向量
P=(PQ(:,2)-PQ(:,4))/base_power; %取标幺值
Q=(PQ(:,3)-PQ(:,5))/base_power;
开始迭代的(部分代码)
count_max=15; %最大迭代次数为count_max
for count=0:count_max%% 功率方程不平衡量A=ones(node_num,1);deta_ij=deta*A'-A*deta'; %deta(ij)=deta(i)-deta(j)Pi_0=sum(diag(V)*(real(Y).*cos(deta_ij)+imag(Y).*sin(deta_ij))*diag(V),2);%计算PidP=P-Pi_0; %计算dPiQi_0=sum(diag(V)*(real(Y).*sin(deta_ij)-imag(Y).*cos(deta_ij))*diag(V),2);%计算QidQ=Q-Qi_0; %计算dQidP(balancenode)=0;dQ(balancenode)=0; %平衡节点的dP,Q设为0dQ(PV(:,1))=0; %pv节点的不平衡量dQ设为0JDPQ=[dP;dQ]; %修正方程的左边,dp,dq组成的列向量%% 雅可比矩阵(应用稀疏矩阵)非对角元部分[Jacobian_i,Jacobian_j]=find(Y);Jacobian_n=size(Jacobian_i,1); %Y中非零元素位置放到Jacobian_i,Jacobian_j中,Jacobian_n为Jacobian_i的行数
判断收敛条件
%% 判断是否收敛%DV=V.*delta_V; %Ddelta=[delta_deta;DV];delta_V=delta(node_num+1:2*node_num).*V;V=V-delta_V;deta=deta-delta(1:node_num);if max(abs(delta_V))<convergence_accuracy %达到收敛精度breakendtime=toc;
输出结果
%% 运行结束输出结果
disp('迭代次数:'),disp(count);
disp('迭代用时:'),disp(time);
if count>=count_max %不收敛disp('超过设置的最大迭代次数,结果不收敛!')
elsedisp('结果收敛,结果为:');jd_angle=deta.*180/pi; %相角弧度制转换为角度制disp('各节点电压:(幅值,相角)'),disp([V,jd_angle]);n_Line=size(Line,1); %线路参数长度n_trsnsformer=size(Transformer,1); %变压器参数长度S1=zeros(node_num);S2=zeros(node_num);
计算平衡节点功率、各支路功率、变压器支路功率等等
%% 计算平衡节点功率Sb=0;for t=1:node_numUi=V(t,1)*cos(deta(t,1))+1j*V(t,1)*sin(deta(t,1)); Us=V(balancenode,1)*cos(deta(balancenode,1))+1j*V(balancenode,1)*sin(deta(balancenode,1));Sb=Sb+conj(Y(balancenode,t))*conj(Ui);enddisp('平衡节点功率:'),Sb=Us*Sb
%% 画图显示结果subplot(2,2,1),plot(1:node_num,V)xlabel('节点号');ylabel('电压幅值');grid on;subplot(2,2,2),plot(1:node_num,jd_angle)xlabel('节点号');ylabel('电压角度');grid on;subplot(2,2,3),bar(P,'r');xlabel('节点号');ylabel('节点注入有功');grid on;subplot(2,2,4);bar(Q,'b'); xlabel('节点号');ylabel('节点注入无功');grid on;
end
完整源代码可私聊,或加qq1732523422
ps:不免费提供
MATLAB 电力系统潮流计算(采用稀疏矩阵,可计算1000节点)相关推荐
- matlab电力系统潮流计算软件matpower_衡真课堂 | 电力系统稳态与暂态分析
电力系统稳态分析 电力系统稳态运行指电力系统正常的.相对静止的运行状态. 电力系统稳态分析包括三个方面 ①电力系统的基本知识和等值网络: ②电力系统正常运行状况的分析和计算: ③电力系统有功功率-频率 ...
- matlab电力系统潮流计算,基于MATLAB的电力系统潮流计算
Abstract: MATLAB is used to calculate the load flow of the electric system. By comparing the calcula ...
- matlab电力系统潮流计算,大神们,求个电力系统潮流计算的matlab程序。
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 n=input('Please input n\n'); %n表示系统的节点数 d0=input('Please input d0\n'); %d0表示系 ...
- 电力系统潮流计算程序实现C语言版(动态节点+稀疏技术)
概述 电力系统潮流计算程序采用的是牛顿-拉夫逊法(直角坐标) 潮流计算程序的系统节点数是可以动态变化的,根据节点大小分配储存空间 为了减少储存空间和加快计算速度,根据电力系统节点导纳矩阵稀疏的特点,计 ...
- matlab 简单算例,(简单算例)基于Matlab的电力系统潮流编程计算.pdf
(简单算例)基于Matlab的电力系统潮流编程计算 基于Matlab的电力系统潮流编程计算 口黄扬威吴喜春郭志峰张斯翔 (三峡大学电气与新能源学院湖北·宜昌443002) 摘要:通过介绍电力系统的实际 ...
- 电气潮流运算Matlab怎么编程,基于Matlab的电力系统潮流编程计算
计算技术 信息发展 与 64 -- 科协论坛 · 2011 年第 6 期(下) -- 基于 Matlab 的电力系统潮流编程计算 □ 黄扬威 吴喜春 郭志峰 张斯翔 (三峡大学电气与新能源学院 湖北· ...
- pq法潮流计算matlab,基于MATLAB电力系统PQ潮流计算程序设计(范文1)
<基于MATLAB电力系统PQ潮流计算程序设计.doc>由会员分享,可免费在线阅读全文,更多与<基于MATLAB电力系统PQ潮流计算程序设计>相关文档资源请在帮帮文库(www. ...
- matlab 电力系统分析 毕设,基于MATLAB的P-Q分解法电力系统潮流计算毕业设计
基于MATLAB的P-Q分解法电力系统潮流计算毕业设计 摘 要 电力系统潮流计算是研究电力系统稳定运行情况的一种重要的计算,在电力系统规划设计和现有电力系统运行方式的研究中,都需要利用它来定量地分析比 ...
- pq算法matlab仿真,基于MATLAB电力系统PQ潮流计算程序设计最终版(模版2)
<基于MATLAB电力系统PQ潮流计算程序设计.doc>由会员分享,可免费在线阅读全文,更多与<基于MATLAB电力系统PQ潮流计算程序设计(最终版)>相关文档资源请在帮帮文库 ...
最新文章
- Python 之 matplotlib (十二) subplot
- mysql 以数组的形式插入更新表
- 【干货】Duang!看好产品是如何增加情感化设计的?
- SkGradientShader::CreateLinear 的参数。
- SpringBoot使用Thymeleaf模板
- U-Mail邮件服务器树状通讯录实现智能化应用
- css unchecked,详细介绍CSS中的伪选择器
- [html] html元素哪些标签是不可替换元素?哪些是可替换元素?
- 笔记本电脑锁_武汉笔记本电脑模型打样价格
- Ansible Inventory
- 合成资产挖矿项目 ARCx 启动流动性挖矿
- Java 实现--时间片轮转 RR 进程调度算法
- 不同VPC路由器通过静态路由、动态路由(OSPF)实现网络互通实战
- linux 桌面对比,七大顶级Linux桌面比较
- 数字全角转半角VBA
- 需求:解压获取ipa里面的图片在windows系统上打不开
- vscode切换中英文
- Xcode4.3.2修改默认公司名称
- mbp安装steam显示“steam_osx”已损坏,mac安装steam方法
- 计算机专科学校哪个好,哪个计算机高等专科学校好 哪个电脑学院好 哪个中专计算机学校好...