南通大学
} }
int bal=0;
for(int i1=1;i1<=AllNodeNumber;i1++)
if(bus[NewNumber[i1]-1].NodeType==3) //平衡节点 {
bal=i1; }
maxerror=0;
for(i=1;i<=AllNodeNumber;i++)//形成雅克比矩阵 {
int balance;
if(bus[NewNumber[i]-1].NodeType==3) //平衡节点 {
balance=i;continue; }
else if(bus[NewNumber[i]-1].NodeType==0)//PQ节点 {
P[i][2*i-1]=-a[i]-(yii[i].G*bus[NewNumber[i]-1].NodeE+yii[i].B*bus[NewNumber[i]-1].NodeF);
P[i][2*i]=-b[i]+(yii[i].B*bus[NewNumber[i]-1].NodeE-yii[i].G*bus[NewNumber[i]-1].NodeF);
Q[i][2*i-1]=b[i]+(yii[i].B*bus[NewNumber[i]-1].NodeE-yii[i].G*bus[NewNumber[i]-1].NodeF);
Q[i][2*i]=-a[i]+(yii[i].G*bus[NewNumber[i]-1].NodeE+yii[i].B*bus[NewNumber[i]-1].NodeF);
if(i!=AllNodeNumber) {
for(int m=seq[i];m if(seq[i]>BranchNumber)break; P[i][2*yij[m].j-1]=-(yij[m].G*bus[NewNumber[i]-1].NodeE+yij[m].B*bus[NewNumber[i]-1].NodeF); P[i][2*yij[m].j]=(yij[m].B*bus[NewNumber[i]-1].NodeE-yij[m].G*bus[NewNumber[i]-1].NodeF); Q[i][2*yij[m].j-1]=P[i][2*yij[m].j]; Q[i][2*yij[m].j]=-P[i][2*yij[m].j-1]; } } for(int s=seq[1];s 14 南通大学 { int r; if(yij[s].j==i) { for(int l=1;l if(s>=seq[l]&&s if(r==balance)continue; P[i][2*r-1]=-(yij[s].G*bus[NewNumber[i]-1].NodeE+yij[s].B*bus[NewNumber[i]-1].NodeF); P[i][2*r]=yij[s].B*bus[NewNumber[i]-1].NodeE-yij[s].G*bus[NewNumber[i]-1].NodeF; Q[i][2*r-1]=P[i][2*r]; Q[i][2*r]=-P[i][2*r-1]; } } P[i][2*AllNodeNumber+1]=bus[NewNumber[i]-1].NodeP-bus[NewNumber[i]-1].NodeE*a[i]-bus[NewNumber[i]-1].NodeF*b[i]; Q[i][2*AllNodeNumber+1]=bus[NewNumber[i]-1].NodeQ-bus[NewNumber[i]-1].NodeF*a[i]+bus[NewNumber[i]-1].NodeE*b[i]; } else//PV节点 { P[i][2*i-1]=-a[i]-(yii[i].G*bus[NewNumber[i]-1].NodeE+yii[i].B*bus[NewNumber[i]-1].NodeF); P[i][2*i]=-b[i]+(yii[i].B*bus[NewNumber[i]-1].NodeE-yii[i].G*bus[NewNumber[i]-1].NodeF); Q[i][2*i-1]=-2*bus[NewNumber[i]-1].NodeE; Q[i][2*i]=-2*bus[NewNumber[i]-1].NodeF; if(i!=AllNodeNumber) { for(int m=seq[i];m if(seq[i]>BranchNumber)break; P[i][2*yij[m].j-1]=-(yij[m].G*bus[NewNumber[i]-1].NodeE+yij[m].B*bus[NewNumber[i]-1].NodeF); P[i][2*yij[m].j]=(yij[m].B*bus[NewNumber[i]-1].NodeE-yij[m].G*bus[NewNumber[i]-1].NodeF); } } for(int s=seq[1];s 15 南通大学 int r; if(yij[s].j==i) { for(int l=1;l if(s>=seq[l]&&s P[i][2*r-1]=-(yij[s].G*bus[NewNumber[i]-1].NodeE+yij[s].B*bus[NewNumber[i]-1].NodeF); P[i][2*r]=yij[s].B*bus[NewNumber[i]-1].NodeE-yij[s].G*bus[NewNumber[i]-1].NodeF; } } P[i][2*AllNodeNumber+1]=bus[NewNumber[i]-1].NodeP-bus[NewNumber[i]-1].NodeE*a[i]-bus[NewNumber[i]-1].NodeF*b[i]; Q[i][2*AllNodeNumber+1]=bus[NewNumber[i]-1].VoltageVal*bus[NewNumber[i]-1].VoltageVal-bus[NewNumber[i]-1].NodeE*bus[NewNumber[i]-1].NodeE-bus[NewNumber[i]-1].NodeF*bus[NewNumber[i]-1].NodeF; } for(int iii=(bal*2-1);iii<(bal*2+1);iii++) { P[i][iii]=0; Q[i][iii]=0; } if(fabs(maxerror) if(fabs(maxerror) double ss=Q[1][1]; for(int z=1;z<(2*AllNodeNumber+2);z++) { Q[1][z]=Q[1][z]/ss; P[1][z]=P[1][z]-Q[1][z]*ss; } double s=P[1][2]; for(int y=1;y<(2*AllNodeNumber+2);y++) { P[1][y]=P[1][y]/s; } } for(int m=1;m 16 南通大学 if(m==balance)continue; double zy4=Q[i][2*m-1]; double zy5=P[i][2*m-1]; for(int z=(2*m-1);z<(2*AllNodeNumber+2);z++) { Q[i][z]=Q[i][z]-Q[m][z]*zy4; P[i][z]=P[i][z]-Q[m][z]*zy5; } double zy2=Q[i][2*m]; double zy3=P[i][2*m]; for(z=2*m;z<(2*AllNodeNumber+2);z++) { Q[i][z]=Q[i][z]-P[m][z]*zy2; P[i][z]=P[i][z]-P[m][z]*zy3; } } double s=Q[i][2*i-1]; for(int y=(2*i-1);y<(2*AllNodeNumber+2);y++) { Q[i][y]=Q[i][y]/s; } double zy6=P[i][2*i-1]; for(int z=2*i-1;z<(2*AllNodeNumber+2);z++) { P[i][z]=P[i][z]-Q[i][z]*zy6; } double s1=P[i][2*i]; for(y=2*i;y<(2*AllNodeNumber+2);y++) { P[i][y]=P[i][y]/s1; } } double *xx=new double[2*AllNodeNumber+1];//回代求解电压修正量 for(int h=AllNodeNumber;h>0;h--) { double zy=0; for(int g=2*AllNodeNumber;g>2*h;g--) zy+=xx[g]*P[h][g]; xx[2*h]=(P[h][2*AllNodeNumber+1]-zy); double zy1=0; for(int f=2*AllNodeNumber;f>(2*h-1);f--) { zy1+=xx[f]*Q[h][f]; } 17 南通大学 xx[2*h-1]=(Q[h][2*AllNodeNumber+1]-zy1); } for(int n=0;n bus[NewNumber[n+1]-1].NodeE=bus[NewNumber[n+1]-1].NodeE-xx[2*n+1]; bus[NewNumber[n+1]-1].NodeF=bus[NewNumber[n+1]-1].NodeF-xx[2*n+2]; } count++; output< delete[2*AllNodeNumber+2] P[i]; delete[2*AllNodeNumber+2] Q[i]; } } void POWERFLOW::branchpower()//支路功率计算 { I=new CURRENT[BranchNumber]; power=new POWER[BranchNumber]; groundpower=new double[GroundNumber]; for(int i=0;i double zz=branch[i].R*branch[i].R+branch[i].X*branch[i].X; if(branch[i].NodeI>0)//输电线路 { double ee=bus[branch[i].NodeI-1].NodeE-bus[branch[i].NodeJ-1].NodeE; double ff=bus[branch[i].NodeI-1].NodeF-bus[branch[i].NodeJ-1].NodeF; double vi2=bus[branch[i].NodeI-1].NodeE*bus[branch[i].NodeI-1].NodeE+bus[branch[i].NodeI-1].NodeF*bus[branch[i].NodeI-1].NodeF; double vj2=bus[branch[i].NodeJ-1].NodeE*bus[branch[i].NodeJ-1].NodeE+bus[branch[i].NodeJ-1].NodeF*bus[branch[i].NodeJ-1].NodeF; I[i].E=(ee*branch[i].R+ff*branch[i].X)/zz; I[i].F=(ff*branch[i].R-ee*branch[i].X)/zz; power[i].P1=bus[branch[i].NodeI-1].NodeE*I[i].E+bus[branch[i].NodeI-1].NodeF*I[i].F; power[i].Q1=bus[branch[i].NodeI-1].NodeF*I[i].E-bus[branch[i].NodeI-1].NodeE*I[i].F; power[i].Q1=power[i].Q1-branch[i].Y*vi2/2; power[i].P2=-bus[branch[i].NodeJ-1].NodeE*I[i].E-bus[branch[i].NodeJ-1].NodeF*I[i].F; 18