基于MATLAB牛顿拉夫逊法潮流计算结果
- 格式:doc
- 大小:25.50 KB
- 文档页数:2


基于MATLAB牛顿拉夫逊法进行潮流计算【技术文档】
1.牛顿拉夫逊法在电力系统中的应用
由于电力系统存在着复杂的网络结构,要求高精度的计算,其复杂性导致一般的解析方法难以满足处理要求。
因此,经典的数值算法,如牛顿拉夫逊法(NLF)在计算中得到了广泛的应用。
牛顿拉夫逊法是一种以牛顿法为基础,利用拉夫逊步长更新的数值迭代方法。
电力系统除了需要求解静态ギス,还要求解动态ギス;这种动态ギス的求解并不是牛顿拉夫逊法的特征之一,因此,要使用牛顿拉夫逊法来求解电力系统的动态ギス,必须采用额外的技术,这种技术被称为牛顿拉夫逊法的“持续状态”,使用该方法可以求解电力系统中各类动态ギス的解。
2.MATLAB牛顿拉夫逊法应用:潮流计算
第一步,定义电力系统相关变量,包括母线及其网络拓扑结构、电源和功率元件等。
第二步,根据定义的变量建立平衡方程。
第三步,确定牛顿迭代次数以及拉夫逊步长准则。
此程序经40余同学使用检验,无误。
这是一个电气狗熬两个礼拜图书馆的成果,根据华中科技大学《电力系统分析》中原理编写,可用牛顿-拉夫逊和PQ分解法计算给定标幺值条件的潮流。
本人水平有限,仅供参考,欢迎一起找Bug。
2018/07/06 说明:由于本人变压器建模与PSASP不同,本人使用模型如下图,参数输入时请按该模型计算。
2018/06/18 主程序更新:增加补偿电容参数主程序% file name:chaoliu_lj.m% auther: 山东科技大学罗江% function:使用牛顿-拉夫逊法、PQ分解法计算潮流% updata:2018/6/18 13:22 增加补偿电容参数%节点类型标号%PQ节点 1%PV节点 2%slack节点 3%能计算给定标幺值网络,有且仅有一个平衡节点的潮流%注意:母线标号顺序要求:PQ节点-PV节点-平衡节点%若某元件不存在,其导纳为0,阻抗为infclear %清除工作空间变量clc %清屏%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%数据输入(标幺值)SB=100; %基准容量,单位MVA%母线基准电压Bus=[115 10.5 115 115];%交流线参数:I侧母线J侧母线阻抗1/2接地导纳Line=[4 1 0.06125+0.09527i 0;4 3 0.08469+0.12703i 0;1 3 0.13989+0.15501i 0];%变压器参数:I侧母线J侧母线阻抗变比%变压器阻抗归算到I侧Trans=[2 3 0.0137+0.2881i 0.9504];%加接地电容器补偿: 母线导纳Cap=[2 0.5i];%发电机参数:母线节点类型P V/U θGen=[4 3 1 0];%负荷参数:母线节点类型P Q%按参考方向,发电机发出功率(正值),负荷消耗功率(负值)Load=[1 1 -0.18 -0.06;2 1 -0.32 -0.12];mode=1; %1-极坐标下牛拉法,2-PQ分解法Tmax=50; %最大迭代次数limit=1.0e-4; %要求精度%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%变压器π型等效阻抗参数Zt=zeros(size(Trans,1),3);Zt(:,1)=Trans(:,3)./Trans(:,4);Zt(:,2)=Trans(:,3)./(1-Trans(:,4));Zt(:,3)=Trans(:,3)./(Trans(:,4).^2-Trans(:,4));Trans_pi=[Trans(:,1:2) Zt(:,1) 1./Zt(:,2) 1./Zt(:,3)];n=numel(Bus); %总节点数m=n-1; %PQ节点数for i=1:size(Gen,1)%数组行数if Gen(i,2)==2 %除去PV节点就是PQ节点m=m-1;endendfor i=1:size(Load,1)if Load(i,2)==2m=m-1;endend%PQ节点包含浮游节点,其PQ=0%提取P,Q,U向量P=zeros(1,n); %P,Q为原始数据,Pi,Qi为计算结果Q=zeros(1,n);U=ones(1,n); %电压初始值由此确定cita=zeros(1,n); %此处未知节点皆设为1.0∠0 %注意:此处角度单位为度,提取后再转换成弧度,后面计算使用弧度for i=1:size(Gen,1)if Gen(i,2)==1 %PQ节点P(Gen(i,1))=Gen(i,3);Q(Gen(i,1))=Gen(i,4);endif Gen(i,2)==2 %PV节点P(Gen(i,1))=Gen(i,3);U(Gen(i,1))=Gen(i,4);endif Gen(i,2)==3 %slack节点U(Gen(i,1))=Gen(i,3);cita(Gen(i,1))=Gen(i,4);endendfor i=1:size(Load,1)if Load(i,2)==1 %PQ节点P(Load(i,1))=Load(i,3);Q(Load(i,1))=Load(i,4);endif Load(i,2)==2 %PV节点P(Load(i,1))=Load(i,3);U(Load(i,1))=Load(i,4);endif Load(i,2)==3 %slack节点U(Load(i,1))=Load(i,3);cita(Load(i,1))=Load(i,4);endenddisp('初始条件:')disp('各节点有功:')disp(P);disp('各节点无功:')disp(Q);disp('各节点电压幅值:')disp(U);cita=(deg2rad(cita)); %角度转换成弧度disp('各节点电压相角(度):')disp(rad2deg(cita)); %显示依然使用角度%节点导纳矩阵的计算Y=zeros(n); %新建节点导纳矩阵y=zeros(n); %网络中的真实导纳%计算y(i,j)for i=1:size(Line,1) %与交流线联结的真实导纳ii=Line(i,1); jj=Line(i,2);y(ii,jj)=1/Line(i,3);y(jj,ii)=y(ii,jj);endfor i=1:size(Trans_pi,1) %与变压器联结的真实导纳ii=Trans_pi(i,1); jj=Trans_pi(i,2);y(ii,jj)=1/Trans_pi(i,3);y(jj,ii)=y(ii,jj);end%计算y(i,i)for i=1:size(Line,1) %与交流线联结的对地导纳ii=Line(i,1); jj=Line(i,2);y(ii,ii)=y(ii,ii)+Line(i,4);y(jj,jj)=y(jj,jj)+Line(i,4);endfor i=1:size(Trans_pi,1) %与变压器联结的对地导纳ii=Trans_pi(i,1); jj=Trans_pi(i,2);y(ii,ii)=y(ii,ii)+Trans_pi(i,4);y(jj,jj)=y(jj,jj)+Trans_pi(i,5);end%算上补偿电容for i=1:size(Cap,1)ii=Cap(i,1);y(ii,ii)=y(ii,ii)+Cap(i,2);end%由y计算Yysum=sum(y,1); %每一行求和for i=1:nfor j=1:nif i==jY(i,j)=ysum(i);elseY(i,j)=-y(i,j);endendenddisp('节点导纳矩阵:');disp(Y);G=real(Y); %电导矩阵B=imag(Y); %电纳矩阵%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%以上为基础数据整理%接下来是牛拉法的大循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%计算功率不平衡量[dP,dQ,Pi,Qi]=Unbalanced( n,m,P,Q,U,G,B,cita );disp('有功不平衡量:');disp(dP);disp('无功不平衡量:');disp(dQ);for i=1:Tmaxfprintf('第%d次迭代\n',i);%雅可比矩阵的计算if(mode==1)J=Jacobi( n,m,U,cita,B,G,Pi,Qi );disp('雅可比矩阵');disp(J);end%求解节点电压修正量if(mode==1)[dU,dcita]=Correct( n,m,U,dP,dQ,J );else[dU,dcita]=PQ_LJ( n,m,dP,dQ,U,B );enddisp('电压、相角修正量:');disp(dU);disp(rad2deg(dcita));%修正节点电压U=U+dU;cita=cita+dcita;disp('节点电压幅值:');disp(U);disp('节点电压相角:');disp(rad2deg(cita));%计算功率不平衡量[dP,dQ,Pi,Qi]=Unbalanced( n,m,P,Q,U,G,B,cita );disp('有功不平衡量:');disp(dP);disp('无功不平衡量:');disp(dQ);if (max(abs(dP))<limit && max(abs(dQ))<limit )break;end%ifend%for%迭代结束,判断收敛if (max(abs(dP))<limit && max(abs(dQ))<limit )disp('计算收敛');elsedisp('计算不收敛或未达到要求精度');end%打印功率fprintf('迭代总次数:%d\n', i);disp('节点电压幅值:');disp(U);disp('节点电压相角:');disp(rad2deg(cita));disp('有功计算结果:');disp(Pi);disp('无功计算结果:');disp(Qi);子程序一% filename:Unbalanced.m% author: 山东科技大学罗江% function: 计算功率不平衡量function [ dP,dQ,Pi,Qi ] = Unbalanced( n,m,P,Q,U,G,B,cita )%计算ΔPi有功的不平衡量for i=1:nfor j=1:nPn(j)=U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endPi(i)=sum(Pn);enddP=P(1:n-1)-Pi(1:n-1); %dP有n-1个%计算ΔQi无功的不平衡量for i=1:nfor j=1:nQn(j)=U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endQi(i)=sum(Qn);enddQ=Q(1:m)-Qi(1:m); %dQ有m个end%func子程序二% filename:Jacobi.m% author:山东科技大学罗江% function: 计算雅可比矩阵function [ J ] = Jacobi( n,m,U,cita,B,G,Pi,Qi )%雅可比矩阵的计算%分块H N K L%i!=j时for i=1:n-1for j=1:n-1H(i,j)=-U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endendfor i=1:n-1for j=1:mN(i,j)=-U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endendfor i=1:mfor j=1:n-1K(i,j)=U(i)*U(j)*(G(i,j)*cos(cita(i)-cita(j))+B(i,j)*sin(cita(i)-cita(j)));endendfor i=1:mfor j=1:mL(i,j)=-U(i)*U(j)*(G(i,j)*sin(cita(i)-cita(j))-B(i,j)*cos(cita(i)-cita(j)));endend%i==j时for i=1:n-1H(i,i)=U(i).^2*B(i,i)+Qi(i);endfor i=1:mN(i,i)=-U(i).^2*G(i,i)-Pi(i);endfor i=1:mK(i,i)=U(i).^2*G(i,i)-Pi(i);endfor i=1:mL(i,i)=U(i).^2*B(i,i)-Qi(i);end%合成雅可比矩阵J=[H N;K L];end子程序三% filename:Correct.m% author:山东科技大学罗江% function:修正节点电压function [ dU,dcita ] = Correct( n,m,U,dP,dQ,J )%求解节点电压修正量for i=1:mUd2(i,i)=U(i);enddPQ=[dP dQ]';dUcita=(-inv(J)*dPQ)';dcita=dUcita(1:n-1);dcita=[dcita 0];dU=(Ud2*dUcita(n:n+m-1)')';dU=[dU zeros(1,n-m)];end子程序四% filename:PQ_LJ.m% author:山东科技大学罗江% function:使用PQ分解法计算电压修正量function [ dU,dcita ] = PQ_LJ( n,m,dP,dQ,U,B )dP_U=dP./U(1:n-1);dQ_U=dQ./U(1:m);dUdcita=(-inv(B(1:n-1,1:n-1))*dP_U')';dcita=dUdcita./U(1:n-1);dU=(-inv(B(1:m,1:m))*dQ_U')';dU=[dU zeros(1,n-m)];dcita=[dcita 0];%补零end (使用时此括号删去。
牛顿一拉夫逊法潮流计算程序By Yuluo%牛顿--拉夫逊法进行潮流计算n=i nput(' 请输入节点数:n=');n1=i nput('请输入支路数:n仁');isb=i nput(' 请输入平衡母线节点号:isb=');pr=i nput('请输入误差精度:pr=');B1=input('请输入由支路参数形成的矩阵:B1=');B2=input('请输入各节点参数形成的矩阵:B2=');X=input('请输入由节点参数形成的矩阵:X=');Y=zeros( n);e=zeros(1, n);f=zeros(1, n);V=seros(1, n);O=zeros(1, n);S1=zeros( n1); for i=1: nif X(i,2)~=0;p=X(i,1);丫(p,p)=1./X(i,2);endendfor i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);end丫(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5);Y(p,q)=Y(p,q);Y(p,q)=Y(q,q)+1./(B1(i,3)*B1(i,5F2)+B1(i,4)./2;丫(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;end % 求导纳矩阵G=real(Y);B=imag(Y);for i=1: ne(i)=real(B2(i,3));f(i)=imag(B2(i,3));V(i)=B2(i,4);endfor i=1: nS(i)=B2(i,1)-B2(i,2);B(i,i)=B(i,i)+B2(i,5);endP=rea(S);Q=imag(S);ICT1=0;IT2=1;NO=2* n;N=NO+1;a=0;while IT2~=0IT2=0;a=a+1;for i=1: n;C(i)=0;D(i)=0;for j1=1: nC(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);endP仁C(i)*e(i)+f(i)*D(i);Q仁f(i)*C(i)-D(i)*e(i); % 求'P,Q'V2=e(i)A2+f(i)A2;if B2(i,6)~=3DP=P(i)-P1;DQ=Q(i)-Q1;for j1=1: nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X3=X2;X4=-X1;p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;J(m,q)=X2; end end else DP=P(i)-P1;DV=V(i)~2-V2;for j1=1: nif j1~=isb&j1~=iX1=-G(i,j1)*e(i)-B(i,j1)*f(i);X2=B(i,j1)*e(i)-G(i,j1)*f(i);X5=0;X6=0;p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2;elseif j1==i&j1~=isbX仁-C(i)-G(i,i)*e(i)-B(i,i)*f(i);X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);X5=-2*e(i);X6=-2*f(i);p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2; end end end endend % 求雅可比矩阵for k=3:N0k1=k+1;N 1=N;for k2=k1:N1J(k,k2)=J(k,k2)./J(k,k);endJ( k,k)=1;k4=k-1;for k3=3:k4for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J (k, k2);endJ(k3,k)=0;endendfor k3=k1:N0for k2=k1:N1J(k3,k2)=J(k3,k2)-J(k3,k)*J (k, k2);endJ(k3,k)=0;endendendfor k=3:2:N0-1L=(k+1)./2;e(L)=e(L)-J (k,N);k1=k+1;f(L)=f(L)-J(k1,N);endfor k=3:N0DET=abs (J(k, N));if DET>=prIT2=IT2+1endendICT2(a)=IT2ICT1=ICT1+1;for k=1: ndy(k)=sqrt(e(k)A2+f(k)A2);endfor i=1: nDy(k)=sqrt(e(k)A2+f(kF2);endfor i=1: nDy(ICT1,i)=dy(i);endend % 用高斯消去法解“ w=-J*V”disp('迭代次数');disp(ICTI);disp('没有达到精度要求的个数');disp(ICT2);for k=1: nV(k)=sqrt(e(k)A2+f(k)A2);O(k)=ata n(f(k)./e(k))*180./pi;endE=e+f*j;disp('各节点的实际电压标么值E为(节点号从小到大的排列):’);disp(E);disp('各节点的电压大小V为(节点号从小到大的排列):’);disp(V);disp('各节点的电压相角0为(节点号从小到大的排列):’);disp(O);for p=1: nC(p)=0;for q=1: nC(p)=C(p)+conj(丫(p,q))*conj(E(q));endS(p)=E(p)*C(p);enddisp('各节点的功率S为(节点号从小到大排列):’);disp(S);disp('各条支路的首端功率Si为(顺序同您输入B1时一样):‘);for i=1: n1if B1 ( i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSi(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*con j(1./(B1(i,3)*B1(i,5))));disp(Si(p.q));enddisp('各条支路的末端功率Sj为(顺序同您的输入B1时一样):‘);for i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endSj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(xonj(E(q)./B1(i,5))-conj(E(p)))*xo nj(1./(B1(i,3)*B1(i,5))));disp(Sj(q,p));enddisp('各条支路的功率损耗DS为(顺序同您输入B1时一样):';for i=1: n1if B1(i,6)==0p=B1(i,1);q=B1(i,2);else p=B1(i,2);q=B1(i,1);endDS(i)=Si(p,q)+Sj(q,p);disp(DS(i));endfor i=1:ICT1Cs(i)=i;enddisp('以下是每次迭代后各节点的电压值(如图所示) ‘);plot(Cs,Dy),xlabel('迭代次数'),ylabel('电压'),title(' 电压迭代次数曲线');。
一,潮流计算算法原理:牛顿—拉夫逊法的基本原理 牛顿-拉夫逊法是一种求解非线性方程的数值解法,由于便于编写程序用计算机求解,应用较广。
下面以一元非线性代数方程的求解为例,来说明牛顿-拉夫逊法的基本思想。
设欲求解的非线性代数方程为 f(x)=o设方程的真实解为x*,则必有f(x*)=0。
用牛顿-拉夫逊法求方程真实解x*的步骤如下:首先选取余割合适的初始估值x°作为方程f(x)=0的解,若恰巧有f(x°)=0,则方程的真实解即为x*= x°若f(x°)≠0,则做下一步。
取x¹=x°+Δx°为第一次的修正估值,则 f(x¹)=f(x°+Δx°) 其中Δx°为初始估值的增量,即Δx°=x¹-x°。
设函数f(x)具有任意阶导数,即可将上式在x°的邻域展开为泰勒级数,即:f(x¹)=f(x°+Δx°)=f(x°)+f'(x°)Δx°+[f''(x°)(Δx°)2]/2+… 若所取的|Δx°|足够小,则含(Δx°)²的项及其余的一切高阶项均可略去,并使其等于零,即:f(x¹)≈f(x°)+f'(x°)Δx°=0 故得 Δx°=-f(x°)/f'(x°) 从而 x¹= x°-f(x°)/f'(x°)可见,只要f'(x°)≠0,即可根据上式求出第一次的修正估值x¹,若恰巧有f(x¹)=0,则方程的真实解即为x*=x¹。
若f(x¹)≠0,则用上述方法由x¹再确定第二次的修正估值x²。