




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、电力系统潮流计算课程设计 牛顿-拉夫逊法的应用 学院:电气工程学院 班级:电125 学号:1212002047 姓名:王衡佳 教师:张新松 日期:2015.11.15目 录一、课程设计内容简介.11.课程设计课题.12.电力系统潮流计算.1二、电力系统潮流计算方法.11.高斯-赛德尔迭代法 . .12.牛顿-拉夫逊法.13.p-q分解法.2三、程序设计.31.程序设计环境.32.主程序清单.33.程序运行结果.22四、个人小结.231.课程设计问答.232.个人心得体会.23五、参考文献.24一、课程设计内容简介1. 课程设计课题 设计一个基于高斯赛德尔法或牛顿拉夫逊法的电力系统潮流计算程序,
2、要求计算ieee14节点,可采用vc+,matlab或其他工具实现,了解节点导纳矩阵内各元素的意义以及pv节点与pq节点的区别。2. 电力系统潮流计算电力系统潮流计算是研究电力系统稳态运行运行情况的一种基本电气计算。它的任务是根据给定的运行条件和网路结构确定整个系统的运行状态,如各母线上的电压(幅值及相角)、网络中的功率分布以及功率损耗等。电力系统潮流计算的结果是电力系统稳定计算和故障分析的基础。二、电力系统潮流计算方法1.高斯-赛德尔迭代法以导纳矩阵为基础,并应用高斯-塞德尔迭代的算法是在电力系统中最早得到应用的潮流计算方法,目前高斯一塞德尔法已很少使用。 将所求方程f(x)=0改写为x=(
3、x),不能直接得出方程的根,给一个猜测值 x0得:x1=(x0),又可取x1为猜测值,进一步得:优点:(1)原理简单,程序设计十分容易。(2)导纳矩阵是一个对称且高度稀疏的矩阵,因此占用内存非常节省。(3)就每次迭代所需的计算量而言,是各种潮流算法中最小的,并且和网络所包含的节点数成正比关系。缺点:(1) 收敛速度很慢。(2) 对病态条件系统,计算往往会发生收敛困难:如节点间相位角差很大的重负荷系统、包含有负电抗支路(如某些三绕组变压器或线路串联电容等)的系统、具有较长的辐射形线路的系统、长线路与短线路接在同一节点上,而且长短线路的长度比值又很大的系统。(3) 平衡节点所在位置的不同选择,也会
4、影响到收敛性能。2. 牛顿-拉夫逊法牛顿法是数学中求解非线性方程式的典型方法,有较好的收敛性。自从20世纪60年代中期采用了最佳顺序消去法以后,牛顿法在收敛性、内存要求、计算速度方面都超过了其他方法,成为直到目前仍被广泛采用的方法。优点:(1) 收敛速度快,若选择到一个较好的初值,算法将具有平方收敛特性,一般迭 代45次便可以收敛到一个非常精确的解。而且其迭代次数与所计算网络的规模基本无关。(2) 具有良好的收敛可靠性,对于前面提到的对以节点导纳矩阵为基础的高斯一 塞德尔法呈病态的系统,牛顿法均能可靠地收敛。(3) 牛顿法所需的内存量及每次迭代所需时间均较前述的高斯一塞德尔法为多, 并与程序设
5、计技巧有密切关系。缺点:牛顿法的可靠收敛取决于有一个良好的启动初值。如果初值选择不当,算法有可能根本不收敛或收敛到一个无法运行的解点上。 解决方法: 对于正常运行的系统,各节点电压一般均在额定值附近,偏移不会太大,并且各节点间的相位角差也不大,所以对各节点可以采用统一的电压初值(也称为“平直电压”),“平直电压”法假定: = 这样一般能得到满意的结果。但若系统因无功紧张或其它原因导致电压质量很差或有重载线路而节点间角差很大时,仍用上述初始电压就有可能出现问题。可以先用高斯一塞德尔法迭代1-2次;以此迭代结果作为牛顿法的初值,也可以先用直流法潮流求解一次以
6、求得一个较好的角度初值,然后转入牛顿法迭代。3. p-q分解法电力系统中常用的p-q分解法派生于以极坐标表示的牛顿-拉夫逊法,其基本思想是把节点功率表示为电压向量的极坐标形式,以有功功率误差作为修正电压向量角度的依据,以无功功率误差作为修正电压幅值的依据,把有功和无功分开进行迭代其主要特点是以一个(n-1)阶和一个m阶不变的、对称的系数矩阵b,b代替原来的(n+m-1)阶变化的、不对称的系数矩阵m,以此提高计算速度,降低对计算机贮存容量的要求。p-q分解法在计算速度方面有显著的提高,迅速得到了推广。本课程设计中不采用此方法,因此不再过多赘述。3、 程序设计1. 程序设计环境(1) 采用方法:牛
7、顿-拉夫逊法(2) 设计工具:vc+6.0程序(3) 运行环境:win8 64位操作系统2. 主程序清单#include <iostream.h>#include <conio.h>#include <math.h>#include <fstream.h>#include <string.h>#include <stdlib.h>#include <iomanip.h> #include <time.h> const double calculateerror=0.00001;/定义计算收敛条件st
8、atic int allnodenumber;/节点总数static int branchnumber;/支路总数static int groundnumber;/接地支路总数class buspublic:int oldnumber;/旧的节点编号int nodetype;/节点类型(0pq节点,2pv节点,3平衡节点)double loadp;/负荷有功double loadq;/负荷无功double genp;/发电机有功double genq;/发电机无功double voltageval;/电压幅值double voltageangle;/电压相角double nodep;/节点净有
9、功double nodeq;/节点净无功double nodee;/电压e分量double nodef;/电压f分量bus():oldnumber(0),nodetype(0),loadp(0),loadq(0),genp(0),genq(0),voltageval(1.0),voltageangle(0.0),nodep(0.0),nodeq(0.0),nodee(1.0),nodef(0.0);class branchpublic:int nodei;/节点i侧int nodej;/节点j侧int circuit;/判断是否是双回路(0单回路,1双回路)double r;/支路电阻doub
10、le x;/支路电抗double y;/线路变压器变比或接地导纳b branch():nodei(0),nodej(0),circuit(1),r(0.0),x(0.0),y(0.0) ;class yii/存导纳矩阵对角元素public:double g,b;yii():g(0.0),b(0.0);class yij/存导纳矩阵非对角元素和列号public:double g,b;int j;yij():g(0),b(0),j(0);class ground/存接地支路数据public: int node;double g;double b;class current/存支路电流public:
11、double e,f;class power/存支路功率public:double p1,q1;double p2,q2;class powerflowpublic:double maxerror;char *filename, *resultname;void inputdata();/ 读入系统数据void tinny2();/ 半动态节点优化编号void formy();/形成节点导纳矩阵void formj();/形成雅克比矩阵(边形成边消去) void branchpower();/计算支路功率 void outputdata();/输出潮流计算结果ifstream input;of
12、stream output;powerflow();powerflow();private:int *newnumber;/按新号顺序存旧号int *oldnewnumber;/按旧号顺序存新号bus *bus;branch *branch;ground *ground;current *i;/迭代后计算的各支路的电流power *power;/各支路功率double bases;yii *yii;yij *yij;int *seq;/导纳矩阵各行非对角元素首地址int *sum;/导纳矩阵各行非对角元素个数double *a;/电流分量double *b;/电流分量double *groun
13、dpower;/接地支路功率 int count;/记录迭代次数;powerflow:powerflow()filename=null; resultname=null;newnumber=null;bus=null;branch=null; ground=null;bases=0;count=0;powerflow:powerflow()delete newnumber;delete oldnewnumber;delete bus;delete branch;delete i;delete power;delete yii;delete yij;delete seq;delete sum;d
14、elete a;delete b;void powerflow:inputdata()/读入数据 input.open(filename,ios:nocreate);input>>bases; if(!input) cout<<"数据文件有问题!请检查!"<<endl; return;input>>allnodenumber;bus= new busallnodenumber;for(int i=0;i<allnodenumber;i+)input>>busi.oldnumber>>busi.no
15、detype>>busi.loadp>>busi.loadq>>busi.genp>>busi.genq>>busi.voltageangle>>busi.voltageval; busi.nodee=busi.voltageval*cos(busi.voltageangle*3.14159265/180); busi.nodef=busi.voltageval*sin(busi.voltageangle*3.14159265/180);busi.nodep=(busi.genp-busi.loadp)/bases;bus
16、i.nodeq=(busi.genq-busi.loadq)/bases;input>>branchnumber;branch = new branchbranchnumber;for(i=0;i<branchnumber;i+)input>>branchi.nodei>>branchi.nodej>>branchi.r>>branchi.x>>branchi.y;if(i=1)branchi.circuit=0;elseif(branchi.nodei=branchi-1.nodei)&&(bran
17、chi.nodej=branchi-1.nodej)branchi.circuit=1;branchi-1.circuit=1;else branchi.circuit=0; input>>groundnumber;ground =new groundgroundnumber; for(i=0;i<groundnumber;i+) input>>groundi.node>>groundi.g>>groundi.b; input.close();void powerflow:tinny2()/半动态节点优化编号newnumber=new in
18、tallnodenumber+1;int *connectnum=new intallnodenumber+1;int *nodeconnect=new int*allnodenumber+1;for(int i=0;i<(allnodenumber+1);i+)nodeconnecti=new int15;for(i=1;i<(allnodenumber+1);i+)connectnumi=0;for(i=0;i<branchnumber;i+)connectnumabs(branchi.nodei)+;connectnumabs(branchi.nodej)+;nodec
19、onnectabs(branchi.nodei)connectnumabs(branchi.nodei)=abs(branchi.nodej); nodeconnectabs(branchi.nodej)connectnumabs(branchi.nodej)=abs(branchi.nodei);if(branchi.circuit=1)+i;for(int z=1;z<(allnodenumber+1);z+)newnumberz=1;for(i=1;i<(allnodenumber+1);i+)if(connectnumnewnumberz>connectnumi)ne
20、wnumberz=i;if(connectnumnewnumberz=1)for(int j=1;j<(connectnumnodeconnectnewnumberz1+1);j+)if(nodeconnectnodeconnectnewnumberz1j=newnumberz)nodeconnectnodeconnectnewnumberz1j=nodeconnectnodeconnectnewnumberz1connectnumnodeconnectnewnumberz1; connectnumnodeconnectnewnumberz1-;elsefor(i=1;i<(con
21、nectnumnewnumberz+1);i+)for(int j=1;j<(connectnumnodeconnectnewnumberzi+1);j+)if(nodeconnectnodeconnectnewnumberzij=newnumberz)nodeconnectnodeconnectnewnumberzij=nodeconnectnodeconnectnewnumberziconnectnumnodeconnectnewnumberzi;connectnumnodeconnectnewnumberzi-;for(i=1;i<(connectnumnewnumberz)
22、;i+)for(int k=i+1;k<(connectnumnewnumberz+1);k+)for(int j=1;j<(connectnumnodeconnectnewnumberzi+1);j+)if(nodeconnectnewnumberzk!=nodeconnectnodeconnectnewnumberzij) continue;else break;if(j=(connectnumnodeconnectnewnumberzi+1)connectnumnodeconnectnewnumberzi+;connectnumnodeconnectnewnumberzk+;
23、nodeconnectnodeconnectnewnumberziconnectnumnodeconnectnewnumberzi=nodeconnectnewnumberzk;nodeconnectnodeconnectnewnumberzkconnectnumnodeconnectnewnumberzk=nodeconnectnewnumberzi; connectnumnewnumberz=allnodenumber;for(i=1;i<(allnodenumber+1);i+)/新号数组中对应的老号cout<<newnumberi<<" &quo
24、t;cout<<endl;oldnewnumber=new intallnodenumber+1;for(i=1;i<(allnodenumber+1);i+)for(int j=1;j<(allnodenumber+1);j+)if(newnumberj=i)oldnewnumberi=j;for(i=1;i<(allnodenumber+1);i+)/老号数组中对应的新号cout<<oldnewnumberi<<" "cout<<endl; delete connectnum;for (i = 0; i
25、<(allnodenumber+1); i+)delete15 nodeconnecti;void powerflow:formy()/形成导纳矩阵int z=1;yii =new yiiallnodenumber+1;yij =new yijbranchnumber+1; seq =new intallnodenumber+1; sum =new intallnodenumber; for(int f=0;f<allnodenumber;f+)seqf=0; sumf=0; seqallnodenumber=0;for(int i=1;i<allnodenumber;i+)
26、for(int j=0;j<branchnumber;j+)if(newnumberi=abs(branchj.nodei)|(newnumberi=abs(branchj.nodej)if(oldnewnumberabs(branchj.nodei)<i|oldnewnumberabs(branchj.nodej)<i)continue;double z=branchj.r*branchj.r+branchj.x*branchj.x; if(branchj.nodei<0)if(branchj.circuit=1)double z1=branchj+1.r*branc
27、hj+1.r+branchj+1.x*branchj+1.x;yijz.g=-branchj.r/(z*branchj.y)-branchj+1.r/(z1*branchj+1.y);yijz.b=branchj.x/(z*branchj.y)+branchj+1.x/(z1*branchj+1.y);yiioldnewnumberabs(branchj.nodei).g+=-(1-branchj.y)*(-branchj.r/(z*branchj.y)/branchj.y+(1-branchj+1.y)*(-branchj+1.r/(z1*branchj+1.y)/branchj+1.y);
28、yiioldnewnumberabs(branchj.nodei).b+=-(1-branchj.y)*(branchj.x/(z*branchj.y)/branchj.y+(1-branchj+1.y)*(branchj+1.x/(z1*branchj+1.y)/branchj+1.y);yiioldnewnumberabs(branchj.nodej).g+=(1-branchj.y)*(-branchj.r/(z*branchj.y)+(1-branchj+1.y)*(-branchj+1.r/(z1*branchj+1.y);yiioldnewnumberabs(branchj.nod
29、ej).b+=(1-branchj.y)*(branchj.x/(z*branchj.y)+(1-branchj+1.y)*(branchj+1.x/(z1*branchj+1.y);j+;elseyijz.g=-branchj.r/(z*branchj.y);yijz.b=branchj.x/(z*branchj.y);yiioldnewnumberabs(branchj.nodei).g+=-(1-branchj.y)*yijz.g/branchj.y;yiioldnewnumberabs(branchj.nodei).b+=-(1-branchj.y)*yijz.b/branchj.y;
30、yiioldnewnumberabs(branchj.nodej).g+=(1-branchj.y)*yijz.g;yiioldnewnumberabs(branchj.nodej).b+=(1-branchj.y)*yijz.b;if(newnumberi=abs(branchj.nodei)yijz.j=oldnewnumberabs(branchj.nodej);elseyijz.j=oldnewnumberabs(branchj.nodei); z+;elseif(branchj.circuit=1)yijz.g=-branchj.r/z-branchj+1.r/(branchj+1.
31、r*branchj+1.r+branchj+1.x*branchj+1.x);yijz.b=branchj.x/z+branchj+1.x/(branchj+1.r*branchj+1.r+branchj+1.x*branchj+1.x);yiioldnewnumberabs(branchj.nodei).b+=branchj.y/2+branchj+1.y/2;yiioldnewnumberabs(branchj.nodej).b+=branchj.y/2+branchj+1.y/2;j+;elseyijz.g=-branchj.r/z;yijz.b=branchj.x/z;yiioldne
32、wnumberabs(branchj.nodei).b+=branchj.y/2;yiioldnewnumberabs(branchj.nodej).b+=branchj.y/2;if(newnumberi=abs(branchj.nodei)yijz.j=oldnewnumberabs(branchj.nodej);elseyijz.j=oldnewnumberabs(branchj.nodei); z+; sumi+; if(i=1) seqi=1; elseseqi=sumi-1+seqi-1;for(int y=seqi;y<(seqi+sumi);y+)yiii.g-=yijy
33、.g;yiii.b-=yijy.b; seqallnodenumber=seqallnodenumber-1+sumallnodenumber-1;for(i=0;i<(allnodenumber+1);i+)for(int j=1;j<z;j+)if(i=yijj.j)yiii.g-=yijj.g;yiii.b-=yijj.b;for(i=0;i<groundnumber;i+)yiioldnewnumbergroundi.node.b+=groundi.b;void powerflow:formj()/形成雅克比矩阵(边形成边消去) a=new doubleallnode
34、number+1;b=new doubleallnodenumber+1;for(int i=1;i<=allnodenumber;i+)/对角部分ai=yiii.g*busnewnumberi-1.nodee-yiii.b*busnewnumberi-1.nodef;bi=yiii.g*busnewnumberi-1.nodef+yiii.b*busnewnumberi-1.nodee;for(int d=1;d<allnodenumber;d+)/上三角部分if(seqd>branchnumber)break;for(int j=seqd;j<seqd+1;j+)a
35、d+=yijj.g*busnewnumberyijj.j-1.nodee-yijj.b*busnewnumberyijj.j-1.nodef; bd+=yijj.g*busnewnumberyijj.j-1.nodef+yijj.b*busnewnumberyijj.j-1.nodee; for(int f=2;f<=allnodenumber;f+)/下三角部分for(int s=seq1;s<seqf;s+) int r; if(yijs.j=f)for(int l=1;l<allnodenumber;l+)/确定行号if(s>=seql&&s<
36、;seql+1) r=l; af+=yijs.g*busnewnumberr-1.nodee-yijs.b*busnewnumberr-1.nodef; bf+=yijs.g*busnewnumberr-1.nodef+yijs.b*busnewnumberr-1.nodee;double*p=new double*allnodenumber+1;double*q=new double*allnodenumber+1;for(int x=1;x<(allnodenumber+1);x+)px=new double2*allnodenumber+2; qx=new double2*alln
37、odenumber+2;for(int p=1;p<=allnodenumber;p+)for(int y=1;y<=2*allnodenumber+1;y+)ppy=0; qpy=0;int bal=0;for(int i1=1;i1<=allnodenumber;i1+)if(busnewnumberi1-1.nodetype=3) /平衡节点bal=i1;maxerror=0; for(i=1;i<=allnodenumber;i+)/形成雅克比矩阵int balance;if(busnewnumberi-1.nodetype=3) /平衡节点balance=i;
38、continue; else if(busnewnumberi-1.nodetype=0)/pq节点 pi2*i-1=-ai-(yiii.g*busnewnumberi-1.nodee+yiii.b*busnewnumberi-1.nodef); pi2*i=-bi+(yiii.b*busnewnumberi-1.nodee-yiii.g*busnewnumberi-1.nodef);qi2*i-1=bi+(yiii.b*busnewnumberi-1.nodee-yiii.g*busnewnumberi-1.nodef); qi2*i=-ai+(yiii.g*busnewnumberi-1.
39、nodee+yiii.b*busnewnumberi-1.nodef);if(i!=allnodenumber) for(int m=seqi;m<seqi+1;m+)/上三角对角块if(seqi>branchnumber)break;pi2*yijm.j-1=-(yijm.g*busnewnumberi-1.nodee+yijm.b*busnewnumberi-1.nodef);pi2*yijm.j=(yijm.b*busnewnumberi-1.nodee-yijm.g*busnewnumberi-1.nodef); qi2*yijm.j-1=pi2*yijm.j; qi2*y
40、ijm.j=-pi2*yijm.j-1; for(int s=seq1;s<seqi;s+)/下三角对角块 int r;if(yijs.j=i)for(int l=1;l<allnodenumber;l+)/确定行号if(s>=seql&&s<seql+1) r=l;if(r=balance)continue;pi2*r-1=-(yijs.g*busnewnumberi-1.nodee+yijs.b*busnewnumberi-1.nodef);pi2*r=yijs.b*busnewnumberi-1.nodee-yijs.g*busnewnumberi
41、-1.nodef;qi2*r-1=pi2*r;qi2*r=-pi2*r-1;pi2*allnodenumber+1=busnewnumberi-1.nodep-busnewnumberi-1.nodee*ai-busnewnumberi-1.nodef*bi; qi2*allnodenumber+1=busnewnumberi-1.nodeq-busnewnumberi-1.nodef*ai+busnewnumberi-1.nodee*bi;else/pv节点pi2*i-1=-ai-(yiii.g*busnewnumberi-1.nodee+yiii.b*busnewnumberi-1.nod
42、ef);pi2*i=-bi+(yiii.b*busnewnumberi-1.nodee-yiii.g*busnewnumberi-1.nodef);qi2*i-1=-2*busnewnumberi-1.nodee;qi2*i=-2*busnewnumberi-1.nodef; if(i!=allnodenumber) for(int m=seqi;m<seqi+1;m+)/上三角对角块 if(seqi>branchnumber)break;pi2*yijm.j-1=-(yijm.g*busnewnumberi-1.nodee+yijm.b*busnewnumberi-1.nodef
43、);pi2*yijm.j=(yijm.b*busnewnumberi-1.nodee-yijm.g*busnewnumberi-1.nodef); for(int s=seq1;s<seqi;s+)/下三角对角块 int r; if(yijs.j=i)for(int l=1;l<allnodenumber;l+)/确定行号if(s>=seql&&s<seql+1) r=l;pi2*r-1=-(yijs.g*busnewnumberi-1.nodee+yijs.b*busnewnumberi-1.nodef);pi2*r=yijs.b*busnewnumb
44、eri-1.nodee-yijs.g*busnewnumberi-1.nodef; pi2*allnodenumber+1=busnewnumberi-1.nodep-busnewnumberi-1.nodee*ai-busnewnumberi-1.nodef*bi;qi2*allnodenumber+1=busnewnumberi-1.voltageval*busnewnumberi-1.voltageval-busnewnumberi-1.nodee*busnewnumberi-1.nodee-busnewnumberi-1.nodef*busnewnumberi-1.nodef;for(
45、int iii=(bal*2-1);iii<(bal*2+1);iii+)piiii=0;qiiii=0; if(fabs(maxerror)<fabs(pi2*allnodenumber+1)maxerror=pi2*allnodenumber+1;if(fabs(maxerror)<fabs(qi2*allnodenumber+1)maxerror=qi2*allnodenumber+1;if(i=1)/边形成边消去double ss=q11;for(int z=1;z<(2*allnodenumber+2);z+)q1z=q1z/ss;p1z=p1z-q1z*ss;double s=p12;for(int y=1;y<(2*allnodenumber+2);y+)p1y=p1y/s;for(int m=1;m<i;m+)if(m=balance)cont
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 芯片测试流程管理制度
- 抽汲捞油安全管理制度
- 高分秘籍系统集成试题及答案
- 电力后勤信息化管理制度
- 药房周转库管理制度
- 高升本语文试题及答案
- 2025年软件评测师考试课程安排试题与答案
- 房车营地日常管理制度
- 电力分公司安全管理制度
- 财务结算部管理制度
- 【词汇】311个四级核心高频词汇
- 稻鸭共作及其环境效应
- 农业机械安装调试及验收方案
- 气压传动课件 项目四任务二 折弯机气动系统组装与调试
- 土菜馆策划方案
- 技能人才评价新职业考评员培训在线考试(四川省)
- 江苏省扬州市2024-2025学年高一化学下学期期末考试试题
- 成本加酬金合同协议书
- 创新创业实战案例解析智慧树知到期末考试答案章节答案2024年东北农业大学
- 2024年安徽省高考化学试卷(真题+答案)
- 颅脑外伤的麻醉管理
评论
0/150
提交评论