PCL.cpp
上传用户:hyjxc386
上传日期:2021-09-01
资源大小:2k
文件大小:7k
开发平台:

Visual C++

  1. #include<iostream.h>
  2. #include<iomanip.h>
  3. #include<math.h>
  4. #include<fstream.h>
  5. #include <stdio.h> 
  6. #include <stdlib.h>
  7. #define N 50
  8. void guss(double **a,int n)
  9. int i,j,k;double c; 
  10. for(k=0;k<n-1;k++)
  11. c=a[k][k]; 
  12. for(j=k;j<=n;j++) a[k][j]/=c; 
  13. for(i=k+1;i<n;i++) 
  14. c=a[i][k]; 
  15. for(j=k;j<=n;j++) a[i][j]-=c*a[k][j]; 
  16. a[n-1][n]/=a[n-1][n-1]; 
  17. for(k=n-2;k>=0;k--) 
  18. for(j=k+1;j<n;j++) a[k][n]-=a[k][j]*a[j][n]; 
  19. void main()
  20. {
  21. ifstream pfile;
  22. pfile.open("test.txt");
  23. if (!pfile)
  24. {cout<<"can't open!n"<<endl;}
  25. cout<<"%%%%%%潮流计算%%%%%%"<<endl;
  26. int n=1,m,sum,sumPQ=0,sumPV=0,sumdetaV=0;
  27. double k;
  28. int type[N];
  29. type[0]=0;
  30. double V[N],P[N],Q[N],P1[50];
  31. double x[50][50],r[N][N],bb[N][N],K[N][N],B1[N][N],mo[N][N],G1[N][N],KK[N][N];
  32. for(int i=0;i<=N;i++)
  33. {P[i]=0;Q[i]=0;P1[i]=0;V[i]=1;}
  34. for(i=0;i<N;i++)
  35. for(int j=0;j<N;j++)
  36. {x[i][j]=0;r[i][j]=0;bb[i][j]=0;K[i][j]=1;KK[i][j]=1;B1[i][j]=0;G1[i][j]=0;mo[i][j]=1;}
  37. i=1;
  38. for(n=1;n!=0;)
  39. {
  40.  pfile>>n;
  41.  if(n) 
  42.  {
  43.  pfile>>type[n];
  44.  if(type[n]==1) 
  45.  {pfile>>P[n]>>Q[n];sumPQ++;}
  46.  if(type[n]==2) 
  47.  {pfile>>P[n]>>k;sumPV++;}
  48.  if(type[n]==3) 
  49.  {pfile>>k>>k;sumdetaV++;}
  50.  sum=i++;
  51.  }
  52.  }
  53. for(n=1;n!=0;)
  54.  {
  55.  pfile>>n;
  56.  if(type[n]==2) pfile>>P1[n]>>V[n];
  57.  if(type[n]==3) pfile>>k>>V[n];
  58. }
  59. for(n=1;n!=0;)
  60. {
  61. pfile>>n;
  62. if(n)
  63. {
  64. pfile>>m;
  65. pfile>>r[n][m]>>x[n][m]>>bb[n][m]>>K[m][n];
  66. r[m][n]=r[n][m];x[m][n]=x[n][m];KK[n][m]=K[m][n];
  67. bb[m][n]=bb[n][m];
  68. }
  69. }
  70. for(n=1;n<=sum;n++)
  71. for(m=1;m<=sum;m++) 
  72. {
  73. mo[n][m]=x[n][m]*x[n][m]+r[n][m]*r[n][m];
  74. if(mo[n][m]==0) mo[n][m]=1;
  75. }
  76. for(n=1;n<=sum;n++)
  77. for(m=1;m<=sum;m++)
  78. {
  79. B1[n][n]+=bb[n][m]-x[n][m]*K[n][m]*K[n][m]/mo[n][m];
  80.     G1[n][n]+=r[n][m]*K[n][m]*K[n][m]/mo[n][m];
  81. }
  82. for(n=1;n<=sum;n++)
  83. for(m=1;m<=sum;m++)
  84. if(K[n][m]==1) {K[n][m]=K[m][n];KK[m][n]=-1;}
  85. for(n=1;n<=sum;n++)
  86. for(m=1;m<=sum;m++)
  87. {
  88. if(m!=n)
  89. {
  90. B1[n][m]+=x[n][m]*K[n][m]/mo[n][m];
  91. G1[n][m]+=-r[n][m]*K[n][m]/mo[n][m];
  92. }
  93. }
  94. double deta[N],detaP[N],detaV[N],PS[N],Pi[N],Ddeta[N],detaQ[N],Qi[N];
  95. double aa[N][N],cc[N][N];
  96. for(n=1;n<=sum;n++)
  97. {deta[n]=0;detaP[n]=0;PS[n]=0;Pi[n]=0;detaQ[n]=0;Qi[n]=0;}
  98. for(n=1;n<=sum-1;n++)
  99. PS[n]=-P[n]+P1[n];
  100. int Kp=1,Kq=1,maxP=0,maxQ=0;
  101. k=0;
  102. cout<<"**********************************************************************"<<endl;
  103. P:for(n=1;n<=sum-1;n++)
  104. {
  105. for(m=1;m<=sum;m++)
  106. Pi[n]+=V[m]*(G1[n][m]*cos(deta[n]-deta[m])+B1[n][m]*sin(deta[n]-deta[m]));
  107. Pi[n]*=V[n];
  108. }
  109. double maxdetaP=0,maxdetaQ=0;
  110. for(n=1;n<=sum-1;n++)
  111. {
  112. detaP[n]=PS[n]-Pi[n];
  113. Pi[n]=0;
  114. }
  115.     for(n=0;n<sum-1;n++)
  116. for(m=0;m<sum-1;m++) aa[n][m]=-B1[n+1][m+1];
  117. for(n=0;n<sum;n++)
  118. aa[n][sum-1]=detaP[n+1]/V[n+1];
  119. double *a[N];
  120. for (n=0;n<sum-1;n++)
  121. a[n]=aa[n];
  122. for(n=1;n<=sum-1;n++)
  123. if(fabs(maxdetaP)<fabs(detaP[n])) {maxdetaP=detaP[n];maxP=n;}
  124. if(fabs(maxdetaP)<1e-5) 
  125. {
  126. Kp=0;
  127. if(Kq==0) goto R;
  128. if(Kq!=0) goto Q;
  129. }
  130. guss(a,sum-1);
  131. for(n=0;n<sum-1;n++)
  132. {Ddeta[n+1]=aa[n][sum-1]/V[n+1];deta[n+1]=deta[n+1]+Ddeta[n+1];}
  133. Kq=1;
  134. Q:for(n=1;n<=sumPQ;n++)
  135. {
  136. for(m=1;m<=sum;m++)
  137. Qi[n]+=V[m]*(G1[n][m]*sin(deta[n]-deta[m])-B1[n][m]*cos(deta[n]-deta[m]));
  138. Qi[n]*=V[n];
  139. }
  140.  
  141. for(n=1;n<=sumPQ;n++)
  142. {
  143. detaQ[n]=-Q[n]-Qi[n];
  144. Qi[n]=0;
  145. }
  146. for(n=0;n<sumPQ;n++)
  147. for(m=0;m<sumPQ;m++) cc[n][m]=-B1[n+1][m+1];
  148. for(n=0;n<sumPQ;n++)
  149. cc[n][sumPQ]=detaQ[n+1]/V[n+1];
  150.  for(n=1;n<=sumPQ;n++)
  151.   ;
  152. double *c[N];
  153. for (n=0;n<sumPQ;n++)
  154. c[n]=cc[n];
  155. for(n=1;n<=sumPQ;n++)
  156. if(fabs(maxdetaQ)<fabs(detaQ[n])) {maxdetaQ=detaQ[n];maxQ=n;}
  157. if(fabs(maxdetaQ)<1e-5) 
  158. {
  159. Kq=0;
  160. if(Kp==0) goto R;
  161.     if(Kq!=0) goto T;
  162. }
  163. guss(c,sumPQ);
  164. for(n=0;n<sumPQ;n++)
  165. {detaV[n+1]=cc[n][sumPQ];V[n+1]=V[n+1]+detaV[n+1];}
  166. T: if(fabs(maxdetaQ)<fabs(maxdetaP)) {maxdetaQ=maxdetaP;maxQ=maxP;
  167. cout<<"第"<<k<<"次迭代后误差:"<<setw(15)<<maxdetaQ<<" 最大的功率误差在节点:"<<maxQ<<" 最大误差是detaP"<<endl;}
  168. else
  169. cout<<"第"<<k<<"次迭代后误差:"<<setw(15)<<maxdetaQ<<" 最大的功率误差在节点:"<<maxQ<<" 最大误差是detaQ"<<endl;
  170. k=k+1;
  171.     goto P;
  172. R:cout<<"*******************************************************************************"<<endl;
  173.   cout<<"节点数据:"<<endl;
  174.   for(n=1;n<=sum;n++)
  175. {
  176. cout<<"节点:"<<n<<"电压:"<<setw(10)<<V[n]<<"  相角:"<<setw(12)<<deta[n]*180/3.1415926;//转换为角度制
  177. if(type[n]==1) cout<<"发电有功:"<<setw(10)<<"0.0"<<"  发电无功:"<<setw(10)<<"0.0"<<"负荷有功:"<<setw(10)<<-PS[n]<<"  负荷无功:"<<setw(10)<<Q[n]<<endl;//PQ节点
  178. else if(type[n]==2)
  179. {
  180. for(m=1;m<=sum;m++)
  181. Q[n]+=V[m]*(G1[n][m]*sin(deta[n]-deta[m])-B1[n][m]*cos(deta[n]-deta[m]));
  182. Q[n]*=V[n];
  183. cout<<"发电有功:"<<setw(10)<<PS[n]<<"  发电无功:"<<setw(10)<<Q[n]<<"负荷有功:"<<setw(10)<<"0.0"<<"  负荷无功:"<<setw(10)<<"0.0"<<endl;
  184. }
  185. else
  186. {
  187. for(m=1;m<=sum;m++)
  188. PS[n]+=V[m]*(G1[n][m]*cos(deta[n]-deta[m])+B1[n][m]*sin(deta[n]-deta[m]));
  189. PS[n]*=V[n];
  190. for(m=1;m<=sum;m++)
  191. Q[n]+=V[m]*(G1[n][m]*sin(deta[n]-deta[m])-B1[n][m]*cos(deta[n]-deta[m]));
  192. Q[n]*=V[n];
  193. cout<<"发电有功:"<<setw(10)<<PS[n]<<"  发电无功:"<<setw(10)<<Q[n]<<"负荷有功:"<<setw(10)<<"0.0"<<"  负荷无功:"<<setw(10)<<"0.0"<<endl;//输出浮点型的0.0
  194. }
  195. }
  196.   cout<<"-------------------------------------------------------------------------------"<<endl;
  197.   cout<<"支路数据:"<<endl;
  198.   double LP[N][N],LQ[N][N];
  199.   for(n=1;n<N;n++)
  200.   for(m=n;m<N;m++)
  201.   LP[n][m]=LP[m][n]=LQ[n][m]=LQ[m][n]=0;
  202.   cout<<"支路功率流动"<<endl;
  203.   for(n=1;n<=sum;n++)
  204. for(m=1;m<=sum;m++)
  205. {
  206. if(r[n][m]||x[n][m]||bb[n][m])
  207. {
  208. LP[n][m]=-V[n]*V[n]*((1-K[n][m])*G1[n][m]/KK[n][m])-V[n]*cos(deta[n])*(G1[n][m]*(V[n]*cos(deta[n])-V[m]*cos(deta[m]))-B1[n][m]*(V[n]*sin(deta[n])-V[m]*sin(deta[m])))
  209. -V[n]*sin(deta[n])*(G1[n][m]*(V[n]*sin(deta[n])-V[m]*sin(deta[m]))+B1[n][m]*(V[n]*cos(deta[n])-V[m]*cos(deta[m])));
  210. LQ[n][m]=V[n]*V[n]*(-bb[n][m]+(1-K[n][m])*B1[n][m]/KK[n][m])-V[n]*sin(deta[n])*(G1[n][m]*(V[n]*cos(deta[n])-V[m]*cos(deta[m]))-B1[n][m]*(V[n]*sin(deta[n])-V[m]*sin(deta[m])))
  211. -V[n]*cos(deta[n])*(-G1[n][m]*(V[n]*sin(deta[n])-V[m]*sin(deta[m]))-B1[n][m]*(V[n]*cos(deta[n])-V[m]*cos(deta[m])));
  212. cout<<n<<"到"<<m<<"的有功:"<<setw(10)<<LP[n][m]<<" ";
  213. cout<<n<<"到"<<m<<"的无功:"<<setw(10)<<LQ[n][m]<<endl;
  214. }
  215. }
  216.   cout<<"支路功率损耗"<<endl;
  217.   for(n=1;n<=sum;n++)
  218. for(m=n+1;m<=sum;m++)
  219. {
  220. if(LP[n][m]&&LP[m][n]) cout<<"节点"<<n<<"到"<<"节点"<<m<<"有功损耗"<<setw(15)<<fabs(LP[n][m]+LP[m][n])<<" ";
  221. if(LQ[n][m]&&LQ[m][n]) cout<<"节点"<<n<<"到"<<"节点"<<m<<"无功损耗"<<setw(15)<<fabs(LQ[n][m]+LQ[m][n])<<endl;
  222. }
  223.   cout<<"-------------------------------------------------------------------------------"<<endl;
  224.   cout<<"全网数据:"<<endl;
  225.   double GenerateP=0,LoadP=0,LossP,MaxV=0,MinV=100000;
  226.   int NumbermaxV=1,NumberminV=1;
  227.   for(n=1;n<=sum;n++)
  228.   {
  229. if(type[n]!=1) GenerateP+=PS[n];
  230. else LoadP+=-PS[n];
  231. if(V[n]>MaxV) {MaxV=V[n];NumbermaxV=n;}
  232. else if(V[n]<MinV) {MinV=V[n];NumberminV=n;}
  233.   }
  234.   LossP=GenerateP-LoadP;
  235.   cout<<"发电有功:"<<GenerateP<<" 负荷有功:"<<LoadP<<" 有功损耗:"<<LossP<<" 最高电压:"<<MaxV<<" 最高电压节点号:"<<NumbermaxV<<" 最低电压:"<<MinV<<" 最低电压节点号:"<<NumberminV<<endl;
  236. }