C语言编写短路电流计算的程序.docx

上传人:b****2 文档编号:2193606 上传时间:2023-05-02 格式:DOCX 页数:12 大小:17.35KB
下载 相关 举报
C语言编写短路电流计算的程序.docx_第1页
第1页 / 共12页
C语言编写短路电流计算的程序.docx_第2页
第2页 / 共12页
C语言编写短路电流计算的程序.docx_第3页
第3页 / 共12页
C语言编写短路电流计算的程序.docx_第4页
第4页 / 共12页
C语言编写短路电流计算的程序.docx_第5页
第5页 / 共12页
C语言编写短路电流计算的程序.docx_第6页
第6页 / 共12页
C语言编写短路电流计算的程序.docx_第7页
第7页 / 共12页
C语言编写短路电流计算的程序.docx_第8页
第8页 / 共12页
C语言编写短路电流计算的程序.docx_第9页
第9页 / 共12页
C语言编写短路电流计算的程序.docx_第10页
第10页 / 共12页
C语言编写短路电流计算的程序.docx_第11页
第11页 / 共12页
C语言编写短路电流计算的程序.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言编写短路电流计算的程序.docx

《C语言编写短路电流计算的程序.docx》由会员分享,可在线阅读,更多相关《C语言编写短路电流计算的程序.docx(12页珍藏版)》请在冰点文库上搜索。

C语言编写短路电流计算的程序.docx

C语言编写短路电流计算的程序

初始条件:

如图所示电力系统,最大运行方式时,两个电源同时送电,变压器并联运行,忽略线路电阻,线路电抗0.4Ω/km。

计算k1和k2点在最大运行方式时的三相短路电流。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

1.写出三相短路电流的计算方法;

2.用C或FORTRAN语言实现三相短路电流的计算程序;

3.调试程序并求出计算结果;

4.撰写计算方法原理、计算流程文档及设计说明书;

5.提供计算程序代码。

     

代码使用C++编写的,共有三个文件,请建立工程,一起编译。

这是Plural.hpp

#ifndefPLURAL_HPP

#definePLURAL_HPP

//类名称:

Plural 

//方法:

GetR,GetI,SetRI,SetR,SetI

//数据:

m_pluralR,m_pluralI 

classPlural

{

    public:

        Plural();

        Plural(floatpR,floatpI);

        ~Plural();

        floatGetR()const;

        floatGetI()const;

        voidSetRI(floatpR,floatpI);

        voidSetR(floatpR);

        voidSetI(floatpI);

    private:

          floatm_pluralR;

          floatm_pluralI;

};

//名称:

复数乘法,PluralMul(Pluralplural1,Pluralplural2)

//参数:

复数plural1plural2 

//返回值:

复数 

PluralPluralMul(Pluralplural1,Pluralplural2);

//函数名:

复数除法,运算浮点数除以复数 

//参数:

num,分子,是一个浮点数。

den,分母,是一个复数 

//返回值:

结果的复数 

PluralPluralDiv(floatnum,Pluralden);

//函数名:

复数求倒数 

//参数:

den,分母,是一个复数 

//返回值:

此复数的倒数 

PluralPluralDiv(Pluralplu);

//参数:

mat为待变换的复数矩阵的数组名,n为阶数 

//返回值:

无 

//说明:

变换后的结果依旧保存在mat中 

voidMatrixInv(Plural*mat,intn);

#endif

#include"plural.hpp"

#include

#include

#include

//类名称:

Plural 

//方法:

GetR,GetI,SetRI,SetR,SetI

//数据:

m_pluralR,m_pluralI 

Plural:

:

Plural()

{

  m_pluralR=0;

  m_pluralI=0;

}

Plural:

:

Plural(floatpR,floatpI)

{

  m_pluralR=pR;

  m_pluralI=pI;                           

}

Plural:

:

~Plural(){}

floatPlural:

:

GetR()const

{

  returnm_pluralR;

}

floatPlural:

:

GetI()const

{

  returnm_pluralI;

}

voidPlural:

:

SetRI(floatpR,floatpI)

{

    m_pluralR=pR;

    m_pluralI=pI;

}

voidPlural:

:

SetR(floatpR)

{

    m_pluralR=pR;

}

voidPlural:

:

SetI(floatpI)

{

    m_pluralI=pI;

}

//  名称:

复数乘法,PluralMul(Pluralplural1,Pluralplural2)

//  参数:

复数plural1plural2 

//  返回值:

复数 

PluralPluralMul(Pluralplural1,Pluralplural2)

{

    Pluralresult;

    result.SetRI(plural1.GetR()*plural2.GetR()-plural1.GetI()*plural2.GetI(),plural1.GetR()*plural2.GetI()+plural1.GetI()*plural2.GetR());

    returnresult;

}

//函数名:

复数除法,运算浮点数除以复数 

//参数:

num,分子,是一个浮点数。

den,分母,是一个复数 

//返回值:

结果的复数 

PluralPluralDiv(floatnum,Pluralden)

{

    Pluralresult;

    floatk;

    k=den.GetR()*den.GetR()+den.GetI()*den.GetI();

    result.SetR(num*den.GetR()/k);

    result.SetI(-1.0*num*den.GetI()/k);

    returnresult; 

}

//函数名:

复数求倒数 

//参数:

den,分母,是一个复数 

//返回值:

此复数的倒数 

PluralPluralDiv(Pluralplu)

{

    Pluralresult;

    floatk;

    k=plu.GetR()*plu.GetR()+plu.GetI()*plu.GetI();

    result.SetR(plu.GetR()/k);

    result.SetI(-1.0*plu.GetI()/k);

    returnresult; 

}

//说明:

以下3个函数组合用来求复数矩阵的逆。

 

double*inv(double*A,double*Ainv,intn);

voidmulAB(double*A,double*B,double*C,intam,intan,intbm,intbn);

//参数:

mat为待变换的复数矩阵的数组名,n为阶数 

//返回值:

无 

//说明:

变换后的结果依旧保存在mat中 

voidMatrixInv(Plural*mat,intn);

//矩阵求逆。

A为原矩阵,Ainv为求逆之后矩阵,n为阶数 

double*inv(double*A,double*Ainv,intn)

  int*is,*js,i,j,k,l,u,v;

  doubled,p;

  

  for(i=0;i

  *(Ainv+i)=*(A+i);

  

  is=(int*)malloc(n*sizeof(int));

  js=(int*)malloc(n*sizeof(int));

  

  for(k=0;k<=n-1;k++)

  { 

  d=0.0;

  for(i=k;i<=n-1;i++)

  for(j=k;j<=n-1;j++)

  { 

      l=i*n+j; 

      p=fabs(Ainv[l]);

      if(p>d) 

      { 

        d=p; 

        is[k]=i; 

        js[k]=j;

      }

  }

   

  if(d+1.0==1.0)

  { 

      free(is); 

      free(js); 

      returnNULL;

  }

   

  if(is[k]!

=k)

    for(j=0;j<=n-1;j++)

    { 

        u=k*n+j; 

        v=is[k]*n+j;

        p=Ainv[u]; 

        Ainv[u]=Ainv[v]; 

        Ainv[v]=p;

    }

   

  if(js[k]!

=k)

    for(i=0;i<=n-1;i++)

    { 

        u=i*n+k; 

        v=i*n+js[k];

        p=Ainv[u]; 

        Ainv[u]=Ainv[v]; 

        Ainv[v]=p;

    }

   

  l=k*n+k;

   

  Ainv[l]=1.0/Ainv[l];

   

  for(j=0;j<=n-1;j++)

      if(j!

=k)

      { 

        u=k*n+j; 

        Ainv[u]=Ainv[u]*Ainv[l];

      }

   

  for(i=0;i<=n-1;i++)

      if(i!

=k)

        for(j=0;j<=n-1;j++)

        if(j!

=k)

        { 

          u=i*n+j;

          Ainv[u]=Ainv[u]-Ainv[i*n+k]*Ainv[k*n+j];

        }

   

  for(i=0;i<=n-1;i++)

  if(i!

=k)

  { 

      u=i*n+k; 

      Ainv[u]=-Ainv[u]*Ainv[l];}

  }

   

  for(k=n-1;k>=0;k--)

  { 

      if(js[k]!

=k)

      for(j=0;j<=n-1;j++)

      { 

        u=k*n+j; 

        v=js[k]*n+j;

        p=Ainv[u]; 

        Ainv[u]=Ainv[v]; 

        Ainv[v]=p;

      }

   

  if(is[k]!

=k)

  for(i=0;i<=n-1;i++)

  { 

      u=i*n+k; 

      v=i*n+is[k];

      p=Ainv[u]; 

      Ainv[u]=Ainv[v]; 

      Ainv[v]=p;

  }

  }

  

  free(is); 

  free(js);

  

  returnAinv;

}

//参数:

a为原矩阵,b为逆矩阵,c为结果。

其他在此都为n 

voidmulAB(double*a,double*b,double*c,intam,intan,intbm,intbn)

  inti,j,l,u;

  if(an!

=bm) 

  {

    printf("不能完成原矩阵和其逆矩阵矩阵相乘\n");

    return;

  } 

  

  for(i=0;i

  for(j=0;j

  { 

    u=i*bn+j;

    c[u]=0.0;

    for(l=0;l

    c[u]=c[u]+a[i*an+l]*b[l*bn+j];

  }

  return;

}

//复数矩阵求逆。

参数:

mat为待求矩阵,n为阶数 

voidMatrixInv(Plural*mat,intn) 

  inti,j;

  doublepluralR[n][n],pluralI[n][n];

  double*a=NULL,*b=NULL,*c=NULL;

  double*resultR=NULL,*resultI=NULL;

  Pluralresult[n][n];

   

  for(i=0;i

  {

      for(j=0;j

      {

        pluralR[i][j]=mat[i*n+j].GetR();

        pluralI[i][j]=mat[i*n+j].GetI();

      }

  }

   

  printf("原始矩阵为:

\n");

  for(i=0;i

  {

    for(j=0;j

        printf("%10.4f+j%0.4f\t",(*pluralR)[i*n+j],(*pluralI)[i*n+j]);

        printf("\n");

  }  

    

  a=(double*)malloc(n*n*sizeof(double));

  b=(double*)malloc(n*n*sizeof(double));

  c=(double*)malloc(n*n*sizeof(double));

   

  resultR=inv(*pluralR,a,n);

  resultI=inv(*pluralI,b,n);

   

  if(resultI!

=NULL)

  {

      printf("\n求逆之后虚部是:

\n");

      if(n%2==0)

      {

        for(i=0;i

        {  

          for(j=0;j

              printf("%10.4f+j%0.4f\t",resultR==NULL?

0:

resultR[i*n+j],resultI==NULL?

0:

resultI[i*n+j]);

          printf("\n");

        }

      }

      else

      {

        for(i=0;i

        {  

          for(j=0;j

              printf("%10.4f+j%0.4f\t",resultR==NULL?

0:

resultR[i*n+j],resultI==NULL?

0:

-1.0*resultI[i*n+j]);

          printf("\n");

        }

      }

      

//    测试所求实部逆矩阵 

//    mulAB(*pluralR,a,c,n,n,n,n);

//    printf("\n\n求逆后原实部和现在的实部乘积是\n");

//    for(i=0;i

//    {  

//        for(j=0;j

//          printf("%10.4f\t",c[i*n+j]);

//        printf("\n");

//    } 

//    测试用所求逆矩阵 

//    mulAB(*pluralI,b,c,n,n,n,n);

//    printf("\n\n求逆之后原虚部和现在的虚部乘积是:

\n");

//    for(i=0;i

//    {  

//        for(j=0;j

//          printf("%10.4f\t",-1.0*c[i*n+j]);

//        printf("\n");

//    }  

  }

   

  for(i=0;i

  {

      for(j=0;j

      mat[i*n+j].SetRI(resultR==NULL?

0:

resultR[i*n+j],resultI==NULL?

0:

resultI[i*n+j]);

  }  

   

  free(a);

  free(b);

  free(c);  

}

#include

#include"plural.hpp"

//#include"input.hpp"

usingnamespacestd;

voidNodInit()

{

    floatg1S,g1X,g2S,g2X,l1L,l1D,l2L,l2D,t1S,t1U,t2S,t2U;

    cout<<"请输入发电机G1的容量S(无穷大请输入0):

";

    cin>>g1S;

    cout<<"请输入发电机G1的电抗Xd(没有请输入0):

";

    cin>>g1X;

    

    cout<

    

    cout<<"请输入发电机G2的容量S(无穷大请输入0):

";

    cin>>g2S;

    cout<<"请输入发电机G2的电抗Xd(没有请输入0):

";

    cin>>g2X;

    

    cout<

    

    cout<<"请输入线路1的长度L(KM):

";

    cin>>l1L;

    cout<<"请输入线路1每千米电抗值:

";

    cin>>l1D;    

    cout<

    

    cout<<"请输入线路2的长度L(KM):

";

    cin>>l2L;

    cout<<"请输入线路2每千米电抗值:

";

    cin>>l2D;  

    

    cout<

    

    cout<<"请输入变压器T1的容量S(MVA):

";

    cin>>t1S;

    cout<<"请输入变压器T1的Uk%:

";

    cin>>t1U;

    

    cout<

    

    cout<<"请输入变压器T2的容量S(MVA):

";

    cin>>t2S;

    cout<<"请输入变压器T2的Uk%:

";

    cin>>t2U;           

}

intmain()

{

  NodInit();

  Pluralmatrix2[3][3];

  matrix2[0][0].SetRI(0,1);matrix2[0][1].SetRI(0,2);matrix2[1][0].SetRI(0,1);matrix2[1][1].SetRI(0,1);

  matrix2[0][2].SetRI(0,2);matrix2[1][2].SetRI(0,1);matrix2[2][0].SetRI(0,3);matrix2[2][1].SetRI(0,2);matrix2[2][2].SetRI(0,1);

  MatrixInv(*matrix2,3);

   

  printf("\n1点短路电流是\n");    

  printf("%f+j%f",PluralDiv(matrix2[0][0]).GetR(),PluralDiv(matrix2[0][0]).GetI());

  printf("\n2点短路电流是\n");    

  printf("%f+j%f",PluralDiv(matrix2[1][1]).GetR(),PluralDiv(matrix2[1][1]).Ge

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2