Matlab及C语言在潮流计算运用.doc

上传人:爱问知识人 文档编号:5015171 上传时间:2020-01-28 格式:DOC 页数:18 大小:125.50KB
返回 下载 相关 举报
Matlab及C语言在潮流计算运用.doc_第1页
第1页 / 共18页
Matlab及C语言在潮流计算运用.doc_第2页
第2页 / 共18页
Matlab及C语言在潮流计算运用.doc_第3页
第3页 / 共18页
Matlab及C语言在潮流计算运用.doc_第4页
第4页 / 共18页
Matlab及C语言在潮流计算运用.doc_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《Matlab及C语言在潮流计算运用.doc》由会员分享,可在线阅读,更多相关《Matlab及C语言在潮流计算运用.doc(18页珍藏版)》请在三一文库上搜索。

1、Matlab及C语言在潮流计算中的运用(三峡大学电气信息学院20071096班)摘要:潮流计算是研究电力系统稳态运行情况的一种基本电气计算,常规潮流计算的任务是根据给定的运行条件和网路结构确定整个系统的运行状态,如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。潮流计算的结果是电力系统稳定计算和故障分析的基础。关键词:电力系统分析 潮流计算 牛顿-拉夫逊法 C语言 Matlab一,潮流计算算法原理:牛顿拉夫逊法的基本原理 牛顿-拉夫逊法是一种求解非线性方程的数值解法,由于便于编写程序用计算机求解,应用较广。下面以一元非线性代数方程的求解为例,来说明牛顿-拉夫逊法的基本思想。 设欲

2、求解的非线性代数方程为 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

3、)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。如此反复叠代下去,直到求得真实解x*为止。二,节点电压用极坐标牛顿拉夫逊法潮流计算 节点的功率方程写成 其中式中,是两节点电压的相角差。把节点功率表示为节点电压的幅值和相角的函数。在有n个节点的系统中,假定第1m号节点为节点,第m+1n-1号节点为节点,第n号节点为平衡节点。Un和n是给定的,PV节点的电压幅值Um+1Un-1也是给定的。因此,只剩下n-1个节

4、点的电压相角1,2,n-1和m个节点的电压幅值U1,U2,Um是未知量。实际上,对于每一个PQ节点或每一个PV节点都可以列写一个有功功率不平衡量方程式,一共包含了n-1+m个方程式,正好同未知数的数目相同,而比直角坐标形式的方程少了n-1-m个。对于方程式可以写出修正方程式如下:H是(n-1)(n-1)阶方阵,其元素为 ;N是(n-1)m阶矩阵,其元素为 ;K是m(n-1)阶矩阵,其元素为 ;L是mm阶方阵,其元素为 。在这里把节点不平衡功率对节点电压幅值的偏导数都乘以该节点电压,相应地把节点电压的修正量都除以该节点的电压幅值,这样,雅可比矩阵的表达式就具有比较整齐的形式。三,matlab及c

5、语言运算过程的具体实例例:网络接线如图,各支路阻抗和各节点功率均以标幺值标于图中,其中节点2连接的实际是发额定功率的发电厂,设节点1 的电压保持为1.06,用牛顿-拉夫逊法计算系统中的潮流分布。0.02+j0.060.45+j0.150.08+j0.240.01+j0.030.4+j0.050.08+j0.240.04+j0.120.06+j0.180.06+j0.180.2+j0.2GG52134-0.02+j0.16四,程序运行结果:Matlab程序运行结果如下:Y = 3.7500 -11.2500i -2.5000 + 7.5000i 0 -1.2500 + 3.7500i 0 -2.

6、5000 + 7.5000i 10.8333 -32.5000i -1.6667 + 5.0000i -1.6667 + 5.0000i -5.0000 +15.0000i 0 -1.6667 + 5.0000i 12.9167 -38.7500i -10.0000 +30.0000i -1.2500 + 3.7500i -1.2500 + 3.7500i -1.6667 + 5.0000i -10.0000 +30.0000i 12.9167 -38.7500i 0 0 -5.0000 +15.0000i -1.2500 + 3.7500i 0 6.2500 -18.7500icount =

7、 4U = 1.0555 1.0572 1.0319 1.0331 1.0600Angle = 0.0417 0.0055 -0.0261 -0.0236 0Error_Angle_U = 1.0e-008 * -0.5980 -0.0366 0.1334 0.1379 -0.8207 -0.4688 -0.5584 -0.6216S = 0.6000 - 0.1000i 0.2000 + 0.2000i -0.4500 - 0.1500i -0.4000 - 0.0500i 0.0677 + 0.1531iLine_S = 0 0.2905 - 0.1333i 0 0.2991 - 0.01

8、63i 0 -0.2956 + 0.1229i 0 0.2185 + 0.0764i 0.2028 + 0.0746i 0.0764 - 0.0760i 0 -0.2109 - 0.0812i 0 -0.0918 - 0.0132i -0.1389 - 0.0789i -0.2931 - 0.0031i -0.1960 - 0.0786i 0.0919 + 0.0130i 0 0 0 -0.0771 + 0.0758i 0.1448 + 0.0773i 0 0 Line_I = 0 0.2697 + 0.1377i 0 0.2824 + 0.0273i 0 -0.2790 - 0.1178i

9、0 0.2071 - 0.0711i 0.1922 - 0.0695i 0.0719 + 0.0723i 0 -0.2022 + 0.0840i 0 -0.0886 + 0.0151i -0.1326 + 0.0799i -0.2836 + 0.0097i -0.1879 + 0.0806i 0.0886 - 0.0146i 0 0 0 -0.0727 - 0.0715i 0.1366 - 0.0729i 0 0 C语言运行结果如下:节点导纳矩阵:3.750000+j-11.250000 -2.500000+j7.500000 -0.000000+j-0.000000 -1.250000+j3

10、.750000 -0.000000+j-0.000000-2.500000+j7.500000 10.833333+j-32.500000 -1.666667+j5.000000 -1.666667+j5.000000 -5.000000+j15.000000-0.000000+j-0.000000 -1.666667+j5.000000 12.916667+j-38.750000 -10.000000+j30.000000 -1.250000+j3.750000-1.250000+j3.750000 -1.666667+j5.000000 -10.000000+j30.000000 12.9

11、16667+j-38.750000 -0.000000+j-0.000000-0.000000+j-0.000000 -5.000000+j15.000000 -1.250000+j3.750000 -0.000000+j-0.000000 6.250000+j-18.750000迭代次数:count=4节点相角分别为:=0.041710 0.005480 -0.026114 -0.023594 0.000000节点电压分别为:U=1.055525 1.057178 1.031931 1.033072 1.060000节点功率为:S=0.600000+j-0.100000 0.200000+j

12、0.200000 -0.450000+j-0.150000 -0.400000+j-0.050000 0.067700+j0.153099请按任意键继续. . .经过比较matlab和c语言运行的结果是一样的!最终的潮流分布如下图:0.0764 - 0.0760i0.45+j0.15-0.1389 - 0.0789i-0.0918 - 0.0132i0.4+j0.050.2905 - 0.1333i0.2028 + 0.0746i0.2+j0.2GG125340.2956 - 0.1229i-0.06+0.1i0.2931 + 0.0031i0.0677 + 0.1531i0.2185 + 0

13、.0764i0.2991 - 0.0163i0.2109 + 0.0812i-0.0918 - 0.0132i-0.092 - 0.013i-0.0918 - 0.0132i0.0771 - 0.0758i-0.1448 - 0.0773i0.1960 + 0.0786i五,小结在计算机潮流计算中,使用牛顿-拉夫逊法进行潮流计算,非常快捷。在程序编写过程中,对公式的由来应该非常清楚 ,不然在编写过程中易出错,比如for循环的次数,一些细节问题都应该反复琢磨。在程序调试过程中,应该分步调试,不要一开始就运行完整的程序。对程序中出现的问题应该从运行结果中分析问题的所在,有什么问题解决什么问题,抓住

14、问题的要害。在潮流计算中运用matlab比运用c语言要方便好多,matlab里有大量的数学函数直接调用。用c语言写的话每一个函数都要自己编写,写起来很痛苦,其中求逆矩阵就用了一百多行。最后想说的是,想学没有什么不可以。六,程序代码Matlab程序:%Writer:ChenZhou%Time:2009年11月9日-2009年11月15日%编译环境:matlab R2007bclc%说明:为了使节点按照先PQ,再PV节点,最后平衡节点的次序编号,以便与公式对照,节点1与节点5对调。%节点阻抗矩阵Z=0,0.04+0.12i,0,0.08+0.24i,0;0.04+0.12i,0,0.06+0.18

15、i,0.06+0.18i,0.02+0.06i;0,0.06+0.18i,0,0.01+0.03i,0.08+0.24i;0.08+0.24i,0.06+0.18i,0.01+0.03i,0,0;0,0.02+0.06i,0.08+0.24i,0,0;%求互导纳for i=1:5 for j=1:5 if Z(i,j)=0 y(i,j)=0; else y(i,j)=1/Z(i,j); end endend%求导纳for i=1:5 for j=1:5 if i=j Y(i,j)=-y(i,j); else for k=1:5 Y(i,j)=sum(y(i,:); end end endend

16、%导纳矩阵G=real(Y);B=imag(Y);%赋初值U=1,1,1,1,1.06;Angle=0,0,0,0,0;%节点功率S=0.6-0.1i,0.2+0.2i,-0.45-0.15i,-0.4-0.05i,0;P=real(S);Q=imag(S);Error_Power=ones(8,1);count=0;%迭代次数while max(Error_Power)1e-5 for i=1:4 H(i,i)=0;N(i,i)=0;M(i,i)=0;L(i,i)=0;Error_P(i)=0;Error_Q(i)=0; end for i=1:4 for j=1:5 Error_P(i)=

17、Error_P(i)-U(i)*U(j)*(G(i,j)*cos(Angle(i)-Angle(j)+B(i,j)*sin(Angle(i)-Angle(j); Error_Q(i)=Error_Q(i)-U(i)*U(j)*(G(i,j)*sin(Angle(i)-Angle(j)-B(i,j)*cos(Angle(i)-Angle(j); end Error_P(i)=Error_P(i)+P(i); Error_Q(i)=Error_Q(i)+Q(i); endError_Power=Error_P,Error_Q;%求雅可比矩阵%当i=j时H,N,M,L如下 for i=1:4 for

18、 j=1:4 if i=j H(i,j)=-U(i)*U(j)*(G(i,j)*sin(Angle(i)-Angle(j)-B(i,j)*cos(Angle(i)-Angle(j); N(i,j)=-U(i)*U(j)*(G(i,j)*cos(Angle(i)-Angle(j)+B(i,j)*sin(Angle(i)-Angle(j); L(i,j)=-U(i)*U(j)*(G(i,j)*sin(Angle(i)-Angle(j)-B(i,j)*cos(Angle(i)-Angle(j); M(i,j)=U(i)*U(j)*(G(i,j)*cos(Angle(i)-Angle(j)+B(i,j

19、)*sin(Angle(i)-Angle(j); end endend%当i=j时H,N,M,L如下for i=1:4 for j=1:5 if i=j H(i,i)=H(i,i)+U(i)*U(j)*(G(i,j)*sin(Angle(i)-Angle(j)-B(i,j)*cos(Angle(i)-Angle(j); N(i,i)=N(i,i)-U(i)*U(j)*(G(i,j)*cos(Angle(i)-Angle(j)+B(i,j)*sin(Angle(i)-Angle(j); M(i,i)=M(i,i)-U(i)*U(j)*(G(i,j)*cos(Angle(i)-Angle(j)+B

20、(i,j)*sin(Angle(i)-Angle(j); L(i,i)=L(i,i)-U(i)*U(j)*(G(i,j)*sin(Angle(i)-Angle(j)-B(i,j)*cos(Angle(i)-Angle(j); end end N(i,i)=N(i,i)-2*(U(i)2*G(i,i); L(i,i)=L(i,i)+2*(U(i)2*B(i,i);endJ=H,N;M,L;Error_Angle_U=-(inv(J)*Error_Power);Error_Angle=zeros(1,4);Error_U=zeros(1,4);for i=1:4 Error_Angle(i)=Er

21、ror_Angle_U(i);Error_U(i)=Error_Angle_U(i+4)*U(i);endfor i=1:4 Angle(i)=Angle(i)+Error_Angle(i); U(i)=U(i)+Error_U(i);endcount=count+1;end%count%平衡节点的注入功率 for j=1:5 P(5)=U(5)*U(j)*(G(5,j)*cos(Angle(5)-Angle(j)+B(5,j)*sin(Angle(5)-Angle(j)+P(5); Q(5)=U(5)*U(j)*(G(5,j)*sin(Angle(5)-Angle(j)-B(5,j)*cos

22、(Angle(5)-Angle(j)+Q(5); end S(5)=P(5)+Q(5)*sqrt(-1); %节点电压用复数表示 for i=1:5 Complex_U(i)=U(i)*exp(Angle(i)*sqrt(-1); end %元件端功率 for i=1:5 for j=1:5 Line_S(i,j)=conj(Complex_U(i)*(conj(Complex_U(i)-conj(Complex_U(j)*conj(y(i,j); end end %元件端电流 for i=1:5 for j=1:5 Line_I(i,j)=conj(Line_S(i,j)/conj(Comp

23、lex_U(i); end end Y,count,U,Angle,Error_Angle_U,S,Line_S,Line_I C语言程序:此程序一共三个文件,分别为InverseMatrix.h,Functions.h,ChaoLiuJiSuan.c 主函数:/Writer:ChenZhou/Time:2009年11月9日-2009年11月15日/编译环境:visual stdio 2008/说明:为了使节点按照先PQ,再PV节点,最后平衡节点的次序编号,以便与公式对照,节点与节点对调。#include#include#includeInverseMatrix.h#includeFuncti

24、ons.hvoid main()unsigned int i,j,count=0;Z_to_Y();printf(节点导纳矩阵:n);for (i=0;i5;i+ )for (j=0;j0.00001)|(max_array(Error_Q)0.00001)One_Times();count+;printf(迭代次数:count=%d,count+1);printf(n);printf(节点相角分别为:=);for(i=0;i5;i+)printf(%f ,Anglei);printf(n);printf(节点电压分别为:U=);for(i=0;i5;i+)printf(%f ,Ui);Cal

25、culate_S();printf(n节点功率为:S=n);for (i=0;i5;i+ )printf(%f+j%f ,S_Pi,S_Qi);printf(n); 求逆矩阵的头文件(InverseMatrix.h文件)int max=8;/=雅可比矩阵=double J88=0;int switchnum28;void switchrow(int r,int k)/*将矩阵中的R,K行交换*/int i;double temp;for (i=0;imax;i+ ) temp=Jki; Jki=Jri; Jri=temp;void switchcol(int r,int k)/*将矩阵中的R,

26、K行交换*/int i;double temp;for (i=0;imax;i+ ) temp=Jik; Jik=Jir; Jir=temp;int Inverse_Matrix() int i,j,r,k;double temp;for (k=0;kmax ;k+ ) temp=0; r=k; for (j=k;j=max; j+)/*找主元*/ if (tempfabs(Jrj) temp=fabs(Jrj); r=j; if (0=temp)/*非奇异矩阵,退出*/ return(0); if(r!=k) switchrow(r,k); switchnum0k=r; switchnum1

27、k=k; else switchnum0k=0; switchnum1k=0; Jkk=1/Jkk; for (j=0;jmax;j+ ) if (j!=k) Jkj=-Jkj*Jkk; for (i=0;imax ;i+ ) for (j=0;jmax;j+ ) if (i!=k & j!=k) Jij=Jij+Jik*Jkj; for (i=0;i=0 ;k-) if(switchnum0k!=0) switchcol(switchnum0k,switchnum1k); 求解过程中的一些功能函数(Functions.h文件)/=计算导纳矩阵=/阻抗的实部double Z_Re55=0,0.

28、04,0,0.08,0,0.04,0,0.06,0.06,0.02,0,0.06,0,0.01,0.08,0.08,0.06,0.01,0,0,0,0.02,0.08,0,0;/阻抗的虚部double Z_Im55=0,0.12,0,0.24,0,0.12,0,0.18,0.18,0.06,0,0.18,0,0.03,0.24,0.24,0.18,0.03,0,0,0,0.06,0.24,0,0;/导纳矩阵double Y_Re55=0;double Y_Im55=0;/=节点电压=double U5=1,1,1,1,1.06;/=节点电压相角=double Angle5=0;/=节点电压相角

29、补偿=double Error_Angle5=0;/=功率不平衡量=double Error_P5=0;double Error_Q5=0;/=节点注入的有功和无功功率=double S_P5=0;double S_Q5=0;void Z_to_Y()/z=m+nj y_re=m/(m*m+n*n) y_im=-n/(m*m+n*n)junsigned char i=0,j=0,k;double y_temp_Re55=0;double y_temp_Im55=0;for(i=0;i5;i+)for(j=0;j5;j+)if(Z_Reij=0)&(Z_Imij=0)y_temp_Reij=0;

30、y_temp_Imij=0;elsey_temp_Reij=Z_Reij/(Z_Reij*Z_Reij+Z_Imij*Z_Imij);y_temp_Imij=-Z_Imij/(Z_Reij*Z_Reij+Z_Imij*Z_Imij);/=导纳矩阵=for(i=0;i5;i+)for(j=0;j5;j+)if(i=j)for(k=0;k5;k+)Y_Reij=Y_Reij+y_temp_Reik;Y_Imij=Y_Imij+y_temp_Imik;else Y_Reij=-y_temp_Reij;Y_Imij=-y_temp_Imij;/=计算功率不平衡量=void Error_Power()u

31、nsigned char i,j;double Sum_P5=0;double Sum_Q5=0;double Start_P5=0.6,0.2,-0.45,-0.4,0;double Start_Q5=-0.1,0.2,-0.15,-0.05,0;for(i=0;i5;i+)for(j=0;j5;j+)Sum_Pi=Sum_Pi+Ui*Uj*(Y_Reij*cos(Anglei-Anglej)+Y_Imij*sin(Anglei-Anglej);Sum_Qi=Sum_Qi+Ui*Uj*(Y_Reij*sin(Anglei-Anglej)-Y_Imij*cos(Anglei-Anglej);f

32、or(i=0;i5;i+)Error_Pi=Start_Pi-Sum_Pi;Error_Qi=Start_Qi-Sum_Qi;/=形成修正方程式=void Calculate_J()unsigned char i=0,j=0,k=0;double Sum=0;for(i=0;i4;i+)/=H参数=for(j=0;j4;j+)if(i=j)for(k=0;k5;k+)if(i!=k)Sum=Sum+Ui*Uk*(Y_Reik*sin(Anglei-Anglek)-Y_Imik*cos(Anglei-Anglek);else Sum=Sum+0;Jij=Sum;Sum=0;else Jij=-U

33、i*Uj*(Y_Reij*sin(Anglei-Anglej)-Y_Imij*cos(Anglei-Anglej);for(i=0;i4;i+)/=N参数=for(j=0;j4;j+)if(i=j)for(k=0;k5;k+)if(i!=k)Sum=Sum-Ui*Uk*(Y_Reik*cos(Anglei-Anglek)+Y_Imik*sin(Anglei-Anglek);else Sum=Sum+0;Jij+4=Sum-2*Ui*Ui*Y_Reii;Sum=0;else Jij+4=-Ui*Uj*(Y_Reij*cos(Anglei-Anglej)+Y_Imij*sin(Anglei-Anglej);for(i=0;i4;i+)/=M参数=for(j=0;j4;j+)if(i=j)for(k=0;k5;k+)if(i!=k)Sum=Sum-Ui*Uk*(Y_Reik*cos(Anglei-Anglek)+Y_Imik*sin(Anglei-Anglek);else Sum=Sum+0;Ji+4j=Sum;Sum=0;else Ji+4j=Ui*Uj*(Y_Reij*cos(Anglei-Anglej)+Y_Imij*sin(Anglei-Anglej);for(i=0;i4;i+)/=L参数=for(j=0;j4;j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1