南通大学
ConnectNum[NodeConnect[NewNumber[z]][i]]++; ConnectNum[NodeConnect[NewNumber[z]][k]]++;
NodeConnect[NodeConnect[NewNumber[z]][i]][ConnectNum[NodeConnect[NewNumber[z]][i]]]=NodeConnect[NewNumber[z]][k];
NodeConnect[NodeConnect[NewNumber[z]][k]][ConnectNum[NodeConnect[NewNumber[z]][k]]]=NodeConnect[NewNumber[z]][i]; } } } }
ConnectNum[NewNumber[z]]=AllNodeNumber; }
for(i=1;i<(AllNodeNumber+1);i++)//新号数组中对应的老号 cout< OldNewNumber=new int[AllNodeNumber+1]; for(i=1;i<(AllNodeNumber+1);i++) { for(int j=1;j<(AllNodeNumber+1);j++) { if(NewNumber[j]==i) OldNewNumber[i]=j; } } for(i=1;i<(AllNodeNumber+1);i++)//老号数组中对应的新号 cout< delete[] ConnectNum; for (i = 0; i <(AllNodeNumber+1); i++) delete[15] NodeConnect[i]; } void POWERFLOW::FormY()//形成导纳矩阵 { int z=1; yii =new Yii[AllNodeNumber+1]; yij =new Yij[BranchNumber+1]; seq =new int[AllNodeNumber+1]; sum =new int[AllNodeNumber]; for(int f=0;f seq[f]=0; sum[f]=0; 9 南通大学 } seq[AllNodeNumber]=0; for(int i=1;i for(int j=0;j if((NewNumber[i]==abs(branch[j].NodeI))||(NewNumber[i]==abs(branch[j].NodeJ))) { if(OldNewNumber[abs(branch[j].NodeI)] continue; double Z=branch[j].R*branch[j].R+branch[j].X*branch[j].X; if(branch[j].NodeI<0) { if(branch[j].Circuit==1) { double Z1=branch[j+1].R*branch[j+1].R+branch[j+1].X*branch[j+1].X; yij[z].G=-branch[j].R/(Z*branch[j].Y)-branch[j+1].R/(Z1*branch[j+1].Y); yij[z].B=branch[j].X/(Z*branch[j].Y)+branch[j+1].X/(Z1*branch[j+1].Y); yii[OldNewNumber[abs(branch[j].NodeI)]].G+=-((1-branch[j].Y)*(-branch[j].R/(Z*branch[j].Y))/branch[j].Y+(1-branch[j+1].Y)*(-branch[j+1].R/(Z1*branch[j+1].Y))/branch[j+1].Y); yii[OldNewNumber[abs(branch[j].NodeI)]].B+=-((1-branch[j].Y)*(branch[j].X/(Z*branch[j].Y))/branch[j].Y+(1-branch[j+1].Y)*(branch[j+1].X/(Z1*branch[j+1].Y))/branch[j+1].Y); yii[OldNewNumber[abs(branch[j].NodeJ)]].G+=(1-branch[j].Y)*(-branch[j].R/(Z*branch[j].Y))+(1-branch[j+1].Y)*(-branch[j+1].R/(Z1*branch[j+1].Y)); yii[OldNewNumber[abs(branch[j].NodeJ)]].B+=(1-branch[j].Y)*(branch[j].X/(Z*branch[j].Y))+(1-branch[j+1].Y)*(branch[j+1].X/(Z1*branch[j+1].Y)); j++; } else { yij[z].G=-branch[j].R/(Z*branch[j].Y); 10 南通大学 yij[z].B=branch[j].X/(Z*branch[j].Y); yii[OldNewNumber[abs(branch[j].NodeI)]].G+=-(1-branch[j].Y)*yij[z].G/branch[j].Y; yii[OldNewNumber[abs(branch[j].NodeI)]].B+=-(1-branch[j].Y)*yij[z].B/branch[j].Y; yii[OldNewNumber[abs(branch[j].NodeJ)]].G+=(1-branch[j].Y)*yij[z].G; yii[OldNewNumber[abs(branch[j].NodeJ)]].B+=(1-branch[j].Y)*yij[z].B; } if(NewNumber[i]==abs(branch[j].NodeI)) yij[z].j=OldNewNumber[abs(branch[j].NodeJ)]; else yij[z].j=OldNewNumber[abs(branch[j].NodeI)]; z++; } else { if(branch[j].Circuit==1) { yij[z].G=-branch[j].R/Z-branch[j+1].R/(branch[j+1].R*branch[j+1].R+branch[j+1].X*branch[j+1].X); yij[z].B=branch[j].X/Z+branch[j+1].X/(branch[j+1].R*branch[j+1].R+branch[j+1].X*branch[j+1].X); yii[OldNewNumber[abs(branch[j].NodeI)]].B+=branch[j].Y/2+branch[j+1].Y/2; yii[OldNewNumber[abs(branch[j].NodeJ)]].B+=branch[j].Y/2+branch[j+1].Y/2; j++; } else { yij[z].G=-branch[j].R/Z; yij[z].B=branch[j].X/Z; yii[OldNewNumber[abs(branch[j].NodeI)]].B+=branch[j].Y/2; yii[OldNewNumber[abs(branch[j].NodeJ)]].B+=branch[j].Y/2; } if(NewNumber[i]==abs(branch[j].NodeI)) 11 南通大学 yij[z].j=OldNewNumber[abs(branch[j].NodeJ)]; else yij[z].j=OldNewNumber[abs(branch[j].NodeI)]; z++; } sum[i]++; } } if(i==1) seq[i]=1; else seq[i]=sum[i-1]+seq[i-1]; for(int y=seq[i];y<(seq[i]+sum[i]);y++) { yii[i].G-=yij[y].G; yii[i].B-=yij[y].B; } } seq[AllNodeNumber]=seq[AllNodeNumber-1]+sum[AllNodeNumber-1]; for(i=0;i<(AllNodeNumber+1);i++) { for(int j=1;j yii[i].G-=yij[j].G; yii[i].B-=yij[j].B; } } for(i=0;i yii[OldNewNumber[ground[i].Node]].B+=ground[i].B; } } void POWERFLOW::FormJ()//形成雅克比矩阵(边形成边消去) { a=new double[AllNodeNumber+1]; b=new double[AllNodeNumber+1]; for(int i=1;i<=AllNodeNumber;i++)//对角部分 { a[i]=yii[i].G*bus[NewNumber[i]-1].NodeE-yii[i].B*bus[NewNumber[i]-1].NodeF; b[i]=yii[i].G*bus[NewNumber[i]-1].NodeF+yii[i].B*bus[NewNumber[i]-1].NodeE; } 12 南通大学 for(int d=1;d if(seq[d]>BranchNumber)break; for(int j=seq[d];j a[d]+=yij[j].G*bus[NewNumber[yij[j].j]-1].NodeE-yij[j].B*bus[NewNumber[yij[j].j]-1].NodeF; b[d]+=yij[j].G*bus[NewNumber[yij[j].j]-1].NodeF+yij[j].B*bus[NewNumber[yij[j].j]-1].NodeE; } } for(int f=2;f<=AllNodeNumber;f++)//下三角部分 { for(int s=seq[1];s int r; if(yij[s].j==f) { for(int l=1;l if(s>=seq[l]&&s a[f]+=yij[s].G*bus[NewNumber[r]-1].NodeE-yij[s].B*bus[NewNumber[r]-1].NodeF; b[f]+=yij[s].G*bus[NewNumber[r]-1].NodeF+yij[s].B*bus[NewNumber[r]-1].NodeE; } } } double**P=new double*[AllNodeNumber+1]; double**Q=new double*[AllNodeNumber+1]; for(int x=1;x<(AllNodeNumber+1);x++) { P[x]=new double[2*AllNodeNumber+2]; Q[x]=new double[2*AllNodeNumber+2]; } for(int p=1;p<=AllNodeNumber;p++) { for(int y=1;y<=2*AllNodeNumber+1;y++) { P[p][y]=0; Q[p][y]=0; 13