您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > (完整word版)潮流计算C++程序
程序为计算书3-4的过程程序可以解决开式单直网络和树状网络的计算。树状网络计算时要自己先设定好支路的起始节点和终止节点标号以及计算顺序源代码:#includeiostream#includefstream#includeiomanip#includemath.husingnamespacestd;structnode{//节点类inti;//节点编号doubleU,P,Q,delta;//额定电压计算负荷电压相角};structline{//线路类连接父节点子节点nodef_node,s_node;//父节点子节点doubleR,X,B;//线路参数RXB/2doubleP_in,Q_in,P_out,Q_out,d_P,d_Q,D_U,d_U;//线路输入输出功率以及线路消耗功率voidSet_node(nodenod1,nodenod2){f_node=nod1;s_node=nod2;}};voidfun1(line&lin){//由后往前递推功率doublep=lin.P_out;doubleq=lin.Q_out;doubleu=lin.s_node.U;lin.d_P=(p*p+q*q)/u/u*lin.R;lin.d_Q=(p*p+q*q)/u/u*lin.X;lin.P_in=lin.d_P+lin.P_out;lin.Q_in=lin.d_Q+lin.Q_out;};voidfun2(line&lin){//由前往后推电压doublep=lin.P_in;doubleq=lin.Q_in;doubleu=lin.f_node.U;lin.D_U=(p*lin.R+q*lin.X)/u;lin.d_U=(p*lin.X-q*lin.R)/u;lin.s_node.U=sqrt(pow(lin.f_node.U-lin.D_U,2)+pow(lin.d_U,2));//子节点电压lin.s_node.delta=lin.f_node.delta-atan(lin.d_U/(lin.f_node.U-lin.D_U));};voidfun3(line&lin){//由前往后推电压不计横向分量doublep=lin.P_in;doubleq=lin.Q_in;doubleu=lin.f_node.U;lin.D_U=(p*lin.R+q*lin.X)/u;lin.d_U=(p*lin.X-q*lin.R)/u;lin.s_node.U=lin.f_node.U-lin.D_U,2;//子节点电压lin.s_node.delta=lin.f_node.delta-atan(lin.d_U/(lin.f_node.U-lin.D_U));};voidmain(){intnum_l;intnum_n;//支路数节点数ifstreamfin;fin.open(E:\\data.txt);finnum_nnum_l;//输入节点数支路数ofstreamfout;fout.open(E:\\databak.txt);node*nod;nod=newnode[num_n];//节点数目line*lin;lin=newline[num_l];//线路数目nod[0].delta=0;double*u;//节点额定电压u=newdouble[num_n];for(inti=0;inum_n;i++){finu[i];};double*p;//节点有功功率p=newdouble[num_n];for(inti=0;inum_n;i++){finp[i];};double*q;//节点无功功率q=newdouble[num_n];for(inti=0;inum_n;i++){finq[i];};for(inti=0;inum_n;i++){//设定节点标号参数nod[i].i=i;nod[i].P=p[i];nod[i].Q=q[i];nod[i].U=u[i];};double*r;//线路电阻r=newdouble[num_l];for(inti=0;inum_l;i++){finr[i];};double*x;//线路电抗x=newdouble[num_l];for(inti=0;inum_l;i++){finx[i];};double*b;//线路电纳b=newdouble[num_l];for(inti=0;inum_l;i++){finb[i];};for(inti=0;inum_l;i++){//设定线路参数lin[i].R=r[i];lin[i].X=x[i];lin[i].B=b[i];};for(inti=0;inum_l;i++){//确定线路节点关系finlin[i].f_node.i;finlin[i].s_node.i;};for(inti=0;inum_l;i++){//计算节点运算负荷nod[lin[i].f_node.i].Q-=lin[i].B*nod[lin[i].f_node.i].U*nod[lin[i].f_node.i].U;nod[lin[i].s_node.i].Q-=lin[i].B*nod[lin[i].s_node.i].U*nod[lin[i].s_node.i].U;};double*P_c,*Q_c;//保存运算负荷数据P_c=newdouble[num_n];Q_c=newdouble[num_n];for(inttc=0;tcnum_n;tc++){P_c[tc]=nod[tc].P;Q_c[tc]=nod[tc].Q;};for(inti=0;inum_l;i++){//设定线路节点数据lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]);};for(intre=0;re3;re++){//迭代运算开始fout第re+1次迭代endl;doubleto_P(0),to_dP(0);for(inti=1;inum_n;i++){to_P+=nod[i].P;};for(inttc=0;tcnum_n;tc++){//重置运算负荷nod[tc].P=P_c[tc];nod[tc].Q=Q_c[tc];};for(intts=0;tsnum_l;ts++){//置各线路初始输出功率为子节点运算负荷lin[ts].P_out=lin[ts].s_node.P;lin[ts].Q_out=lin[ts].s_node.Q;};for(inti=0;inum_l;i++){//设定线路节点数据lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]);};intj=num_l-1;//反向求各支路功率损耗和功率分布for(j=num_l-1;j0;j--){fun1(lin[j]);nod[lin[j].f_node.i].P+=lin[j].P_in;nod[lin[j].f_node.i].Q+=lin[j].Q_in;for(inti=0;inum_l;i++){//设定线路节点数据lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]);};for(intts=0;tsnum_l;ts++){lin[ts].P_out=lin[ts].s_node.P;lin[ts].Q_out=lin[ts].s_node.Q;};};fun1(lin[j]);for(inti=0;inum_l;i++){//设定线路节点数据lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]);};intt=0;//求线路各点电压for(t=0;tnum_l-1;t++){fun2(lin[t]);nod[lin[t].s_node.i].U=lin[t].s_node.U;nod[lin[t].s_node.i].delta=lin[t].s_node.delta;for(inti=0;inum_l;i++){//设定线路节点数据lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]);};};fun2(lin[t]);nod[lin[t].s_node.i].U=lin[t].s_node.U;nod[lin[t].s_node.i].delta=lin[t].s_node.delta;fout支路信息:endl;for(inti=0;inum_l;i++){//输出线路信息fout支路lin[i].f_node.i+1-lin[i].s_node.i+1:endl;fout始端功率:lin[i].P_in+jlin[i].Q_inendl;fout末端功率:lin[i].P_out+jlin[i].Q_outendl;fout功率损耗:lin[i].d_P+jlin[i].d_Qendl;fout电压损耗lin[i].f_node.U-lin[i].s_node.Uendl;};fout节点信息:endl;for(inti=0;inum_n;i++){//输出节点信息fout节点i+1endl;fout电压:nod[i].U相角:nod[i].delta*180/3.14endl;};double*lu;//求最低电压及最低电压点lu=newdouble[num_n];int*lua;lua=newint[num_n];for(inti=0;inum_n;i++){lu[i]=nod[i].U;lua[i]=i;};for(inti=0;inum_n-1;i++){if(lu[i]lu[i+1]){doublest;inta;st=lu[i];a=lua[i];lu[i]=lu[i+1];lua[i]=lua[i+1];lu[i+1]=st;lua[i+1]=a;};};for(inti=0;inum_l;i++){to_dP+=lin[i].d_P;};fout全网信息:endl;fout总电源有功:lin[0].P_inendl;fout总负荷有功:to_Pendl;fout总有功损耗:to_dPendl;fout网损率:to_dP/(to_P+lin[0].P_in)endl;fout最低电压:lu[num_n-1]最低电压点:lua[num_n-1]+1endl;delete[]lu;delete[]lua;};delete[]nod;delete[]lin;delete[]u;delete[]p;delete[]q;delete[]r;delete[]x;delete[]b;}附:3-4的data文件3211311010000.172001.7158.51.2220.520.20.00028200112输出为:第1次迭代支路信息:支路1-2:始端功率:1.02165+j0.693296末端功率:1.00434+j0.658675功率损耗:0.0173106+j0.0346211电压损耗0.274063支路2-3:始端功率:0.5034+j0.3068末端功率:0.5+j0.3功率损耗:0.0034+j0.0068电压损耗0.109支路2-4:始端功率:0.200938+j0.151875末端功率:0.2+j0.15功率损耗:0.0009375+j0.001875电压损耗0.0739643节点信息:节点1电压:10.5相角:0节点
本文标题:(完整word版)潮流计算C++程序
链接地址:https://www.777doc.com/doc-7234033 .html