当前位置:首页 >> 电力/水利 >>

MATLAB牛顿拉夫逊法算潮流分析


%本程序的功能是用牛顿——拉夫逊法进行潮流计算
% B1矩阵:1、支路首端号; 2、末端号; 3、支路阻抗; 4、线路对地电纳 (或变压器导纳);
% 5、支路的变比; 6、支路首端处于K侧为1,1侧为0;
% 7、线路/变压器标识(0/1)变压器参数当支路首端处于K侧标识为1时归算至末端侧,0归算至首端侧

/>% B2矩阵:1、该节点发电机功率; 2、该节点负荷功率;
% 3、PQ节点电压初始值,或平衡节点及PV节点电压的给定值
% 4、节点所接无功补偿并联电容(感)的电纳
% 5、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;3为PV节点;
clear;
isb=1; %input('请输入平衡母线节点号:isb=');
pr=1e-5; %input('请输入误差精度:pr=');
%---------------------------------------------------
n=10;%input('请输入节点数:n=');
nl=10;%input('请输入支路数:nl=');
B1=[1 2 3.4+12.8i 1.4e-4i 1 0 0;
1 4 5.1+19.2i 2.1e-4i 1 0 0;
2 3 4.25+16i 1.75e-4i 1 0 0;
4 5 4.25+16i 7e-4i 1 0 0;
1 3 5.1+19.2i 2.1e-4i 1 0 0;
6 4 5.95+22.4i 9.8e-4i 1 0 0;
2 7 1.78+53.89i 0 38.5/231 0 1;
3 8 1.49+48.02i 0 11/231 0 1;
4 9 1.49+48.02i 0 11/231 0 1;
5 10 2.46+70.17i 0 38.5/231 0 1] %input('请输入由支路参数形成的矩阵: B1=');
B2=[0 0 225.5 0 1;
0 0 220 0 2;
0 0 220 0 2;
0 0 220 0 2;
0 0 220 0 2;
120 0 231 0 3;
0 61.11+37.87i 35 0 2;
0 47.53+29.46i 10 0 2;
0 54.32+33.66i 10 0 2;
0 40.74+25.25i 35 0 2] %input('请输入各节点参数形成的矩阵: B2=');
%-------------------------------------------------------------
%n=4;%input('请输入节点数:n=');
%nl=4;%input('请输入支路数:nl=');
%B1=[1 2 4+16i 0 1 0 0;
%1 3 4+16i 0 1 0 0;
%2 3 2+8i 0 1 0 0;
%2 4 1.49+48.02i 0 11/110 0 1] %input('请输入由支路参数形成的矩阵: B1=');
%B2=[0 0 115 0 1;
%0 0 110 0 2;
%0 20+4i 110 0 2;
%0 10+6i 10 0 2] %input('请输入各节点参数形成的矩阵: B2=');
%-------------------------------------------------------------
Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);sida=zeros(1,n);S1=zeros(nl);
% % %-----------求导纳矩阵------------------------
for i=1:nl %从1到n1(总支路数)
if B1(i,7)==1 %-----------如果是变压器支路--------
if B1(i,6)==0 %左节点(首端)处于1侧
p=B1(i,1);q=B1(i,2);
else %左节点(首端)处于K侧
p=B1(i,2);q=B1(i,1);
end
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5)); %非对角元
Y(q,p)=Y(p,q); %非对角元
Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2); %对角元K侧
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4); %对角元1侧+励磁导纳
else %------------否则为线路支路--------------------
p=B1(i,1);q=B1(i,2);
Y(p,q)=Y(p,q)-1./B1(i,3); %非对角元
Y(q,p)=Y(p,q); %非对角元
Y(q,q)=Y(q,q)+1./B1(i,3)+B1(i,4)./2.0; %对角元j侧+线路电纳的一半
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2.0; %对角元i侧+线路电纳的一半
end
end
disp('导纳矩阵 Y=');disp(Y);
%-----------给定各节点初始电压及给定各节点注入功率--------------------------
G=real(Y);B=imag(Y); %分解出导纳阵的实部和虚部
for i=1:n %给定各节点初始电压的实部和虚部
e(i)=real(B2(i,3));
f(i)=imag(B2(i,3));
V(i)=abs(B2(i,3)); %PV、平衡节点及PQ节点电压模值
end
for i=1:n %给定各节点注入功率
S(i)=B2(i,1)-B2(i,2); %i节点注入功率SG-SL
B(i,i)=B(i,i)+B2(i,4); %i节点无功补偿量(电纳值)
end
%==================用牛顿-拉夫逊法迭代求解非线性代数方程(功率方程)=======================
P=real(S);Q=imag(S); %分解出各节点注入的有功和无功功率
ICT1=0;IT2=1;N0=2*n;N1=N0+1;a=0; %迭代次数ICT1、a;不满足收敛要求的节点数IT2
while IT2~=0 % N0=2*n 雅可比矩阵的阶数;N1=N0+1扩展列
IT2=0;a=a+1;
JZ=['Jacobi矩阵第(',num2str(a),')次消去运算'];JZ1=['Jacobi矩阵第(',num2str(a),')次回代运算'];JZ0=['功率方程第(',num2str(a),')次差值:'];
%----------------求取各个节点的功率及功率偏差及PV节点的电压偏差--------------------
for i=1:n %n个节点2n行(每节点两个方程P和Q或U)
p=2*i-1;m=p+1;C(i)=0;D(i)=0;
for j1=1:n %第i行共n列(n个节点间互导纳及节点电压相乘即电流)
C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);%Σ(Gij*ej-Bij*fj)
D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);%Σ(Gij*fj+Bij*ej)
end
%求i节点有功和无功功率P',Q'的计算值
P1=C(i)*e(i)+f(i)*D(i);%节点功率P计算eiΣ(Gij*ej-Bij*fj)+fiΣ(Gij*fj+Bij*ej)
Q1=C(i)*f(i)-e(i)*D(i);%节点功率Q计算fiΣ(Gij*ej-Bij*fj)-eiΣ(Gij*fj+Bij*ej)
V2=e(i)^2+f(i)^2; %电压模平方
%===求取功率差及PV节点电压模平方差 =========
if i~=isb %非平衡节点(PQ或PV节点)
if B2(i,5)~=3 %非PV节点(只能是PQ节点)
J(m,N1)=P(i)-P1; %PQ节点有功功率差J(m,N1)扩展列△P
J(p,N1)=Q(i)-Q1; %PQ节点无功功率差J(p,N1)扩展列△Q
else %PV节点==================
J(m,N1)=P(i)-P1; %PV节点有功功率差J(m,N1)扩展列△P
J(p,N1)=V(i)^2-V2; %PV节点电压模平方差J(p,N1)扩展列△U
end
end %(if i~=isb) 非平衡节点(PQ或PV节点)
end %(for i=1:n) n个节点2n行(每节点两个方程P和Q或U)
for m=1:N0
JJN1(m)=J(m,N1);
end
disp(JZ0);disp(JJN1);
%-------------判断功率偏差量及PV节点的电压偏差量是否满足要求-----------------
for k=3:N0 %除去平衡节点1、2号以外的所有节点
DET=abs(J(k,N1));
if DET>=pr %PQ节点的功率偏差量及PV节点的电压偏差量是否满足要求
IT2=IT2+1; %不满足要求的节点数加1
end
end
ICT2(a)=IT2; %不满足要求的节点数;a为迭代次数
ICT1=ICT1+1; %迭代次数
if ICT2(a)==0; %当前不满足要求的节点数为零
break %退出迭代运算
end
%--------------------以上为求取各个节点的功率及功率偏差及PV节点的电压偏差-------------
%================= 求取Jacobi矩阵形成修正方程 ===================
for i=2:n %n个节点2n行(每节点两个方程P和Q或U)
if i~=isb %非平衡节点(PQ或PV节点)
if B2(i,5)~=3 %下面是针对PQ节点来求取Jacobi矩阵的元素 ===========
C(i)=0;D(i)=0;
for j1=1:n %第i行共n列(n个节点间互导纳及节点电压相乘即电流)
C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);%Σ(Gij*ej-Bij*fj)
D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);%Σ(Gij*fj+Bij*ej)
end
for j1=2:n %第i行共n列(2n个Jacobi矩阵元素dP/de及dP/df或dQ/de及dQ/df)
if j1~=isb&j1~=i %非平衡节点&非对角元
X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % X1=dP/de=-dQ/df=-X4
X2=B(i,j1)*e(i)-G(i,j1)*f(i); % X2=dP/df=dQ/de=X3
X3=X2; % X2=dp/df X3=dQ/de
X4=-X1; % X1=dP/de X4=dQ/df
p=2*i-1;q=2*j1-1;
J(p,q)=X3;m=p+1; % X3=dQ/de J(p,N)=DQ节点无功功率差 J(p,N)=DQ;
J(m,q)=X1;q=q+1; % X1=dP/de J(m,N)=DP节点有功功率差 J(m,N)=DP;
J(p,q)=X4;J(m,q)=X2; % X4=dQ/df X2=dp/df
elseif j1==i&j1~=isb %非平衡节点&对角元
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df
X3=D(i)+B(i,i)*e(i)-G(i,i)*f(i); % dQ/de
X4=-C(i)+G(i,i)*e(i)+B(i,i)*f(i);% dQ/df
p=2*i-1;q=2*j1-1;J(p,q)=X3;%扩展列△Q J(p,N)=DQ;
m=p+1;
J(m,q)=X1;q=q+1;J(p,q)=X4;%扩展列△P J(m,N)=DP;
J(m,q)=X2;
end
end
else %if B2(i,5)~=3 否则(即为PV节点)
%=============== 下面是针对PV节点来求取Jacobi矩阵的元素 ===========
for j1=1:n
if j1~=isb&j1~=i %非平衡节点&非对角元
X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % dP/de
X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df
X5=0;X6=0;
p=2*i-1;q=2*j1-1;J(p,q)=X5; % PV节点电压误差J(p,N)=DV;
m=p+1;
J(m,q)=X1;q=q+1;J(p,q)=X6; % PV节点有功误差J(m,N)=DP;
J(m,q)=X2;
elseif j1==i&j1~=isb %非平衡节点&对角元
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df
X5=-2*e(i);
X6=-2*f(i);
p=2*i-1;q=2*j1-1;J(p,q)=X5; % PV节点电压误差J(p,N)=DV;
m=p+1;
J(m,q)=X1;q=q+1;J(p,q)=X6; % PV节点有功误差J(m,N)=DP;
J(m,q)=X2;
end
end
end %(if B2(i,5)~=3 else)
end %(if i~=isb)
end %(for i=1:n)n个节点2n行(每节点两个方程P和Q或U)
JZ0=['形成的第(',num2str(a),')次Jacobi矩阵:'];
%disp(JZ0);disp(J);
%=============================== 以上为形成完整的Jacobi矩阵 ================================
%====下面用高斯消去法对由Jacobi矩阵形成的修正方程进行求解(按列消去、回代) ==========
for k=3:N0 % N0=2*n (从第三行开始,第一、二行是平衡节点)
for k1=k+1:N1 % 从k+1列的Jacobi元素到扩展列的△P、△Q 或 △U
J(k,k1)=J(k,k1)./J(k,k);% 用K行K列对角元素去除K行K列后的非对角元素进行规格化
end
J(k,k)=1; % 对角元规格化K行K列对角元素赋1
%================== 按列消去运算 ==================================
for k2=k+1:N0 % 从k+1行到2*n最后一行
for k3=k+1:N1 %从k2+1列到扩展列消去k+1行后各行下三角元素
J(k2,k3)=J(k2,k3)-J(k2,k)*J(k,k3);%消去运算
end %用当前行K3列元素减去当前行K列元素乘以第k行K3列元素
J(k2,k)=0; %当前行第k列元素已消为0
end
end
%JZ=['Jacobi矩阵第(',num2str(a),')次消去运算'];JZ1=['Jacobi矩阵第(',num2str(a),')次回代运算'];
%disp(JZ);disp(J);
%==================== 按列回代运算 =======================================
for k=N0:-1:3
for k1=k-1:-1:3
J(k1,N1)=J(k1,N1)-J(k1,k)*J(k,N1);
J(k1,k)=0;
end
end
for m=1:N0
JJN1(m)=J(m,N1);
end
disp(JZ1);disp(JJN1);%disp(J);
%----------------------------------修改节点电压-------------------------------
for k=3:2:N0-1
L=(k+1)./2;
e(L)=e(L)-J(k,N1); %修改节点电压实部
k1=k+1;
f(L)=f(L)-J(k1,N1); %修改节点电压虚部
U(L)=sqrt(e(L)^2+f(L)^2);
end
disp('各个节点电压模');disp(U);
%============================== 结束一次迭代 ==============================
end
%********************** 下面为迭代计算结束后的有关输出过程 *****************
disp('迭代次数:');
disp(ICT1-1);
disp('没有达到精度要求的个数:');
disp(ICT2);
for k=1:n
V(k)=sqrt(e(k)^2+f(k)^2); %计算各节点电压的模值
sida(k)=atan(f(k)./e(k))*180./pi; %计算各节点电压的角度
E(k)=e(k)+f(k)*j; %将各节点电压用复数表示
end
%=============== 计算各输出量 ===========================
disp('各节点的电压复数值E为(节点号从小到大排列):');
disp(E); %显示各节点的实际电压值E用复数表示
disp('-----------------------------------------------------');
disp('各节点的电压模值大小V为(节点号从小到大排列):');
disp(V); %显示各节点的电压大小V的模值
disp('-----------------------------------------------------');
disp('各节点的电压相角sida为(节点号从小到大排列):');
disp(sida); %显示各节点的电压相角
for p=1:n
C(p)=0;
for q=1:n
C(p)=C(p)+conj(Y(p,q))*conj(E(q)); %计算各节点注入电流的共轭值
end
S(p)=E(p)*C(p); %计算各节点的功率 S = 电压 X 注入电流的共轭值
end
disp('各节点的功率S为(节点号从小到大排列):');
disp(S); %显示各节点的注入功率
disp('-----------------------------------------------------');
disp('各条支路的首端功率Si为(顺序同您输入B1时一致):');
for i=1:nl
p=B1(i,1);q=B1(i,2);
if B1(i,7)==0
Si(p,q)=E(p)*conj(E(p)*B1(i,4)./2+(E(p)-E(q))./B1(i,3));
Siz(i)=Si(p,q);
else
if B1(i,6)==0
Si(p,q)=E(p)*(conj(E(p)*B1(i,4)...
+(E(p)*B1(i,5)-E(q))*(1./(B1(i,3)*B1(i,5)))));
Siz(i)=Si(p,q);
else
Si(p,q)=E(p)*conj((E(p)-E(q)*B1(i,5))*(1./(B1(i,3)*B1(i,5)^2)));
Siz(i)=Si(p,q);
end
end
ZF=['S(',num2str(p),',',num2str(q),')=',num2str(Si(p,q))];
disp(ZF);
disp('-----------------------------------------------------');
end
disp('各条支路的末端功率Sj为(顺序同您输入B1时一致):');
for i=1:nl
p=B1(i,1);q=B1(i,2);
if B1(i,7)==0
Sj(q,p)=E(q)*conj(E(q)*B1(i,4)./2+(E(q)-E(p))./B1(i,3));
Sjy(i)=Sj(q,p);
else
if B1(i,6)==0
Sj(q,p)=E(q)*conj((E(q)-E(p)*B1(i,5))*(1./(B1(i,3)*B1(i,5)^2)));
Sjy(i)=Sj(q,p);
else
Sj(q,p)=E(q)*(conj(E(q)*B1(i,4)...
+(E(q)*B1(i,5)-E(p))*(1./(B1(i,3)*B1(i,5)))));
Sjy(i)=Sj(q,p);
end
end
ZF=['S(',num2str(q),',',num2str(p),')=',num2str(Sj(q,p))];
disp(ZF);
disp('-----------------------------------------------------');
end
disp('各条支路的功率损耗DS为(顺序同您输入B1时一致):');
for i=1:nl
p=B1(i,1);q=B1(i,2);
DS(i)=Si(p,q)+Sj(q,p);
ZF=['DS(',num2str(p),',',num2str(q),')=',num2str(DS(i))];
disp(ZF);
disp('-----------------------------------------------------');
end
zws=0;JDDY=[];JDP=[];JDQ=[];JDDYJD=[];
for i=1:n %总网损为所有节点注入功率的代数和
zws=zws+S(i);
JDDYJD=strcat(JDDYJD,num2str(i),'(',num2str(sida(i)),'),');
JDDY=strcat(JDDY,num2str(i),'(',num2str(V(i)),'),');
JDP=strcat(JDP,num2str(i),'(',num2str(real(S(i))),'),');
JDQ=strcat(JDQ,num2str(i),'(',num2str(imag(S(i))),'),');
end
JDDYJD=strcat('节点电压角度:',JDDYJD);
JDDY=strcat('节点电压模值:',JDDY);
JDP=strcat('节点有功:',JDP);
JDQ=strcat('节点无功:',JDQ);
ZF=['总网损S=',num2str(zws)];
ZFS=['有功总损耗= ',num2str(real(zws)),' 无功总损耗= ',num2str(imag(zws))];
disp(ZF);
figure(1);
subplot(4,1,1);
bar(V);
title(JDDY);
ylabel('节点电压模值');
grid on;
subplot(4,1,2);
plot(sida);
title(JDDYJD);
ylabel('节点电压角度');
grid on;
subplot(4,1,3);
P=real(S);Q=imag(S);
bar(P);
title(JDP);
ylabel('节点注入有功');
grid on;
subplot(4,1,4);
bar(Q);
title(JDQ);
xlabel(ZFS);ylabel('节点注入无功');
grid on;%***********************************
figure(2);
subplot(3,2,1);
JDH=[];JDH1=[];
for i=1:nl
JDH=strcat(JDH,num2str(i),'(',num2str(B1(i,1)),',',num2str(B1(i,2)),'), ');
JDH1=strcat(JDH1,num2str(i),'(',num2str(B1(i,2)),',',num2str(B1(i,1)),'), ');
end
P1=real(Siz);Q1=imag(Siz);
bar(P1);
title(JDH);
ylabel('支路首端注入有功');%xlabel('支路号');
grid on;
subplot(3,2,2);
bar(Q1);
title(JDH);
ylabel('支路首端注入无功');
grid on;
subplot(3,2,3);
P2=real(Sjy);Q2=imag(Sjy);
bar(P2);
title(JDH1);
ylabel('支路末端注入有功');
grid on;
subplot(3,2,4);
bar(Q2);
title(JDH1);
ylabel('支路末端注入无功');
grid on;
subplot(3,2,5);
P3=real(DS);Q3=imag(DS);
bar(P3);
xlabel(JDH);ylabel('支路有功损耗');
grid on;
subplot(3,2,6);
bar(Q3);
xlabel(JDH);ylabel('支路无功损耗');
grid on;

相关文章:
牛顿拉夫逊法潮流计算
本文介绍了电力系统潮流计算机辅助分析的基本知识及潮流计算牛顿-拉 夫逊法,最后...关键词:电力系统潮流计算,牛顿-拉夫逊法,MATLAB I ABSTRACT This article first...
基于牛顿拉夫逊法潮流计算的matlab实验报告
一、实验目的 应用 MATLAB 语言编写具有一定通用性的牛 顿-拉夫逊法潮流计算程序。 要求: (1)潮流计算方法为牛顿-拉夫逊法。 (2)编程语言为 MATLAB。 (3)...
复杂网络牛顿—拉夫逊法潮流分析
复杂网络牛顿拉夫逊法潮流分析_物理_自然科学_专业资料。山东交通学院电力系统分析...关键字: 潮流计算 牛拉法 Matlab 第 2 页 1 潮流计算 1.1 潮流计算概述...
牛顿—拉夫逊法潮流计算MATLAB程序
牛顿拉夫逊法潮流计算MATLAB程序_电力/水利_工程科技_专业资料。辛辛苦苦终于编完啦~拿出来大家共享牛顿拉夫逊法潮流计算程序 By Yuluo %牛顿--拉夫逊法进行...
牛顿拉夫逊法潮流计算matlab程序
牛顿拉夫逊法潮流计算matlab程序_专业资料。牛顿拉夫逊法潮流计算matlab程序%电力系统的潮流计算,以下程序参考文献 《电力系统毕业设计》中国水利电力出版社 %(该文献用...
牛顿拉夫逊潮流计算
本课题拟采用牛顿拉夫逊法进行电力系统稳态,对复杂系统的潮流计算进 行全面的分析,并得出结论。 开发工具采用 matlab,对具体算例建立模型并进行仿真计算,结果图表显...
例4牛顿拉夫逊法潮流例题
一种基于牛顿_拉夫逊法的... 4页 免费 MATLAB牛顿拉夫逊法算潮... 6页 免费 直角坐标牛顿_拉夫逊法潮... 4页 免费 牛顿拉夫逊法潮流计算ma... 5页 1...
基于MATLAB牛顿拉夫逊法进行潮流计算
基于MATLAB牛顿拉夫逊法进行潮流计算_工学_高等教育_教育专区。潮流计算 Matlab 牛顿拉夫逊法>> %本程序的功能是用牛顿拉夫逊法进行潮流计算 n=input('请输入节点...
直角坐标牛顿-拉夫逊法潮流计算matlab程序(仅供参考)
直角坐标牛顿-拉夫逊法潮流计算matlab程序(仅供参考)_电力/水利_工程科技_专业资料。南昌大学李圣涛 电力061 上传%该程序仅针对《电力系统分析 下》何仰赞 P61 的 ...
牛顿-拉夫逊法-复杂电力系统-潮流计算-毕业论文
牛顿-拉夫逊法-复杂电力系统-潮流计算-毕业论文_理学_高等教育_教育专区。xx 理工...我们可以画出计算框图,用 MATLAB 编写出程序,来代替传统 的手算算法。复杂电力...
更多相关标签:
牛顿拉夫逊法潮流计算 | 牛顿拉夫逊潮流计算 | 牛顿拉夫逊法潮流例题 | 牛顿拉夫逊法潮流 | 牛顿拉夫逊法 matlab | 牛顿拉夫逊法 | 牛顿 拉夫逊方法 | 牛顿拉夫逊 |