⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 floor.c

📁 学校上机编写的PQ分解法潮流计算 满足精度就自动停止 计算的输入输出为txt文件 有参考
💻 C
📖 第 1 页 / 共 2 页
字号:
    fprintf(fp2,"\n%8.5f\n",max2);
    }
  void hua()
  {
	  int c,d;
	  for(c=1;c<=pq+pv;c++)
		  yue[c][pq+pv+1]=D1[c];
            for(c=1;c<=pq+pv;c++)
		     {fprintf(fp2,"\n     ");
	        for(d=1;d<=pq+pv+1;d++)
		   fprintf(fp2,"%8.5f",yue[c][d]);}
        
  }
    void hua1()
  {
	  int c,d;
	        for(d=1;d<=pq;d++)
			xing[d][pq+1]=D2[d];
             for(c=1;c<=pq;c++)
		{   fprintf(fp2,"\n     ");
		    for(d=1;d<=pq+1;d++)
			fprintf(fp2,"%8.5f",xing[c][d]);}
 
  }
 void solve1()                                        /* 求解修正方程组 (用列主元消取法)*/
 { float d,t;
   k=1;
   do
    {
     d=yue[k][k];
     l=k;
     i=k+1;
     do
      {
       if(fabs(yue[i][k])>fabs(d))                  /*列选主元*/
	{ d=yue[i][k];
	  l=i;
	 }
       i++;
       } while(i<=pq+pv);
     if(l!=k)
       {  for(j=k;j<=pq+pv+1;j++)
	     { t=yue[l][j];
	       yue[l][j]=yue[k][j];
	       yue[k][j]=t;
	      }
	 }
    for(j=k+1;j<=pq+pv+1;j++)                    /*正消*/
       yue[k][j]/=yue[k][k];
    for(i=k+1;i<=pq+pv;i++)
       for(j=k+1;j<=pq+pv+1;j++)
	  yue[i][j]-=yue[i][k]*yue[k][j];
    k++;
    }  while(k<=pq+pv);
    if(k!=1)
    {
     for(i=pq+pv;i>=1;i--)                   /*回代*/
     { t=0;
       for(j=i+1;j<=pq+pv;j++)
	  t+=yue[i][j]*D1[j];
       D1[i]=(yue[i][pq+pv+1]-t);
        }
	 for(i=pq+pv;i>=1;i--) 
		D1[i]=0-D1[i]; 
   	}
     
     fprintf(fp2,"\n=====================================================================\n");
     fprintf(fp2,"\n--------------------------输出变化角度--------------------------------\n");
     for(i=1;i<=(pq+pv+1);i++)
     {fprintf(fp2,"\n");
       fprintf(fp2,"节点为 %2d   变化的角度为= %8.6f\n",i,D1[i]/(jiedian[i].e));}
	 fprintf(fp2,"\n---------------------------------------------------------------------\n");
   
  for(i=1;i<=(pq+pv);i++)
     jiedian[i].f+=D1[i]/(jiedian[i].e);
    fprintf(fp2,"\n=====================================================================\n");
     fprintf(fp2,"\n--------------------------输出变化后的角度--------------------------------\n");
     for(i=1;i<=pq+pv+1;i++)
     {fprintf(fp2,"\n");
     fprintf(fp2,"节点为  %2d   变化后的角度为=%8.6f ",i,jiedian[i].f);}
     fprintf(fp2,"\n---------------------------------------------------------------------\n");
        
  }
 
 
  void solve2()                                        /* 求解修正方程组 (用列主元消取法)*/
 { float d,t;
   k=1;
   do
    {
     d=yue[k][k];
     l=k;
     i=k+1;
     do
      {
       if(fabs(xing[i][k])>fabs(d))                  /*列选主元*/
	{ d=xing[i][k];
	  l=i;
	 }
       i++;
       } while(i<=pq);
     if(l!=k)
       {  for(j=k;j<=pq+1;j++)
	     { t=xing[l][j];
	       xing[l][j]=xing[k][j];
	       xing[k][j]=t;
	      }
	 }
    for(j=k+1;j<=pq+1;j++)                    /*正消*/
       xing[k][j]/=xing[k][k];
    for(i=k+1;i<=pq;i++)
       for(j=k+1;j<=pq+1;j++)
	 xing[i][j]-=xing[i][k]*xing[k][j];
    k++;
    }  while(k<=pq);
    if(k!=1)
    {
     for(i=pq;i>=1;i--)                   /*回代*/
     { t=0;
       for(j=i+1;j<=pq;j++)
	  t+=xing[i][j]*D2[j];
       D2[i]=(xing[i][pq+1]-t);
       }
    for(i=pq;i>=1;i--) 
       D2[i]=0-D2[i];
	}

      fprintf(fp2,"\n=====================================================================\n");
     fprintf(fp2,"\n--------------------------输出变化电压--------------------------------\n");
     for(i=1;i<=pq+pv+1;i++)
     {fprintf(fp2,"\n");
     fprintf(fp2,"节点为 %2d   变化的电压为=%8.6f ",i,D2[i]);}
     fprintf(fp2,"\n---------------------------------------------------------------------\n");
   
  for(i=1;i<=(pq+pv);i++)
     jiedian[i].e+=D2[i];
    fprintf(fp2,"\n=====================================================================\n");
     fprintf(fp2,"\n--------------------------输出变化后的电压--------------------------------\n");
     for(i=1;i<=pq+pv+1;i++)
     {fprintf(fp2,"\n");
     fprintf(fp2,"节点为  %2d   变化后的电压为=%8.6f ",i,jiedian[i].e);}
     fprintf(fp2,"\n---------------------------------------------------------------------\n");
        
  }
 
 float mul_Re(x1,y1,x2,y2)
 float x1,x2,y1,y2;
 { float x;
   x=x1*x2-y1*y2;
   return(x);
  }
 float mul_Im(x1,y1,x2,y2)
 float x1,x2,y1,y2;
 { float y;
   y=x1*y2+x2*y1;
   return(y);
  }
  void data2()                /* 潮流计算结果 */
  {  float sp=0,sq=0,mo1,mo2,mo3,mo4,mo5,mo6,ff,S,gg=0,bb=0;
     int i1,j1,i11=0,j11=0;
    static float P[M][M],Q[M][M];
     fprintf(fp2,"\n\n  各节点电压为:");
    for(i=1;i<=n;i++)
	{  
		fprintf(fp2,"\n  U[%d]=%8.6f∠%8.6f°",
		   jiedian[i].num,jiedian[i].e,jiedian[i].f*180/3.1415926);}
		jiedian[i].e=jiedian[i].e*cos(jiedian[i].f);
		jiedian[i].f=jiedian[i].e*sin(jiedian[i].f);
         fprintf(fp2,"\n ===================================================================\n");
    fprintf(fp2,"\n\n  平衡节点功率为:");
    for(i=1;i<=n;i++)
      { i1=jiedian[n].num;
	j1=jiedian[i].num;
	sp+=mul_Re(G[i1][j1],-B[i1][j1],jiedian[i].e,-jiedian[i].f);
	sq+=mul_Im(G[i1][j1],-B[i1][j1],jiedian[i].e,-jiedian[i].f);
       }
    jiedian[n].p=mul_Re(jiedian[n].e,jiedian[n].f,sp,sq);
    jiedian[n].q=mul_Im(jiedian[n].e,jiedian[n].f,sp,sq);
    fprintf(fp2,"\n  S[%d]=%8.6f+j %8.6f",jiedian[n].num,jiedian[n].p,jiedian[n].q);
  fprintf(fp2," \n ===================================================================\n");
    fprintf(fp2,"\n\n  线路功率如下:\n");
    for(k=1;k<=m;k++)
       { i1=zhilu[k].p1;
	 j1=zhilu[k].p2;
	for(l=1;l<=n;l++)
	   { if(jiedian[l].num==i1)
		i=l;
	     if(jiedian[l].num==j1)
		j=l;
	     }
		   sp=mul_Re(jiedian[i].e-jiedian[j].e,-jiedian[i].f+jiedian[j].f,
			-G[i1][j1],B[i1][j1]);
	 sq=mul_Im(jiedian[i].e-jiedian[j].e,-jiedian[i].f+jiedian[j].f,
			-G[i1][j1],B[i1][j1]);
         mo1=jiedian[i1].e*jiedian[i1].e+jiedian[i1].f*jiedian[i1].f;
	 P[i1][j1]=mul_Re(jiedian[i].e,jiedian[i].f,sp,sq)+mo1*G[i1][0];
	 Q[i1][j1]=mul_Im(jiedian[i].e,jiedian[i].f,sp,sq)-mo1*B[j1][0];
	 sp=mul_Re(jiedian[j].e-jiedian[i].e,-jiedian[j].f+jiedian[i].f,
			-G[j1][i1],B[j1][i1]);
	 sq=mul_Im(jiedian[j].e-jiedian[i].e,-jiedian[j].f+jiedian[i].f,
			-G[j1][i1],B[j1][i1]);
	 mo2=jiedian[j1].e*jiedian[j1].e+jiedian[j1].f*jiedian[j1].f;
         P[j1][i1]=mul_Re(jiedian[j].e,jiedian[j].f,sp,sq)+mo2*G[j1][0];
	 Q[j1][i1]=mul_Im(jiedian[j].e,jiedian[j].f,sp,sq)-mo2*B[j1][0];
	 
	 if((i1!=i11)&&(j1!=j11)) 
         {fprintf(fp2,"\n  线路%d-%d的功率:",i1,j1);
	 fprintf(fp2," %8.6f + j %8.6f",P[i1][j1],Q[i1][j1]);
	 fprintf(fp2,"\n  线路%d-%d的功率:",j1,i1);
	 fprintf(fp2," %8.6f + j %8.6f",P[j1][i1],Q[j1][i1]);}
       
       }

  for(i=1;i<=m;i++)                    /*求平行支路的功率分布(功率按导纳分布)*/
     {z=1;
     mo3=zhilu[i].r*zhilu[i].r+zhilu[i].x*zhilu[i].x;
       mo3=1/sqrt(mo3);
       for(j=i+1;j<=m;j++)
         {if((zhilu[i].p1==zhilu[j].p1)&&(zhilu[i].p2==zhilu[j].p2)&&zhilu[i].p1!=0&&zhilu[i].p2!=0)
              {i1=zhilu[i].p1;
	          j1=zhilu[i].p2;
	          mo4=zhilu[j].r*zhilu[j].r+zhilu[j].x*zhilu[j].x;
              mo4=1/sqrt(mo4);
              mo3=mo3+mo4; 
                 z++;}}
       if(z>1)
         { fprintf(fp2,"\n====================================================================\n");
            fprintf(fp2,"节点%d-%d之间有%d条平行支路\n",zhilu[i].p1,zhilu[i].p2,z);
            fprintf(fp2,"功率分布为:\n");

            for(k=i;k<z+i;k++)
              { mo5=zhilu[k].r*zhilu[k].r+zhilu[k].x*zhilu[k].x;
               mo6=1/sqrt(mo5);
               ff=mo6/mo3;
               fprintf(fp2,"\n     导纳Y=%8.6f的支路",mo6); 
               fprintf(fp2,"\n  支路%d-%d的功率:",zhilu[i].p1,zhilu[i].p2);
               fprintf(fp2," %8.6f + j %8.6f",ff*P[i1][j1],ff*Q[i1][j1]);
               fprintf(fp2,"\n  支路%d-%d的功率:",zhilu[i].p2,zhilu[i].p1);
               fprintf(fp2," %8.6f + j %8.6f\n",ff*P[j1][i1],ff*Q[j1][i1]);
             }
                                
                i=i+z-1;           }
     
	   for(i=1;i<=m;i++)                          /*求对地支路的功率分布*/
     {j=zhilu[i].p1;
      k=zhilu[i].p2;
	    if((j==0)||(k==0))
		 { if(j==0)
		  {mo1=jiedian[k].e*jiedian[k].e+jiedian[k].f*jiedian[k].f;
        S=zhilu[i].r*zhilu[i].r+zhilu[i].x*zhilu[i].x;
		gg=zhilu[i].r/S;
        bb=-zhilu[i].x/S;
        
	                        
		   P[k][0]=mo1*gg;
		   Q[k][0]=-mo1*bb;
          fprintf(fp2,"\n  线路%d-%d的功率:",k,0);
	      fprintf(fp2," %8.6f + j %8.6f",P[k][0],Q[k][0]);
          
		  }
   
    
           if(k==0)
		   {mo1=jiedian[j].e*jiedian[j].e+jiedian[j].f*jiedian[j].f;
         S=zhilu[i].r*zhilu[i].r+zhilu[i].x*zhilu[i].x;
        gg=zhilu[i].r/S;
        bb=-zhilu[i].x/S;
		   P[j][0]=mo1*gg;
		   Q[j][0]=-mo1*bb;
          fprintf(fp2,"\n  线路%d-%d的功率:",j,0);
	      fprintf(fp2," %8.6f + j %8.6f",P[j][0],Q[j][0]);
            
	       }   
		 }
	   }
  }               


fprintf(fp2,"\n  ==================================================================\n");
    fprintf(fp2,"\n\n  线路上损耗的功率为:");
      i11=0,j11=0;
        for(k=1;k<=(m-dd);k++)
       { i=zhilu[k].p1;
         j=zhilu[k].p2;
	if(i!=i11||j!=j11)
         {fprintf(fp2,"\n  线路%d-%d上的功率损耗:",i,j);
	 fprintf(fp2,"  %8.6f + j %8.6f",fabs(P[i][j]+P[j][i]),
					 fabs(Q[i][j]+Q[j][i]));}
          j11=j,i11=i;
	}
	for(l=k;l<=m;l++)                                /*求对地支路的功率损耗*/
		{i=zhilu[l].p1;
         j=zhilu[l].p2;
         fprintf(fp2,"\n  线路%d-%d上的功率损耗:",i,j);
	 fprintf(fp2,"  %8.6f + j %8.6f",fabs(P[i][j]),
					 fabs(Q[i][j]));
		}    
 fprintf(fp2," \n ====================================================================\n");
    fprintf(fp2,"\n\n  网络总损耗:");
    sp=0;sq=0;
    for(i=0;i<=n;i++)
       for(j=0;j<=n;j++)
          { sp+=P[i][j];
            sq+=Q[i][j];
           }
    fprintf(fp2,"  %8.6f + j %8.6f\n",sp,sq);
    fprintf(fp2,"\n  ************************结束************************\n");
    fclose(fp2);

  }

 void main()                 /* 主函数 */
{
	   data1();
	  form_y();
	 z=1;
	 	do  
	 {  
	       yueyue();	fprintf(fp2,"\n***********第%d遍************\n",z);
		 xingxing();
		   	 hua();
		 solve1();
		 xingxing1();
		  hua1();
		  solve2();
		z++;
		 }	while(((max1>=eps)||(max2>=eps))&&(z<=1000));
     data2();
	 printf(" !! 结果存放于D:\out.txt文件中!!\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -