电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc

上传人:laozhun 文档编号:4194363 上传时间:2023-04-09 格式:DOC 页数:26 大小:198KB
返回 下载 相关 举报
电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc_第1页
第1页 / 共26页
电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc_第2页
第2页 / 共26页
电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc_第3页
第3页 / 共26页
电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc_第4页
第4页 / 共26页
电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc》由会员分享,可在线阅读,更多相关《电力系统潮流计算课程设计—牛顿拉夫逊法的应用课程设计(论文).doc(26页珍藏版)》请在三一办公上搜索。

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次;以此迭代结果作为牛顿法的初值,也可以先用直流法潮流求解一次以求得一个较好的角度初值,然后转入牛顿法迭代。3.

6、 P-Q分解法电力系统中常用的P-Q分解法派生于以极坐标表示的牛顿-拉夫逊法,其基本思想是把节点功率表示为电压向量的极坐标形式,以有功功率误差作为修正电压向量角度的依据,以无功功率误差作为修正电压幅值的依据,把有功和无功分开进行迭代其主要特点是以一个(n-1)阶和一个m阶不变的、对称的系数矩阵B,B代替原来的(n+m-1)阶变化的、不对称的系数矩阵M,以此提高计算速度,降低对计算机贮存容量的要求。P-Q分解法在计算速度方面有显著的提高,迅速得到了推广。本课程设计中不采用此方法,因此不再过多赘述。三、 程序设计1. 程序设计环境(1) 采用方法:牛顿-拉夫逊法(2) 设计工具:VC+6.0程序(

7、3) 运行环境:win8 64位操作系统2. 主程序清单#include #include #include #include #include #include #include #include const double CalculateError=0.00001;/定义计算收敛条件static int AllNodeNumber;/节点总数static int BranchNumber;/支路总数static int GroundNumber;/接地支路总数class BUSpublic:int OldNumber;/旧的节点编号int NodeType;/节点类型(0pq节点,2pv

8、节点,3平衡节点)double LoadP;/负荷有功double LoadQ;/负荷无功double GenP;/发电机有功double GenQ;/发电机无功double VoltageVal;/电压幅值double VoltageAngle;/电压相角double NodeP;/节点净有功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

9、.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;/支路电阻double 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);cl

10、ass 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:double E,F;class POWER/存支路功率public:double P1,Q1;double P2,Q2;class POWERFLOWpublic:double maxerror;char *FileName, *ResultName;void InputData();/ 读入系统数据v

11、oid Tinny2();/ 半动态节点优化编号void FormY();/形成节点导纳矩阵void FormJ();/形成雅克比矩阵(边形成边消去) void branchpower();/计算支路功率 void outputdata();/输出潮流计算结果ifstream input;ofstream output;POWERFLOW();POWERFLOW();private:int *NewNumber;/按新号顺序存旧号int *OldNewNumber;/按旧号顺序存新号BUS *bus;BRANCH *branch;GROUND *ground;CURRENT *I;/迭代后计算

12、的各支路的电流POWER *power;/各支路功率double BaseS;Yii *yii;Yij *yij;int *seq;/导纳矩阵各行非对角元素首地址int *sum;/导纳矩阵各行非对角元素个数double *a;/电流分量double *b;/电流分量double *groundpower;/接地支路功率 int count;/记录迭代次数;POWERFLOW:POWERFLOW()FileName=NULL; ResultName=NULL;NewNumber=NULL;bus=NULL;branch=NULL; ground=NULL;BaseS=0;count=0;POW

13、ERFLOW:POWERFLOW()delete NewNumber;delete OldNewNumber;delete bus;delete branch;delete I;delete power;delete yii;delete yij;delete seq;delete sum;delete a;delete b;void POWERFLOW:InputData()/读入数据 input.open(FileName,ios:nocreate);inputBaseS; if(!input) cout数据文件有问题!请检查!AllNodeNumber;bus= new BUSAllNo

14、deNumber;for(int i=0;ibusi.OldNumberbusi.NodeTypebusi.LoadPbusi.LoadQbusi.GenPbusi.GenQbusi.VoltageAnglebusi.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;busi.Nod

15、eQ=(busi.GenQ-busi.LoadQ)/BaseS;inputBranchNumber;branch = new BRANCHBranchNumber;for(i=0;ibranchi.NodeIbranchi.NodeJbranchi.Rbranchi.Xbranchi.Y;if(i=1)branchi.Circuit=0;elseif(branchi.NodeI=branchi-1.NodeI)&(branchi.NodeJ=branchi-1.NodeJ)branchi.Circuit=1;branchi-1.Circuit=1;else branchi.Circuit=0;

16、 inputGroundNumber;ground =new GROUNDGroundNumber; for(i=0;igroundi.Nodegroundi.Ggroundi.B; input.close();void POWERFLOW:Tinny2()/半动态节点优化编号NewNumber=new intAllNodeNumber+1;int *ConnectNum=new intAllNodeNumber+1;int *NodeConnect=new int*AllNodeNumber+1;for(int i=0;i(AllNodeNumber+1);i+)NodeConnecti=n

17、ew int15;for(i=1;i(AllNodeNumber+1);i+)ConnectNumi=0;for(i=0;iBranchNumber;i+)ConnectNumabs(branchi.NodeI)+;ConnectNumabs(branchi.NodeJ)+;NodeConnectabs(branchi.NodeI)ConnectNumabs(branchi.NodeI)=abs(branchi.NodeJ); NodeConnectabs(branchi.NodeJ)ConnectNumabs(branchi.NodeJ)=abs(branchi.NodeI);if(bran

18、chi.Circuit=1)+i;for(int z=1;z(AllNodeNumber+1);z+)NewNumberz=1;for(i=1;iConnectNumi)NewNumberz=i;if(ConnectNumNewNumberz=1)for(int j=1;j(ConnectNumNodeConnectNewNumberz1+1);j+)if(NodeConnectNodeConnectNewNumberz1j=NewNumberz)NodeConnectNodeConnectNewNumberz1j=NodeConnectNodeConnectNewNumberz1Connec

19、tNumNodeConnectNewNumberz1; ConnectNumNodeConnectNewNumberz1-;elsefor(i=1;i(ConnectNumNewNumberz+1);i+)for(int j=1;j(ConnectNumNodeConnectNewNumberzi+1);j+)if(NodeConnectNodeConnectNewNumberzij=NewNumberz)NodeConnectNodeConnectNewNumberzij=NodeConnectNodeConnectNewNumberziConnectNumNodeConnectNewNum

20、berzi;ConnectNumNodeConnectNewNumberzi-;for(i=1;i(ConnectNumNewNumberz);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)Conne

21、ctNumNodeConnectNewNumberzi+;ConnectNumNodeConnectNewNumberzk+;NodeConnectNodeConnectNewNumberziConnectNumNodeConnectNewNumberzi=NodeConnectNewNumberzk;NodeConnectNodeConnectNewNumberzkConnectNumNodeConnectNewNumberzk=NodeConnectNewNumberzi; ConnectNumNewNumberz=AllNodeNumber;for(i=1;i(AllNodeNumber

22、+1);i+)/新号数组中对应的老号coutNewNumberi ;coutendl;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+)/老号数组中对应的新号coutOldNewNumberi ;coutendl; delete ConnectNum;for (i = 0; i (AllNodeNumber+1); i+)d

23、elete15 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;fAllNodeNumber;f+)seqf=0; sumf=0; seqAllNodeNumber=0;for(int i=1;iAllNodeNumber;i+)for(int j=0;jBranchNumber;j+)if(New

24、Numberi=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.NodeI0)if(branchj.Circuit=1)double Z1=branchj+1.R*branchj+1.R+branchj+1.X*branchj+1.X;yijz.G=-branchj.R/(Z

25、*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);yiiOldNewNumberabs(branchj.NodeI).B+=-(1-branchj.Y)

26、*(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.NodeJ).B+=(1-branchj.Y)*(branchj.X/(Z*branchj.Y)+(1-br

27、anchj+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;yiiOldNewNumberabs(branchj.NodeJ).G+=(1-branchj.Y)*

28、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.R*branchj+1.R+branchj+1.X*branchj+1.X);yijz.B=branc

29、hj.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;yiiOldNewNumberabs(branchj.NodeI).B+=branchj.Y/2;yiiOldNewN

30、umberabs(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.G;yiii.B-=yijy.B; seqAllNodeNumber=seqAllNodeNumber-1+

31、sumAllNodeNumber-1;for(i=0;i(AllNodeNumber+1);i+)for(int j=1;jz;j+)if(i=yijj.j)yiii.G-=yijj.G;yiii.B-=yijj.B;for(i=0;iGroundNumber;i+)yiiOldNewNumbergroundi.Node.B+=groundi.B;void POWERFLOW:FormJ()/形成雅克比矩阵(边形成边消去) a=new doubleAllNodeNumber+1;b=new doubleAllNodeNumber+1;for(int i=1;i=AllNodeNumber;i+

32、)/对角部分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;dBranchNumber)break;for(int j=seqd;jseqd+1;j+)ad+=yijj.G*busNewNumberyijj.j-1.NodeE-yijj.B*busNewNumberyijj.j-1.NodeF; bd+=yijj.G*busNewNumberyijj.j-1.NodeF+yij

33、j.B*busNewNumberyijj.j-1.NodeE; for(int f=2;f=AllNodeNumber;f+)/下三角部分for(int s=seq1;sseqf;s+) int r; if(yijs.j=f)for(int l=1;l=seql&sseql+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*AllNodeNu

34、mber+1;double*Q=new double*AllNodeNumber+1;for(int x=1;x(AllNodeNumber+1);x+)Px=new double2*AllNodeNumber+2; Qx=new double2*AllNodeNumber+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) /平衡节点

35、bal=i1;maxerror=0; for(i=1;i=AllNodeNumber;i+)/形成雅克比矩阵int balance;if(busNewNumberi-1.NodeType=3) /平衡节点balance=i;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.NodeE+yiii.B*busNewN

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号