潮流计算代码c++及高考语文试卷_第1页
潮流计算代码c++及高考语文试卷_第2页
潮流计算代码c++及高考语文试卷_第3页
潮流计算代码c++及高考语文试卷_第4页
潮流计算代码c++及高考语文试卷_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计报告《电力系统潮流上机》课程设计报告院系:电气与电子工程学院班级:电气1405学号:1141180505学生姓名:指导教师:孙英云设计周数:两周成绩:日期:2021年7月5日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文掌握计算机潮流计算的原理:复习电力系统分析基础中潮流的计算机算法一章,重点掌握节点分类、潮流算法介绍详细阅读牛拉法部分,掌握潮流方程(极坐标、直角坐标)的写法,掌握雅可比矩阵的公式及排列顺序和潮流方程、变量顺序的关系,掌握迭代法收敛条件及迭代法的基本原理设计程序框图,划分功能模块、并对每个模块的输入输出量进行细化。编写计算机潮流计算程序学习了解IEEE标准格式数据,学习掌握C/C++读取数据的方法设计计算机数据存储母线、支路数据的结构,并将所读取的数据存放于所设计的结构当中学习节点排序、节点导纳阵计算方法,编写节点导纳阵生成模块编写潮流方程不平衡量计算模块编写雅可比矩阵生成子模块利用给定的pfMatrix类,编写修正量计算模块实现潮流计算主程序,并利用IEEE标准节点数据进行校验,要求能够输出计算结果、支路潮流等必要信息思考题1.潮流计算的方法有哪些?各有何特点?答:潮流计算分为简单电力网络的手算和复杂电力网络的机算两大类,其中机算又有高斯-赛德尔法、牛顿-拉夫逊法和P-Q分解法。各方法特点如下所示:手算求解潮流一般只用于简单的网络中,计算量大,对于多节点的网络用手算一般难以解决问题。但是通过手算可以对物理概念的理解,还可以在运用计算机计算前由手算的形式求取某些原始数据。方法高斯-赛德尔法牛顿-拉夫逊法P-Q分解法初值要求不高高高迭代次数多少多收敛速度慢较快最快精度三者一样应用早期应用多,现在较少广泛应用应用较多2.如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析)答:①.所需要收集的数据:A.电网中所有节点的数据:a.各节点的类型,包括平衡节点、PV节点、PQ节点b.对于平衡节点要了解节点的电压大小相位、及节点所能提供的最大最小有功无功功率c.PV节点要知道节点电压大小注入有功功率及节点所能提供的最大和最小无功功.率d.PQ节点要知道节点的注入有功和无功功率B.电网中所有支路的数据:a.各支路类型,即是否含有变压器b.各支路的电阻、电感、电纳c.各变压器的变比。②.数据整理:将上述数据资料进行分类整理,并为每个节点及支路编上编号。将整理的结果写本钱实验中所要求的格式(原始数据的txt文档),再用本实验所编制的程序进行求解,得到各节点电压、相位,各线路传输功率、损耗,平衡节点注入功率等数值。③.计算结果分析:考虑PQ节点的电压是否过高或过低;分析PV节点的电压幅值是否正常及无功功率是否超出范围;分析平衡节点有功、无功功率是否在节点所能提供的范围之内;分析给定之路的功率,看是否超出线路的最大传输容量;分析整个系统的网损是否达到标准。3.设计中遇到的问题和解决的方法。c++好久没用,有些生疏。经过复习与百度,渐渐回忆起来。潮流计算机解法已经遗忘,经过复习查书,很快熟悉起来。对老师的思路不是很理解,经过与同学一起探讨,得到了正确答案。课程设计总结或结论2021下半年学历电力系统潮流计算,当时并没有编程实践,就背了背矩阵公式。现在真让我们上手实践,感觉还是略有难度,很有挑战性,毕竟平时没多少时机接触程序。通过这两周的摸索与交流,最终完成了潮流的编程计算。由于是在老师的工作基础上进行补充与改造,所以要读懂老师的代码。我觉得老师的注释还是太少,而且还是英文(虽然英语也能看懂,但还是觉得中文环境用中文好)。在对节点数据的处理上,我们对老师的思路并不能感到理解,因此在后面雅克比矩阵生成与不平衡量计算模块绕了些许弯路,我最后还是没采用老师的方法。除了算法的设计外,最恼人的当属开发工具了,机房是vs2021,而我电脑上是vc++6.0与vs2021,一开始用vc写,然后出了一个迷之bug,换到了vs2021才解决。但我电脑装上vs2021却因为2021的存在无法运行,vs2021也无法运行我在2021下写好的程序。不想卸掉花老长时间才装上的巨大2021,为此浪费了许多时间,很令人生气。能够亲手实践电力系统潮流的计算机计算,还是学到了很多知识,对潮流计算那一部分知识又有了更深的印象。四、参考文献《电力系统稳态分析》,陈珩,中国电力出版社,2021年,第三版;《高等电力网络分析》,张伯明,陈寿孙,严正,清华大学出版社,2021年,第二版《电力系统计算:电子数字计算机的应用》,西安交通大学等合编。北京:水利电力出版社;《现代电力系统分析》,王锡凡主编,科学出版社;程序#include<string>#include<iostream>#include<fstream>#include"pf.h"usingnamespacestd;voidmain(){ pfA;A.readDataFromFile("009ieee.dat");A.initPFData();A.makeYMatrix();A.makeJacobi();A.solveLF();A.outputResult(); system("pause");}#include"pf.h"usingnamespacestd;pf::pf(void){ m_Line=NULL; m_Bus=NULL; m_Bus_newIdx=NULL; m_pv_Num=0; m_sw_Num=0; m_pq_Num=0;}pf::~pf(void){ if(m_Line!=NULL)delete[]m_Line; if(m_Bus!=NULL)delete[]m_Bus; if(m_Bus_newIdx!=NULL)delete[]m_Bus_newIdx;}intpf::readDataFromFile(stringfileName){ inti; stringstrLine,strTemp; ifstreamfin; //openfiletoread; fin.open(fileName.c_str()); if(!fin.fail()) { //1.readSBase; getline(fin,strLine); strTemp.assign(strLine,31,6); m_SBase=atof(strTemp.c_str()); //2.readBusDatahere;//2.1readBusnum; getline(fin,strLine); size_tpos_begin,pos_end; pos_begin=strLine.find("FOLLOWS"); pos_begin=pos_begin+size_t(10); pos_end=strLine.find("ITEM"); strTemp=strLine.substr(pos_begin,pos_end-pos_begin); m_Bus_Num=atoi(strTemp.c_str()); //2.2readeachbusdatahere //allocatememoryform_Bus m_Bus=newBus[m_Bus_Num]; m_Bus_newIdx=newint[m_Bus_Num]; for(inti=0;i<m_Bus_Num;i++) { getline(fin,strLine); strTemp=strLine.substr(0,4); //readbusnum m_Bus[i].Num=atoi(strTemp.c_str()); //readbusName; strTemp=strLine.substr(5,7); m_Bus[i].Name=strTemp; //readbustypePQ:Type=1;PV:Type=2;swing:Type=3; //判断条件YY strTemp=strLine.substr(24,2); if(atoi(strTemp.c_str())<=1) { m_Bus[i].Type=1;m_pq_Num++; } elseif(atoi(strTemp.c_str())==2) { m_Bus[i].Type=2; m_pv_Num++; } elseif(atoi(strTemp.c_str())==3) { m_Bus[i].Type=3; m_sw_Num++; } //readbusVoltage strTemp=strLine.substr(27,6); m_Bus[i].V=atof(strTemp.c_str()); //readbusangle strTemp=strLine.substr(33,7); m_Bus[i].theta=atof(strTemp.c_str())/180*3.1415926; //readbusLoadP strTemp=strLine.substr(40,9); m_Bus[i].LoadP=atof(strTemp.c_str())/m_SBase; //readbusLoadQ strTemp=strLine.substr(49,10); m_Bus[i].LoadQ=atof(strTemp.c_str())/m_SBase; //readbusGenP strTemp=strLine.substr(59,8); m_Bus[i].GenP=atof(strTemp.c_str())/m_SBase; //readbusGenQstrTemp=strLine.substr(67,8); m_Bus[i].GenQ=atof(strTemp.c_str())/m_SBase; //readbusShuntconductanceG strTemp=strLine.substr(106,8); //readbusShuntsusceptanceBstrTemp=strLine.substr(114,8);} //3.readLineDatahere; //3.1readLinenum; getline(fin,strLine); getline(fin,strLine); pos_begin=strLine.find("FOLLOWS"); pos_begin=pos_begin+size_t(10); pos_end=strLine.find("ITEM"); strTemp=strLine.substr(pos_begin,pos_end-pos_begin); m_Line_Num=atoi(strTemp.c_str()); //3.2readeachlinedata; m_Line=newLine[m_Line_Num]; for(i=0;i<m_Line_Num;i++) { getline(fin,strLine); //readTapbusnumber strTemp=strLine.substr(0,4); m_Line[i].NumI=atoi(strTemp.c_str()); //readZbusnumber strTemp=strLine.substr(5,4); m_Line[i].NumJ=atoi(strTemp.c_str()); //readlinetype strTemp=strLine.substr(18,1); m_Line[i].Type=atoi(strTemp.c_str()); //readlineresistanceR strTemp=strLine.substr(19,10); m_Line[i].R=atof(strTemp.c_str()); //readlinereactanceX strTemp=strLine.substr(29,11); m_Line[i].X=atof(strTemp.c_str()); //readlinechargingB strTemp=strLine.substr(40,10); m_Line[i].B=atof(strTemp.c_str()); //readtransformerratio strTemp=strLine.substr(76,6); m_Line[i].K=atof(strTemp.c_str()); }//4.closethefile; fin.close(); } else cout<<"fileopenfail!"<<endl; return0;}intpf::initPFData(){ //accordingtoPage132ofrefbook3, //reindexthebusnumasethesequence[PQPVSW]; intiPQ,iPV,iSW; iPQ=0; iPV=0; iSW=0; inti; for(i=0;i<m_Bus_Num;i++)//按PQPVSW排序 { switch(m_Bus[i].Type) { case1: m_Bus_newIdx[i]=iPQ; iPQ++; break; case2: m_Bus_newIdx[i]=iPV+m_pq_Num; iPV++; break; case3: m_Bus_newIdx[i]=iSW+m_pq_Num+m_pv_Num; iSW++; break; } } for(i=0;i<m_Bus_Num;i++) cout<<m_Bus_newIdx[i]<<endl; //herewegivethesizeofJacobimatrix; m_Jacobi.setSize(2*m_pq_Num+m_pv_Num,2*m_pq_Num+m_pv_Num); m_Matrix_G.setSize(m_Bus_Num,m_Bus_Num); m_Matrix_B.setSize(m_Bus_Num,m_Bus_Num); return0;}intpf::getBusIdx(intbusNum){ //returntheindexofbusfrombusNum inti,idx=-1; for(i=0;i<m_Bus_Num;i++) { if(m_Bus[i].Num==busNum) idx=i; } returnidx;}intpf::makeYMatrix(){ //TODO inti; floatLine_G; floatLine_B; for(i=0;i<m_Line_Num;i++) { Line_G=m_Line[i].R/(m_Line[i].R*m_Line[i].R+m_Line[i].X*m_Line[i].X);Line_B=-m_Line[i].X/(m_Line[i].R*m_Line[i].R+m_Line[i].X*m_Line[i].X); if(m_Line[i].Type!=2) { //m_Matrix_G.DumpInfo("here");m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))=m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))+Line_G; m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumJ))+=-Line_G;m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumI))+=-Line_G; m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))=m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))+Line_G; m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))=m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))+Line_B+m_Line[i].B/2; m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumJ))+=-Line_B; m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumI))+=-Line_B; m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))=m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))+Line_B+m_Line[i].B/2; } else { m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))=m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))+Line_G/(m_Line[i].K*m_Line[i].K); m_Matrix_G(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumJ))+=-Line_G/m_Line[i].K;m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumI))+=-Line_G/m_Line[i].K; m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))=m_Matrix_G(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))+Line_G; m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))=m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumI))+Line_B/(m_Line[i].K*m_Line[i].K); m_Matrix_B(getBusIdx(m_Line[i].NumI),getBusIdx(m_Line[i].NumJ))+=-Line_B/m_Line[i].K; m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumI))+=-Line_B/m_Line[i].K; m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))=m_Matrix_B(getBusIdx(m_Line[i].NumJ),getBusIdx(m_Line[i].NumJ))+Line_B; } } m_Matrix_G.outputMatrixtoFile("G.txt");//实部 m_Matrix_B.outputMatrixtoFile("B.txt");//虚部 return0;}intpf::makeJacobi(){ intequNum=2*m_pq_Num+m_pv_Num; inti,j,k; doubleH,J,N,L; //initJacobimatrix; for(i=0;i<equNum;i++) { for(j=0;j<equNum;j++) { m_Jacobi(i,j)=0.0; } } for(i=0;i<m_Bus_Num;i++) { for(j=0;j<m_Bus_Num;j++) { H=0.0; J=0.0; L=0.0; N=0.0; if(i==j) { for(intk=0;k<m_Bus_Num;k++) { if(i!=k) { //H+=-m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)-m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)); //J+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)); //N+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)); //L+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)-m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)); H+=-m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(i,k)*sin(m_Bus[i].theta-m_Bus[k].theta)-m_Matrix_B(i,k)*cos(m_Bus[i].theta-m_Bus[k].theta)); J+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(i,k)*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(i,k)*sin(m_Bus[i].theta-m_Bus[k].theta)); N+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(i,k)*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(i,k)*sin(m_Bus[i].theta-m_Bus[k].theta)); L+=m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(i,k)*sin(m_Bus[i].theta-m_Bus[k].theta)-m_Matrix_B(i,k)*cos(m_Bus[i].theta-m_Bus[k].theta)); } } //N+=2*m_Bus[i].V*m_Bus[i].V*m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[i].Num)); //L+=-2*m_Bus[i].V*m_Bus[i].V*m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[i].Num)); N+=2*m_Bus[i].V*m_Bus[i].V*m_Matrix_G(i,i); L+=-2*m_Bus[i].V*m_Bus[i].V*m_Matrix_B(i,i); } else { //H=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[j].Num))*sin(m_Bus[i].theta-m_Bus[j].theta)-m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[j].Num))*cos(m_Bus[i].theta-m_Bus[j].theta)); //J=-m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[j].Num))*cos(m_Bus[i].theta-m_Bus[j].theta)+m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[j].Num))*sin(m_Bus[i].theta-m_Bus[j].theta)); //N=-J; //L=H; H=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)-m_Matrix_B(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta)); J=-m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta)+m_Matrix_B(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)); N=-J; L=H; } //雅可比矩阵 inta,b; switch(m_Bus[i].Type) { case1://PQbus; switch(m_Bus[j].Type) { case1://PQbus //HNJLfourelements m_Jacobi(2*m_Bus_newIdx[i],2*m_Bus_newIdx[j])=H; m_Jacobi(2*m_Bus_newIdx[i],2*m_Bus_newIdx[j]+1)=N; m_Jacobi(2*m_Bus_newIdx[i]+1,2*m_Bus_newIdx[j])=J; m_Jacobi(2*m_Bus_newIdx[i]+1,2*m_Bus_newIdx[j]+1)=L; break; case2://PVbus //HJtwoelements m_Jacobi(2*m_Bus_newIdx[i],m_Bus_newIdx[j]+m_pq_Num)=H; m_Jacobi(2*m_Bus_newIdx[i]+1,m_Bus_newIdx[j]+m_pq_Num)=J; break; case3://SWbus break; } break; case2://PVbus; switch(m_Bus[j].Type) { case1://PQbus //HNtwoelements m_Jacobi(m_Bus_newIdx[i]+m_pq_Num,2*m_Bus_newIdx[j])=H; m_Jacobi(m_Bus_newIdx[i]+m_pq_Num,2*m_Bus_newIdx[j]+1)=N; break; case2://PVbus //H,oneelement m_Jacobi(m_Bus_newIdx[i]+m_pq_Num,m_Bus_newIdx[j]+m_pq_Num)=H; break; case3://SWbus break; } break; case3://SWbus; break; } } } ofstreamfout("J.txt"); for(inti=0;i<equNum;i++) { for(intj=0;j<equNum;j++) fout<<setw(12)<<m_Jacobi(i,j)<<""; fout<<endl; } fout.close(); return0;}intpf::solveLF(){ //TODO inti; intequNum=2*m_pq_Num+m_pv_Num; double*bph=newdouble[equNum]; //1.initialize for(i=0;i<m_Bus_Num;i++) { switch(m_Bus[i].Type) { case1://PQnode { m_Bus[i].V=1; m_Bus[i].theta=0; break; } case2://PVnode m_Bus[i].theta=0; break; case3://SWnode break; } } //2.iterate intmaxIter=20; intp,k; for(i=0;i<maxIter;i++) { //2.1calDeltaS if(calcDeltaS(bph)==1)//判断是否收敛 { cout<<"一共迭代"<<i+1<<"次收敛"<<endl; break; } //2.2calJacobi; cout<<"第"<<i+1<<"次"<<"雅可比矩阵为"<<endl; this->makeJacobi(); m_Jacobi.outputMatrix(); m_Jacobi.outputMatrixtoFile("Jacobi.txt"); //2.3outputdeltaftoscreen m_Jacobi.solve(equNum,bph); printf("第%d次修正方程为\n",i+1); for(k=0;k<2*m_pq_Num+m_pv_Num;k++) { printf("%7.7f\n",bph[k]); } printf("\n"); printf("第%d次不平衡量为\n",i+1); ofstreamfout("bph.txt"); intp; for(p=0;p<equNum;p++) fout<<bph[p]<<"\n"; fout<<endl; fout.close(); //2.4updatevariables更新电压相角 /* for(intp=0;p<m_Bus_Num;p++) { if(m_Bus[p].Type==1) { m_Bus[p].theta+=bph[2*(p-m_pv_Num-1)]; m_Bus[p].V+=bph[2*(p-m_pv_Num)-1]*m_Bus[p].V; } if(m_Bus[p].Type==2) { m_Bus[p].theta+=bph[p+2*m_pq_Num-1]; } } */ for(p=0;p<m_Bus_Num;p++) { switch(m_Bus[p].Type) { case1://PQnode { m_Bus[p].theta=m_Bus[p].theta+bph[2*m_Bus_newIdx[p]]; m_Bus[p].V=m_Bus[p].V+bph[2*m_Bus_newIdx[p]+1]*m_Bus[p].V; break; } case2://PVnode m_Bus[p].theta=m_Bus[p].theta+bph[m_pq_Num+m_Bus_newIdx[p]]; break; case3://SWnode break; } } } //3.outputtheresult.if(calcDeltaS(bph)!=1) printf("outputunsolved\n"); return0;}intpf::calcDeltaS(double*bph){ inti,j,k; intanswer=-1; doublemaximum; for(i=0;i<2*m_pq_Num+m_pv_Num;i++) bph[i]=0; for(i=0;i<m_Bus_Num;i++) { switch(m_Bus[i].Type) { case1: //PQnode; for(k=0;k<m_Bus_Num;k++) { //activepowerunblance; bph[2*m_Bus_newIdx[i]]=bph[2*m_Bus_newIdx[i]]+m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)); //reactivepowerunblance; bph[2*m_Bus_newIdx[i]+1]=bph[2*m_Bus_newIdx[i]+1]+m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)-m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)); } bph[2*m_Bus_newIdx[i]]=m_Bus[i].GenP-m_Bus[i].LoadP-bph[2*m_Bus_newIdx[i]]; bph[2*m_Bus_newIdx[i]+1]=m_Bus[i].GenQ-m_Bus[i].LoadQ-bph[2*m_Bus_newIdx[i]+1]; break; case2: //PVnode; for(k=0;k<m_Bus_Num;k++) { //activepowerunblance; bph[m_Bus_newIdx[i]+m_pq_Num]=bph[m_Bus_newIdx[i]+m_pq_Num]+m_Bus[i].V*m_Bus[k].V*(m_Matrix_G(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*cos(m_Bus[i].theta-m_Bus[k].theta)+m_Matrix_B(getBusIdx(m_Bus[i].Num),getBusIdx(m_Bus[k].Num))*sin(m_Bus[i].theta-m_Bus[k].theta)); } bph[m_Bus_newIdx[i]+m_pq_Num]=m_Bus[i].GenP-m_Bus[i].LoadP-bph[m_Bus_newIdx[i]+m_pq_Num]; break; case3: //SWnode; break; } } maximum=bph[0]; for(i=0;i<2*m_pq_Num+m_pv_Num;i++) { printf("%7.9f\n",bph[i]); if(maximum<fabs(bph[i]))maximum=fabs(bph[i]); } printf("\n"); if(maximum<1e-6) answer=1; ofstreamfout("bph1.txt"); intp; for(p=0;p<2*m_pq_Num+m_pv_Num;p++) fout<<bph[p]<<"\n"; fout<<endl; fout.close(); returnanswer;}intpf::outputResult(){ ofstreamfout("Result.txt"); intp,q; for(p=0;p<m_Bus_Num;p++) { fout<<m_Bus[p].V<<"\t"; fout<<m_Bus[p].theta*180/3.14<<"\t"; fout<<endl; } fout.close(); intj; for(j=0;j<m_Bus_Num;j++) cout<<"节点"<<j+1<<"的电压为"<<m_Bus[j].V<<"\t"<<"相角为"<<m_Bus[j].theta*180/3.14<<endl; return0;}#include"pfMatrix.h"pfMatrix::pfMatrix()//data_<--initializedbelow(afterthe'if/throw'statement){ m_row_num=0; m_col_num=0; m_value=NULL; m_idx=NULL;}pfMatrix::pfMatrix(introws,intcols):m_row_num(rows),m_col_num(cols)//data_<--initializedbelow(afterthe'if/throw'statement){ inti,j;if(rows<=0||cols<=0)throw("Matrixconstructorhaswrongsize");m_value=newdouble*[rows];m_idx=newint[m_row_num]; for(i=0;i<m_row_num;i++) { m_value[i]=newdouble[m_col_num]; m_idx[i]=0; }for(i=0;i<m_row_num;i++) for(j=0;j<m_col_num;j++) m_value[i][j]=0.0;}pfMatrix::~pfMatrix(){ for(inti=0;i<m_row_num;i++) delete[]m_value[i]; delete[]m_value; delete[]m_idx;}double&pfMatrix::operator()(introw,intcol){if(row>=m_row_num||col>=m_col_num){#ifdef_DEBUG_MATRIX charstrTemp[100]; sprintf(strTemp,"row=%5dcol=%5d,Matrixsubscriptoutofbounds\n",row,col);DumpInfo(strTemp);#endifthrow("constMatrixsubscriptoutofbounds");}returnm_value[row][col];}doublepfMatrix::operator()(introw,intcol)const{if(row>=m_row_num||col>=m_col_num){#ifdef_DEBUG_MATRIX charstrTemp[100]; sprintf(strTemp,"row=%5dcol=%5d,Matrixsubscriptoutofbounds",row,col);DumpInfo(strTemp);#endifthrow("constMatrixsubscriptoutofbounds");}returnm_value[row][col];}voidpfMatrix::outputMatrix(){ inti,j; for(i=0;i<m_row_num;i++) { for(j=0;j<m_col_num;j++) { printf("%7.3f\t",m_value[i][j]); }printf("\n");//hereistheendofline } printf("\n");}voidpfMatrix::LUdcmp(){ constdoubleTINY=1.0e-40; inti,imax,j,k; doublebig,temp; double*vv=newdouble[m_row_num]; doubled=1.0; for(i=0;i<m_row_num;i++){ big=0.0; for(j=0;j<m_row_num;j++) if((temp=abs(m_value[i][j]))>big)big=temp; if(big<TINY)throw("pfMatrix::singularmatrix"); vv[i]=1.0/big; } for(k=0;k<m_row_num;k++){ big=0.0; for(i=k;i<m_row_num;i++){ temp=vv[i]*abs(m_value[i][k]); if(temp>big){ big=temp; imax=i; } } if(k!=imax){ for(j=0;j<m_row_num;j++){ temp=m_value[imax][j]; m_value[imax][j]=m_value[k][j]; m_value[k][j]=temp; } d=-d; vv[imax]=vv[k]; } m_idx[k]=imax; if(m_value[k][k]==0.0)m_value[k][k]=TINY; for(i=k+1;i<m_row_num;i++){ temp=m_value[i][k]/=m_value[k][k]; for(j=k+1;j<m_row_num;j++) m_value[i][j]-=temp*m_value[k][j]; } } delete[]vv;}voidpfMatrix::solve(intn,double*b){ LUdcmp(); inti,ii=0,ip,j; doublesum; if(m_col_num!=n||m_row_num!=n) {#ifdef_DEBUG_MATRIX charstrTemp[100]; sprintf(strTemp,"thematrixis%5d*%d,butthevectoris%5d,soitcan'tbesolved!",m_col_num,m_row_num,n);DumpInfo(strTemp);#endif throw("pfMatrix::solvebadsizes"); } for(i=0;i<n;i++){ ip=m_idx[i]; sum=b[ip]; b[ip]=b[i]; if(ii!=0) for(j=ii-1;j<i;j++)sum-=m_value[i][j]*b[j]; elseif(sum!=0.0) ii=i+1; b[i]=sum; } for(i=n-1;i>=0;i--){ sum=b[i]; for(j=i+1;j<n;j++)sum-=m_value[i][j]*b[j]; b[i]=sum/m_value[i][i]; }}voidpfMatrix::setSize(introws,intcols){ inti,j;if(rows<=0||cols<=0)throw("Matrixconstructorhaswrongsize");m_row_num=rows;m_col_num=cols;m_value=newdouble*[rows];m_idx=newint[m_row_num]; for(i=0;i<m_row_num;i++) { m_value[i]=newdouble[m_col_num]; m_idx[i]=0; }for(i=0;i<m_row_num;i++) for(j=0;j<m_col_num;j++) m_value[i][j]=0.0;}voidpfMatrix::outputMatrixtoFile(stringfileName){ ofstreamfout(fileName.c_str()); inti,j; fout<<m_row_num<<"\t"<<m_col_num<<endl; for(i=0;i<m_row_num;i++) { for(j=0;j<m_col_num;j++) fout<<m_value[i][j]<<"\t"; fout<<endl; } fout.close();}voidpfMatrix::readMatrixFromFile(stringfileName){ ifstreamob(fileName.c_str()); inti,j; double*value; ob>>m_row_num>>m_col_num; value=newdouble[m_col_num]; setSize(m_row_num,m_col_num); for(i=0;i<m_row_num;i++) { for(j=0;j<m_col_num;j++) { ob>>value[j]; m_value[i][j]=value[j]; } } delete[]value;}voidpfMatrix::Tokenize(conststring&str,vector<string>&tokens,conststring&delimiters=""){//Skipdelimitersatbeginning.string::size_typelastPos=str.find_first_not_of(delimiters,0);//Findfirst"non-delimiter".string::size_typepos=str.find_first_of(delimiters,lastPos);while(string::npos!=pos||string::npos!=lastPos){//Foundatoken,addittothevector.tokens.push_back(str.substr(lastPos,pos-lastPos));//Skipdelimiters.Notethe"not_of"lastPos=str.find_first_not_of(delimiters,pos);//Findnext"non-delimiter"pos=str.find_first_of(delimiters,lastPos);}}///////////////////////////////////////////////////////// double**branchresistive;//支路功率有功 double**branchreactive;//支路功率无功 double**deltaresistive;//支路网损有功 double**deltareactive;//支路网损无功功率 double*PVreactive;//PV节点无功功率//分配内存空间 branchresistive=(double**)malloc(m_Bus_Num*sizeof(double)); branchreactive=(double**)malloc(m_Bus_Num*sizeof(double)); deltaresistive=(double**)malloc(m_Bus_Num*sizeof(double)); deltareactive=(double**)malloc(m_Bus_Num*sizeof(double)); PVreactive=(double*)malloc(m_pv_Num*sizeof(double));for(i=0;i<m_Bus_Num;i++){branchresistive[i]=(double*)malloc(m_Bus_Num*sizeof(double));branchreactive[i]=(double*)malloc(m_Bus_Num*sizeof(double));deltaresistive[i]=(double*)malloc(m_Bus_Num*sizeof(double));deltareactive[i]=(double*)malloc(m_Bus_Num*sizeof(double));}//初始化数据for(i=0;i<m_pv_Num;i++){ PVreactive[i]=0.0;}for(i=0;i<m_Bus_Num;i++) for(j=0;j<m_Bus_Num;j++) { branchresistive[i][j]=0.0; branchreactive[i][j]=0.0; deltaresistive[i][j]=0.0;deltareactive[i][j]=0.0; } //计算各支路功率和网损 for(i=0;i<m_Bus_Num;i++) { for(j=0;j<m_Bus_Num;j++) { if(i!=j) { branchresistive[i][j]=-m_Bus[i].V*m_Bus[i].V*m_Matrix_G(i,j)+m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta)+m_Matrix_B(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)); branchreactive[i][j]=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)-m_Matrix_B(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta))+m_Bus[i].V*m_Bus[i].V*(m_Matrix_B(i,j)); } } } for(i=0;i<m_Bus_Num;i++) { for(j=i+1;j<m_Bus_Num;j++) { deltaresistive[i][j]=branchresistive[i][j]+branchresistive[j][i]; deltareactive[i][j]=branchreactive[i][j]+branchreactive[j][i]; if(deltareactive[i][j]!=0)//对于彼此之间有支路的两个节点,应该计入对地导纳m_Line[i].B/2的功率损耗,所以重新计算相应的支路无功 { branchreactive[i][j]=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)-m_Matrix_B(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta))+m_Bus[i].V*m_Bus[i].V*(m_Matrix_B(i,j)+m_Line[i].B/2); branchreactive[j][i]=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(j,i)*sin(m_Bus[j].theta-m_Bus[i].theta)-m_Matrix_B(j,i)*cos(m_Bus[j].theta-m_Bus[i].theta))+m_Bus[j].V*m_Bus[j].V*(m_Matrix_B(j,i)+m_Line[j].B/2); }} } for(i=0;i<m_Bus_Num;i++) { for(j=i+1;j<m_Bus_Num;j++) { deltareactive[i][j]=branchreactive[i][j]+branchreactive[j][i]; zongwangsunresistive=zongwangsunresistive+deltaresistive[i][j]; zongwangsunreactive=zongwangsunreactive+deltareactive[i][j]; }} //计算平衡节点功率及PV节点的无功功率 for(i=0;i<m_Bus_Num;i++) { if(m_Bus[i].Type==3) for(j=0;j<m_Bus_Num;j++) { SWresistive=m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*cos(m_Bus[j].theta)+m_Matrix_B(i,j)*sin(m_Bus[j].theta)); SWreactive=-m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*sin(m_Bus[j].theta)+m_Matrix_B(i,j)*cos(m_Bus[j].theta)); } if(m_Bus[i].Type==2) { for(j=0;j<m_Bus_Num;j++) { PVreactive[k]=PVreactive[k]+m_Bus[i].V*m_Bus[j].V*(m_Matrix_G(i,j)*sin(m_Bus[i].theta-m_Bus[j].theta)-m_Matrix_B(i,j)*cos(m_Bus[i].theta-m_Bus[j].theta)); } k++; } } //输出支路功率 ofstreamfout1("branchpower.txt"); fout1<<setprecision(6)<<endl; for(p=0;p<m_Bus_Num;p++) { for(q=0;q<m_Bus_Num;q++) if((branchreactive[p][q]!=0)||(branchresistive[p][q]!=0)) fout1<<"S"<<p<<"-"<<q<<"支路:"<<setw(5)<<branchresistive[p][q]<<"+j"<<branchreactive[p][q]<<"\n"; fout1<<endl; } fout1.close();//输出各支路网损和系统总网损 ofstreamfout2("wangsun.txt"); fout2<<setprecision(6)<<endl; for(p=0;p<m_Bus_Num;p++) { for(q=p+1;q<m_Bus_Num;q++) if((deltareactive[p][q]!=0)||(deltaresistive[p][q]!=0)) fout2<<p<<"-"<<q<<"支路:"<<setw(5)<<deltaresistive[p][q]<<"+j"<<deltareactive[p][q]<<endl; }fout2<<"总网损:"<<setw(5)<<zongwangsunresistive<<"+j"<<zongwangsunreactive<<endl;//输出PV节点的无功功率 ofstreamfout3("PVreactive.txt"); fout3<<setprecision(6)<<endl; for(p=0;p<m_pv_Num;p++) { fout3<<"PV节点功率:"<<setw(5)<<"+j"<<PVreactive[p]<<endl; fout3<<endl; } fout3.close();//输出平衡节点的有功和无功功率 ofstreamfout4("SWpower.txt"); fout4<<setprecision(6)<<endl; fout4<<setw(5)<<SWresistive<<"+j"<<SWreactive<<endl; fout4<<endl; fout4.close();return(0);}三、结果第一次雅克比矩阵:随后两次雅克比矩阵收敛后的电压幅值相角迭代次数:3各节点电压幅值和相角:(节点类型3为平衡节点,2为PV节点,3为PQ节点)幅值相角节点类型3 1.040 节点类型2 节点类型2 节点类型1 节点类型1 节点类型1 节点类型1 节点类型1 节点类型1 各支路功率:(S1-6代表节点1流向节点6的功率)各支路网损与总的网损:(0-3支路代表0节点到3节点之间支路上损耗的功率)总网损平衡节点功率:0+j0PV节点的无功功率:PV节点功率:0.0665362+jPV节点功率:-0.108597+j

高考语文试卷一、语言文字运用(15分)1.在下面一段话的空缺处依次填入词语,最恰当的一组是(3分)提到桃花源,许多人会联想到瓦尔登湖。真实的瓦尔登湖,早已成为▲的观光胜地,梭罗的小木屋前也经常聚集着▲的游客,不复有隐居之地的气息。然而虚构的桃花源一直就在我们的心中,哪怕▲在人潮汹涌的现代城市,也可以获得心灵的宁静。A.名闻遐迩闻风而至杂居 B.名噪一时闻风而至栖居C.名噪一时纷至沓来杂居 D.名闻遐迩纷至沓来栖居

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论