潮流计算--电力系统大作业(C++编写)_第1页
潮流计算--电力系统大作业(C++编写)_第2页
潮流计算--电力系统大作业(C++编写)_第3页
潮流计算--电力系统大作业(C++编写)_第4页
潮流计算--电力系统大作业(C++编写)_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、 程序设计所涉及二叉树解释任意一棵树或一个森林都能唯一地对应一棵二叉树,由此而编写本程序。本程序采用类二叉树为整体结构,二叉树类下定义节点类,每一条支路均为树的一个节点,支路所有的参数均作为节点的属性,并给节点加入属性“支路编号”,并以支路编号为依据构建二叉树,这就要求提前根据二叉树结构给每一个支路编号。支路编号原则:左子树上所有编号均小于其双亲的编号,右子树上所有编号均大于其双亲的编号,为了便于查看,本程序在节点较少时编号从1开始,逐个递加至支路数;当支路较多时,可不必拘泥于逐个递加,只要满足支路编号原则即可。例如习题3-4:程序二叉树结构示意图: 本二叉树中节点1即支路1为题目中节点1与节

2、点2之间的部分;本二叉树中节点2即支路2为题目中节点2与节点3之间的部分;对于习题3-3:程序二叉树结构示意图: 本二叉树中节点2即支路2为题目中节点1与节点2之间的部分;本二叉树中节点1即支路1为题目中节点2与节点3之间的部分;本二叉树中节点3即支路3为题目中节点2与节点4之间的部分.拓展:如下多支路网络:对于三节点网络需先进行以下网络处理转化为标准二叉树,而后进行计算;图中三角形表明该项阻抗为零,为纯导线,并进行相应参数补充进行计算。程序说明文档*本程序测试使用方法:在E盘根目录下建立输入文件: 输入文件名:input.txt; 将所附算例对应输入文件内容复制粘贴至上述文件中,在VC+6.

3、0环境下运行cpp文件得出结果。 输出文件在E盘根目录下 输出文件名为:data.txt;*程序功能说明:本程序可以计算任意长度线型开始网络潮流; 支持多电压等级下的计算; 可在除供电节点外任意节点引出负载;* 输入格式说明:以支路为基本单位,按潮流方向输入数据: 以下例示意: 2 /支路个数 1,110,118,8.5,20.5,0.000564,0,0,1,0,0 /线路等效的支路 2,11,110,1.22,20.2,0,40,30,10,0.17,1.7 /变压器等效的支路 . /按此方式知道输入所有的支路 . /输入从上到下的顺序为潮流在 . /线型开式网络中的流动方向 /* 第一行

4、输入支路个数,回车 第二行至后输入各个支路参数,回车分隔不同支路; 各行输入的支路参数顺序是: 支路编号,末端电压,始端电压,线路等效电阻,线路等效感抗,线路等效容纳,末端输入有功,末端输入无功,变比,变压器有功励磁损耗,变压器无功励磁损耗 对于线路等效电路:变压器有功/无功损耗输入零,变比输入1; 对于变压器等效电路:所有的参数均归算至高压侧,Rt,Xt对应输入线路等效电阻/感抗的位置,线路等效容抗为零; 对于个节点的引出负荷:输入至以此节点为末节点的支路的末端输入有功/无功部分; */*输出文件格式说明:输出的内容包括 (1)支路信息:每个支路元件的始端有功、无功和末端有功、无功;有功损耗

5、无功损耗;电压损耗; (2)全网信息:全网的总电源有功、总负荷有功、有功损耗、网损率; (3)迭代信息:每次完整迭代后的所有内容; 具体在输出文件中都明确标出。*程序中变量定义说明:类中定义的变量class line_part /定义支路类 double U2; /支路电压降落:U0电压降落横分量,U1电压降落纵分量 double k; /变压器变比 double val; /支路排序 double U_end; /支路末端电压 double U_begin; /支路首段电压 double X3; /支路等效阻抗: X0电阻,X1感抗,X2容纳 double S_end2; /支路末端功率:S

6、_end0有功,S_end1无功 double S_begin2; /支路首段功率:S_begin0有功,S_begin1无功 double S02; /变压器励磁损耗:S00有功,S01无功 double S_org2; /支路末端负载:S_org0有功,S_org1无功 line_part *lchild,*rchild; /支路的后继两个支路class BinTree /定义树类void PreOrder()PreOrder(root); /树的先序遍历修改电压void PostOrder()PostOrder(root); /树的后序遍历修改潮流void display()displa

7、y(root); /树的先序遍历显示数据line_part *root; /树的根,是一个支路类;主函数中定义的数据 ofstream outfile; /输出数据流定 ifstream infile; /输入数据流定 const int M(a); /支路个数常量 主程序(复制粘贴到C+就能用)*#include<fstream.h>#include<iostream.h>#include<math.h>double p_cost_all=0;double sqr(double x) /平方计算函数return x*x;class line_part /定

8、义支路类private: double val; /支路排序 double U_end; /支路末端电压 double U_begin; /支路首段电压 double X3; /支路等效阻抗: X0电阻,X1感抗,X2容纳 double S_end2; /支路末端功率:S_end0有功,S_end1无功 double S_begin2; /支路首段功率:S_begin0有功,S_begin1无功 double S02; /变压器励磁损耗:S00有功,S01无功 double S_org2; /支路末端负载:S_org0有功,S_org1无功 line_part *lchild,*rchild;

9、public: double U2; /支路电压降落:U0电压降落横分量,U1电压降落纵分量 double k; /变压器变比public:line_part()val=0;U_end=0;U_begin=0;X0=0;X1=0;X2=0;S_end0=S_org0=0;S_end1=S_org1=0;S_begin0=0;S_begin1=0;k=1;S00=0;S01=0;U0=0;U1=0;lchild = rchild= NULL;line_part(double vall,double u_end=0,double u_begin=0,double r=0, double x=0,d

10、ouble b=0,double Pe=0,double Xe=0,double K=0,double P0=0,double Q0=0) val=vall; U_end=u_end;U_begin=u_begin;X0=r;X1=x;X2=b;S_end0=S_org0=Pe;S_end1=S_org1=Xe;S_begin0=0;S_begin1=0;k=K;S00=P0; S01=Q0;U0=0;U1=0;lchild = rchild= NULL;friend class BinTree;friend void pass_U(line_part*a,line_part*b,line_p

11、art*c); /电压传递函数 friend void pass_w(line_part*a,line_part*b,line_part*c); /功率传递函数friend void pass_U2(line_part*a,line_part*b); /电压传递函数 friend void pass_w2(line_part*a,line_part*b); /功率传递函数void Sbegin() /支路首段功率计算函数double Uend,I2;Uend=k*U_end;I2=(sqr(S_end0)+sqr(S_end1-sqr(U_end)*X2/2)/sqr(Uend);S_begi

12、n0=S_end0+I2*X0+S00;S_begin1=S_end1+I2*X1+S01-sqr(U_begin)*X2/2-sqr(U_end)*X2/2; ;void Uend() /支路末端电压计算函数 double U_heng(0),U_zong(0);double p_begin,q_begin;p_begin=S_begin0-S00;q_begin=S_begin1+sqr(U_begin)*X2/2-S01;U_heng=(p_begin*X0+q_begin*X1)/U_begin; /U_heng即是u2U_zong=(p_begin*X1-q_begin*X0)/U_

13、begin; /U_zong即是u2U_end=sqrt(sqr(U_begin-U_heng)+sqr(U_zong)/k;U0=U_heng;U1=U_zong;double get_val() /返回支路编号if(this=0)return -1;elseif(val>0&&val<100) return val;else return -1;double get_Uend() /返回支路末端电压 return U_end;double get_Ubegin() /返回支路首段电压return U_begin; double get_Pbegin() /返回支

14、路首段有功return S_begin0;double get_Pend() /返回支路末端有功 return S_end0;double get_Qbegin() /返回支路首段无功return S_begin1;double get_Qend() /返回支路末端无功 return S_end1;double get_Pcost() /返回支路有功损耗 return S_begin0-S_end0;double get_Qcost() /返回支路无功损耗 return S_begin1-S_end1;line_part *get_lchild() /返回支路无功损耗 return lchil

15、d;line_part *get_rchild() /返回支路无功损耗 return rchild;void pass_U(line_part *a,line_part *b,line_part *c)(*c).U_begin=(*a).U_end;(*b).U_begin=(*a).U_end;void pass_w(line_part *a,line_part *b,line_part *c)(*a).S_end0=(*b).S_begin0+(*c).S_begin0+(*a).S_org0;(*a).S_end1=(*b).S_begin1+(*c).S_begin1+(*a).S_o

16、rg1;void pass_U2(line_part *a,line_part *b)(*b).U_begin=(*a).U_end;void pass_w2(line_part *a,line_part *b)(*a).S_end0=(*b).S_begin0+(*a).S_org0;(*a).S_end1=(*b).S_begin1+(*a).S_org1;class BinTreepublic:friend void pass_U(line_part*,line_part*,line_part*); /电压传递函数friend void pass_w(line_part*,line_pa

17、rt*,line_part*); /功率传递函数BinTree()line_part *aa=new line_part(0,0,0,0,0,0,0,0,0,0,0); root = aa; line_part *Getroot()return root;void insertline_part(double vall,double u_end=0,double u_begin=0,double r=0, double x=0,double b=0,double Pe=0,double Xe=0, double K=0,double P0=0,double Q0=0)insertline_pa

18、rt(root,vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);void PreOrder()PreOrder(root);void PostOrder()PostOrder(root);void display()display(root);private:line_part *root;void insertline_part(line_part *&t,double vall,double u_end,double u_begin,double r, double x,double b,double Pe,double Xe, double K,d

19、ouble P0,double Q0);void PreOrder(line_part *&t);void PostOrder(line_part *t);void display(line_part *&t);void BinTree:insertline_part(line_part *&t, double vall,double u_end=0,double u_begin=0,double r=0, double x=0,double b=0,double Pe=0,double Xe=0, double K=0,double P0=0,double Q0=0)

20、 /插入节点double ass=t->get_val();if(t=0|t->get_val()<=0) t=new line_part (vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);else if(vall<t->get_val() insertline_part(t->lchild, vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);else insertline_part(t->rchild, vall,u_end,u_begin,r,x,b,Pe,Xe,K,P0,Q0);/vo

21、id BinTree:display(line_part *&t)if(t->get_val()>0&&t->get_val()<100)display(t->lchild);display(t->rchild);ofstream outfile1; outfile1.open("e:data.txt",ios:ate); p_cost_all +=t->get_Pcost();double U; / 计算并存放各个节点的电压相角(始端为零)U=atan2(t->U1,(t->get_Ubegin

22、()-t->U0)/3.1415926*180;outfile1<<"支路"<<t->get_val()<<"电压相角"<<" "<<U<<endl;outfile1<<" "<<"首端电压"<<" "<<t->get_Ubegin()<<endl;/计算并存放各个支路的首端电压outfile1<<" &q

23、uot;<<"末端电压"<<" "<<t->get_Uend()<<endl; /计算并存放各个支路的末端电压double U_cost; /计算并存放各个支路的电压损耗U_cost=t->get_Ubegin()-t->get_Uend();outfile1<<" "<<"电压损耗"<<" "<<U_cost<<endl;outfile1<<" &

24、quot;<<"始端有功"<<" "<<t->get_Pbegin()<<endl;/计算并存放各个支路的首端电压outfile1<<" "<<"始端无功"<<" "<<t->get_Qbegin()<<endl; /计算并存放各个支路的末端电压outfile1<<" "<<"末端有功"<<"

25、 "<<t->get_Pend()<<endl;/计算并存放各个支路的首端电压outfile1<<" "<<"末端无功"<<" "<<t->get_Qend()<<endl; /计算并存放各个支路的末端电压double P_cost; /计算并存放各个支路的有功损耗P_cost=t->get_Pcost();outfile1<<" "<<"有功损耗"<&l

26、t;" "<<P_cost<<endl;double Q_cost; /计算并存放各个支路的无功损耗Q_cost=t->get_Qcost();outfile1<<" "<<"无功损耗"<<" "<<Q_cost<<endl;outfile1.close();/void BinTree:PreOrder(line_part *&t) /先序遍历二叉树修改电压if(t->get_val()>0&&am

27、p;t->get_val()<100)if(t->get_lchild()->get_val()>0&&t->get_lchild()->get_val()<100)if(t->get_rchild()->get_val()>0&&t->get_rchild()->get_val()<100)t->Uend();pass_U(t,t->lchild,t->rchild);t->lchild->Uend();t->rchild->Uend(

28、);elset->Uend();pass_U2(t,t->lchild);t->lchild->Uend();elseif(t->get_rchild()->get_val()>0&&t->get_rchild()->get_val()<100)t->Uend();pass_U2(t,t->rchild);t->rchild->Uend();elsePreOrder(t->lchild);PreOrder(t->rchild);void BinTree:PostOrder(line_

29、part *t) /后序遍历二叉树修改潮流if(t->get_val()>0&&t->get_val()<100)PostOrder(t->lchild);PostOrder(t->rchild);if(t->get_lchild()->get_val()>0&&t->get_lchild()->get_val()<100)if(t->get_rchild()->get_val()>0&&t->get_rchild()->get_val()<

30、;100)t->lchild->Sbegin();t->rchild->Sbegin();pass_w(t,t->lchild,t->rchild); t->Sbegin();elset->lchild->Sbegin();pass_w2(t,t->lchild);t->Sbegin();elseif(t->get_rchild()->get_val()>0&&t->get_rchild()->get_val()<100)t->rchild->Sbegin();pa

31、ss_w2(t,t->rchild); t->Sbegin();else;void main()ofstream outfile; /输出数据流定义outfile.open("e:data.txt"); outfile.clear();outfile.close();ifstream infile;infile.open("e:input.txt"); /输入数据流定义int a;int l(0);char b; infile>>a; cout<<"节点个数 "<<a<<en

32、dl; const int M(a); /支路节点数常量 double *A=new double10*M; /输入流输入各支路数据数组 while(l<11*M) infile>>Al; infile.get(b); l+; ;outfile.open("e:data.txt",ios:ate); outfile<<"节点个数 "<<a<<endl;outfile<<endl;outfile.close(); BinTree elec;for(int i=0;i<M;i+) /添加节点elec.insertline_part(A11*i+0,A11*i+1,A11*i+2,A11*i+3,A11*i+4,A11*i+5,A11*i+6,A11*i+7,A11*i+8,A11*i+9,A

温馨提示

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

评论

0/150

提交评论