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

📄 pq.txt

📁 电力系统分析中PQ分解法潮流计算中求因子表
💻 TXT
字号:
精华区文章阅读 
发信人: ncepuBD (跳伞塔), 信区: NumComp       
标  题: 问一个很菜的问题
发信站: BBS 水木清华站 (Wed Nov 28 16:19:51 2001)

在下用c语言编一个pq分解法的潮流计算程序,遇到一个很怪怪的问题
#include "math.h"
#include "stdio.h"
#include "stdlib.h"
main()
{
        int k,n,nb,i,j;
   double r,x,yk,Z,Gij,Bij,b_ij;
/*发电机节点*/
        struct generator
        {int i,type;
       double p,q;
       double v;
                }*pgen;
/*负荷节点*/
        struct load
                {int i,type;
                 double p,q;
                 double v;
                 }*pload;
/*PV节点*/
        struct pvnode
                {
       double v;
                 int i;
                }*ppv;
/*支路*/
        struct branch
                {
       int i,j,type;
                 double r,x,yk;
           }*pbr;
/*导纳矩阵元素*/
   struct yii
     {
      double g,b;
     }*pyii,*pyii1;  /*对角元*/
   struct yij
     {
      double g,b;
      int j;
     }*pyij,*pyij1;  /*非对角元*/
/*打开文件*/
   FILE *pf;
   if ((pf=fopen("data1.txt","r"))==NULL)
      {
       printf("cannot open this file.\n");
       exit(0);
      }
   fscanf (pf,"%d%d",&n,&nb);/*读入节点数和支路数*/
   pbr=(branch *)malloc((nb+1)*sizeof(branch)); /*给支路数组动态分配内存*/
/*读入支路数据*/
   for(k=1;k<=nb;k++)
      {
       fscanf (pf,"%d%d%lf%lf%lf",&pbr[k].i,&pbr[k].j,
                                  &pbr[k].r,&pbr[k].x,&pbr[k].yk);
 ************   printf("%d%d%lf%lf%lf   ",pbr[k].i,pbr[k].j,
                                           pbr[k].r,pbr[k].x,pbr[k].yk);
       }
      printf("zxyweu\n");
/*为导纳矩阵结构体动态分配内存*/
   pyii=(struct yii *)malloc((n+1)*sizeof(yii));
   pyii1=(struct yii *)malloc((n+1)*sizeof(yii));
   pyij=(struct yij *)malloc((nb+1)*sizeof(yij));
   pyij1=(struct yij *)malloc((nb+1)*sizeof(yij));
/*各行第一个非对角元在导纳阵非对角元中的位置顺序号*/
   int *nyseq=(int *)malloc((n+1)*sizeof(int));
/*导纳矩阵中各行非对角元的个数*/
   int *nysum=(int *)malloc((n+1)*sizeof(int));
/*给导纳阵元素赋初值*/
   for(k=1;k<=n;k++)
       {
        pyii[k].g=0.0;
        pyii[k].b=0.0;
        pyii1[k].g=0.0;
        pyii1[k].b=0.0;
        nysum[k]=0;
       }
/*形成不接地支路的导纳矩阵*/
   for(k=1;k<=nb;k++)
       {
        i=abs(pbr[k].i);
        j=abs(pbr[k].j);
        r=pbr[k].r;
        x=pbr[k].x;
        yk=pbr[k].yk;
        Z=r*r+x*x;
        Gij=r/Z;
        Bij=-x/Z;
        b_ij=-1.0/x;
        if((pbr[k].i<0)||(pbr[k].j<0))
           {
            pyij[k].g=-Gij/yk;
            pyij[k].b=-Bij/yk;
            pyij1[k].g=0.0;
            pyij1[k].b=-b_ij/yk;
           }
         else
            {
             pyij[k].g=-Gij;
             pyij[k].b=-Bij;
             pyij1[k].g=0.0;
             pyij1[k].b=-b_ij;
            }
         pyij[k].j=j;
         pyij1[k].j=j;
         if((pbr[k].i<0)||(pbr[k].j<0))
            {
             pyii[i].g=pyii[i].g+Gij/yk;
             pyii[i].b=pyii[i].b+Bij/yk;
             pyii[j].g=pyii[j].g+Gij/yk;
             pyii[j].b=pyii[j].b+Bij/yk;
             pyii1[i].b=pyii1[i].b+b_ij/yk;
             pyii1[j].b=pyii1[j].b+b_ij/yk;
            }
         else
            {
             pyii[i].g=pyii[i].g+Gij;
             pyii[i].b=pyii[i].b+Bij;
             pyii[j].g=pyii[j].g+Gij;
             pyii[j].b=pyii[j].b+Bij;
             pyii1[i].b=pyii1[i].b+b_ij;
             pyii1[j].b=pyii1[j].b+b_ij;
            }
         nysum[i]++;
      }
    nyseq[1]=1;
    for(k=1;k<=(n-1);k++)
        nyseq[k+1]=nyseq[k]+nysum[k];
/*追加接地支路*/
    for(k=1;k<=nb;k++)
       {
        i=pbr[k].i;
        j=pbr[k].j;
        yk=pbr[k].yk;
        if((i<0)||(j<0))
          {
           if(i<0)
              {
               i=abs(i);
               Gij=pyij[k].g;
               Bij=pyij[k].b;
               b_ij=pyij1[k].b;
               pyii[i].g=pyii[i].g+(1.0-1.0/yk)*Gij;
               pyii[i].b=pyii[i].b+(1.0-1.0/yk)*Bij;
               pyii1[i].b=pyii1[i].b+(1.0-1.0/yk)*b_ij;
               pyii[j].g=pyii[j].g+(1.0-yk)*Gij;
               pyii[j].b=pyii[j].b+(1.0-yk)*Bij;
               pyii1[j].b=pyii1[j].b+(1.0-yk)*b_ij;
               }
           else
              {
               j=abs(j);
               Gij=pyij[k].g;
               Bij=pyij[k].b;
               b_ij=pyij1[k].b;
               pyii[j].g=pyii[j].g+(1.0-1.0/yk)*Gij;
               pyii[j].b=pyii[j].b+(1.0-1.0/yk)*Bij;
               pyii1[j].b=pyii1[j].b+(1.0-1.0/yk)*b_ij;
               pyii[i].g=pyii[i].g+(1.0-yk)*Gij;
               pyii[i].b=pyii[i].b+(1.0-yk)*Bij;
               pyii1[i].b=pyii1[i].b+(1.0-yk)*b_ij;
               }
           }
       else
           {
            Bij=yk/2.0;
            b_ij=yk/2.0;
            pyii[i].b=pyii[i].b+Bij;
            pyii[j].b=pyii[j].b+Bij;
            pyii1[i].b=pyii1[i].b+b_ij;
            pyii1[j].b=pyii1[j].b+b_ij;
            }
       }
/*因子表生成*/
    free(pyii);
    free(pyii1);
    free(pyij);
    free(pyij1);
    free(pbr);
    free(nyseq);
    free(nysum);
    getchar();
 }
请注意长串星花所指的一句,直接运行无异样,
如果把这句输出语句注释掉,花括号内的读入语句及该循环就就不被执行,而直接结束
整个程序;
如果把该语句放到花括号外紧接该循环体,又一切正常。
?????????????
我用的环境是borland c++ 

⌨️ 快捷键说明

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