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

📄 powernode.txt

📁 牛顿-拉夫逊法潮流计算 基本步骤:   (1)形成节点导纳矩阵   (2)将各节点电压设初值U
💻 TXT
字号:
#include<stdio.h>

struct powernode

{

float pi;

float qi;

int i;

float vi;

};

struct powernode wg[20];

struct powernode wl[20];

struct linedata

{

int i;

int j;

float r;

float x;

float y;          /*包括变压器变比*/

float k;          /*只用作标析变压器,变压器变比仍在y中*/

};

struct linedata zl[20];

struct linedata t3;     /*临时数组*/

static double y[][3];     /*在matrixform中应用*/

 int t=0;

   int t2,ti,tj;           /*临时记数单元*/

   float temp;

   float  tx,tr,YK;           /*中间工作单元(在matrixform中应用)*/

   double GIJ,BIJ;         /*中间工作单元(在matrixform中应用)*/

   int N;                  /*总节点数*/

   int zls;

   int Q,V,PVS,PVD;

   int GS;

   int LS;

   float vo;

   float Eps;

   static double GII[]={0},BII[]={0},YDS[]={0},YDZ[]={0},B[]={0};/*添加数组*/ 

   /*因子表形成时定义的数据*/

 struct pvdata

   {

    float vis;

    int i;

   };

static struct pvdata pv[]={0};

 datain()

  {

   clrscr();

   printf("program runningn" );

   printf("n");

   printf("please input the aggregate to the system note");/*总节点数*/

   scanf("%d",&N);

   printf("n");

   printf(" PQ note IN ALL?");/*总节点数*/

   scanf("%d",&Q);

   PVS=(N-Q)-1;

   printf("n");

   printf("them input the aggregate to the system power line");

   scanf("%d",&zls);/*输电线路数和变压器的总数*/

   printf("n");

   printf("electromotor node in all :?");/*发电机节点总数*/

   scanf("%d",&GS);

   printf("n");

   printf("load node in all : ?");/*负荷节点总数*/

   scanf("%d",&LS);

   printf("n");

   printf("average electric voltage");/*平均电压*/

   scanf("%f",vo);

   printf("n");

   printf("n");

   printf("please input the date messagen");

   printf("follow the format like it: i,j,r,x,y,kn");

   do{

   t++;

   scanf("%d,%d,%f,%f,%f",&zl[t].i,&zl[t].j,&zl[t].r,&zl[t].x,&zl[t].y,&zl[t].k);

   printf("processing....n");

   if(zl[t].i>zl[t].j)

     {

     temp=zl[t].i;

     zl[t].i=zl[t].j;

     zl[t].j=temp;

/*     if(zl[t].k!=1)         */ /*要考虑归算问题不????*/

     }

   printf("data you input is:n " );

   printf("%d,%d,%f,%f,%f",zl[t].i,zl[t].j,zl[t].r,zl[t].x,zl[t].y,zl[t].k);

      }while(zl[t].i!=0&&zl[t].j==0);

   for(t2=t;t>0;t--)                   /*冒泡法排序*/

     {

      for(;t2>0;t2--)

       {

       if(zl[t2].i<zl[t2-1].i)

                    {

t3.i=zl[t2].i;t3.j=zl[t2].j;t3.r=zl[t2].r;t3.x=zl[t2].x;t3.y=zl[t2].y;t3.k=zl[t2].k;

zl[t2].i=zl[t2-1].i;zl[t2].j=zl[t2-1].j;zl[t2].r=zl[t2-1].r;zl[t2].x=zl[t2-1].x;zl[t2].y=zl[t2-1].y;zl[t2].k=zl[t2-1].k;

zl[t2-1].i=t3.i;zl[t2-1].j=t3.j;zl[t2-1].r=t3.r;zl[t2-1].x=t3.x;zl[t2-1].y=t3.y;zl[t2-1].k=t3.k;

                     }

        else if(zl[t2].i==zl[t2-1].i)

           {if(zl[t2].j<zl[t2-1].j)

            {

t3.i=zl[t2].i;t3.j=zl[t2].j;t3.r=zl[t2].r;t3.x=zl[t2].x;t3.y=zl[t2].y;t3.k=zl[t2].k;

zl[t2].i=zl[t2-1].i;zl[t2].j=zl[t2-1].j;zl[t2].r=zl[t2-1].r;zl[t2].x=zl[t2-1].x;zl[t2].y=zl[t2-1].y;zl[t2].k=zl[t2-1].k;

zl[t2-1].i=t3.i;zl[t2-1].j=t3.j;zl[t2-1].r=t3.r;zl[t2-1].x=t3.x;zl[t2-1].y=t3.y;zl[t2-1].k=t3.k;

            }

           }

       }

     }

  printf("n");

  t=0;

  printf("please input wg~!n");

  do

     {

      scanf("%f,%f,%d,%f",&wg[t].pi,&wg[t].qi,&wg[t].i,&wg[t].vi);

      t++;

      }while(t!=GS);ti=0;

  for(t=0;t<GS;t++){if(wg[t].vi<o){pv[ti].vis=labs(wg[t].vi);pv[ti].i=wg[t].i;ti++;}}

  t2=0;

  printf("please input WL~!n");

  do

     {

      scanf("%f,%f,%d,%f",&wl[t2].pi,&wl[t2].qi,&wl[t2].i,&wl[t2].vi);

      t2++;

      }while(t2!=LS);      

  for(t=0;t<LS;t++){if(wl[t].vi<o){pv[ti].vis=labs(wl[t].vi);pv[ti].i=wl[t].i;ti++;}}      

  }

 matrixform()

  {

  for(t=1;t<N;t++)

      {

       GII[t]=0;

       BII[t]=0;

       YDS[t]=0;     

       }

   for(t2=1;t<zls;t2++)

      {

       ti=labs(zl[t2].i);

       tj=labs(zl[t2].j);

       tr=zl[t2].r;

       tx=zl[t2].x;

       temp=ldexp(tr,1)+ldexp(tx,1);     

       GIJ=tr/temp; BIJ=tx/temp;

       y[t2][1]=-GIJ;

       y[t2][2]=-BIJ;

       y[t2][3]=tj;

       GII[ti]=GII[ti]+GIJ; BII[ti]=BII[ti]+BIJ;

       GII[tj]=GII[tj]+GIJ; BII[tj]=BII[tj]+BIJ;

       YDS[ti]=YDS[ti]+1;

       }

    YDZ[1]=1;

    for(t=1;t<N-1;t++)

       {

        YDZ[t+1]=YDZ[t]+YDS[t];

        }                                 /*矩阵型成第一部完成*/

 /*矩阵型成第二部开始*/

  for(t2=1;t<zls;t2++)

    {                   /*.k只用作变压器的标析,变压器变比仍在y中*/

      ti=zl[t2].i;tj=zl[t2].j;YK=zl[t2].y;

      if(ti<0||tj<0)

       { if(ti<0)

         ti=labs(ti);

         else

         ti=labs(tj);

         GIJ=y[t2][1];BIJ=y[t2][2];

         GII[t2]=GII[t2]+(1-1/YK/YK)*GIJ;

         BII[t2]=BII[t2]+(1-1/YK/YK)*BIJ;

         y[t2][1]=GIJ/YK;

         y[t2][2]=BIJ/YK;

       }

      else

      GIJ=0;

      BIJ=YK/2;

      SY(tr);  /*这个东东要调用,实现节点累计自导纳*/

      SY(tj);  /*SY的过程是完成向一个节点累计相应自导纳的实部和虚部*/

    }

  }

int sign,ld,k2,x,im,ai;                        /*k2控制台开关,负荷静态特性开关*/

static float fd[]={0};

unsigned AF[1];

static int u[]={0};                     /*???????????怎么实现?来自那里???????*/

divisorform()

  {

   /*暂时不知道LD PVD 等的作用……待善*/

   PVD=pv[0].i;

   ld=wl[0].i;

   t=0;

   do{

      t2++;

      if(sign==1&&t2==PVD)

       {t=t+1;pvd=pv[t].i;fd[t2]=0;di[t2]=0;

        if(k2==0&&t2==ld)

           {t2=t2+1;ld=wl[t2].i;}

        }continue;  

      else

       B[t2]=BII[t2];

       if(k2==0&&sing==1&&t2==ld)

         {

         B[t2]=B[t2]+AF[1]*wl[t2].qi/wl[t2].vi/wl[t2].vi;t2=t2+1;ld=wl[t2].i;

          }

       for(temp=YDZ[t2];temp<YDZ[t2+1]-1;temp++)

          {

           tj=Y[temp][3];B[tj]=Y[temp][2];

           }

       if(sign=1) 

         {for(temp=1;temp<PVS;temp++)

          tj=pv[temp][2];

          B[tj]=0;

          }

        x=2;im=1;

        do{im++;

           if(im>t2-1)

           break;

           else

           temp=1;

           for(;temp!>fd[im];){if(u[x+1]!=1){temp=temp+1;x=x+2;}else ai=u[x]/}                           /*u[]未完成*/

           continue;

           }

      }while(t2!=N-1); 

   }

dataout()

  {

   clrscr();

   printf("note 1 voltagen");

   printf("(.639696730300784)   + j  (1.832939)  =  1.94136001255537 ∠ 70.7609880529659°n");

   printf("\n");

 }

main()

{

   datain();                               /*数据输入及处理*/

   matrixform();                           /*矩阵的形成*/

/* divisorform();       */                 /*因子表的形成*/

   matrixsolve();                          /*矩阵线形方程的求解*/

/* nodepower();         */                 /*迭代过程中节点功率的计算*/

/* iterate();           */                 /*迭代*/

   dataout();                              /*数据输出及支路功率计算*/

}

⌨️ 快捷键说明

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