《C语言编写短路电流计算的程序讲课讲稿.doc》由会员分享,可在线阅读,更多相关《C语言编写短路电流计算的程序讲课讲稿.doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。C语言编写短路电流计算的程序-初始条件:如图所示电力系统,最大运行方式时,两个电源同时送电,变压器并联运行,忽略线路电阻,线路电抗0.4/km。计算k1和k2点在最大运行方式时的三相短路电流。要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.写出三相短路电流的计算方法;2.用C或FORTRAN语言实现三相短路电流的计算程序;3.调试程序并求出计算结果;4.撰写计算方法原理、计算流程文档及设计说明书;5.提供计算程序代码。代码使用C+编写的,共有三个文件,请建立工程,一起
2、编译。这是Plural.hpp#ifndefPLURAL_HPP#definePLURAL_HPP/类名称:Plural/方法:GetR,GetI,SetRI,SetR,SetI/数据:m_pluralR,m_pluralIclassPluralpublic:Plural();Plural(floatpR,floatpI);Plural();floatGetR()const;floatGetI()const;voidSetRI(floatpR,floatpI);voidSetR(floatpR);voidSetI(floatpI);private:floatm_pluralR;floatm_p
3、luralI;/名称:复数乘法,PluralMul(Pluralplural1,Pluralplural2)/参数:复数plural1plural2/返回值:复数PluralPluralMul(Pluralplural1,Pluralplural2);/函数名:复数除法,运算浮点数除以复数/参数:num,分子,是一个浮点数。den,分母,是一个复数/返回值:结果的复数PluralPluralDiv(floatnum,Pluralden);/函数名:复数求倒数/参数:den,分母,是一个复数/返回值:此复数的倒数PluralPluralDiv(Pluralplu);/参数:mat为待变换的复数矩
4、阵的数组名,n为阶数/返回值:无/说明:变换后的结果依旧保存在mat中voidMatrixInv(Plural*mat,intn);#endif#includeplural.hpp#include#include#include/类名称:Plural/方法:GetR,GetI,SetRI,SetR,SetI/数据:m_pluralR,m_pluralIPlural:Plural()m_pluralR=0;m_pluralI=0;Plural:Plural(floatpR,floatpI)m_pluralR=pR;m_pluralI=pI;Plural:Plural()floatPlural:G
5、etR()constreturnm_pluralR;floatPlural:GetI()constreturnm_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(Pluralplural
6、1,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(
7、)*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);r
8、eturnresult;/说明:以下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
9、,v;doubled,p;for(i=0;in*n;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;jd)d=p;isk=i;jsk=j;if(d+1.0=1.0)free(is);free(js);returnNULL;if(isk!=k)for(j=0;j=n-1;j+)u=k*n+j;v=isk*n+j;p=Ainvu;Ainvu=Ainvv;Ainvv=p;if(jsk!=k)fo
10、r(i=0;i=n-1;i+)u=i*n+k;v=i*n+jsk;p=Ainvu;Ainvu=Ainvv;Ainvv=p;l=k*n+k;Ainvl=1.0/Ainvl;for(j=0;j=n-1;j+)if(j!=k)u=k*n+j;Ainvu=Ainvu*Ainvl;for(i=0;i=n-1;i+)if(i!=k)for(j=0;j=n-1;j+)if(j!=k)u=i*n+j;Ainvu=Ainvu-Ainvi*n+k*Ainvk*n+j;for(i=0;i=0;k-)if(jsk!=k)for(j=0;j=n-1;j+)u=k*n+j;v=jsk*n+j;p=Ainvu;Ainvu=
11、Ainvv;Ainvv=p;if(isk!=k)for(i=0;i=n-1;i+)u=i*n+k;v=i*n+isk;p=Ainvu;Ainvu=Ainvv;Ainvv=p;free(is);free(js);returnAinv;/参数:a为原矩阵,b为逆矩阵,c为结果。其他在此都为nvoidmulAB(double*a,double*b,double*c,intam,intan,intbm,intbn)inti,j,l,u;if(an!=bm)printf(不能完成原矩阵和其逆矩阵矩阵相乘n);return;for(i=0;iam;i+)for(j=0;jbn;j+)u=i*bn+j;cu
12、=0.0;for(l=0;lan;l+)cu=cu+ai*an+l*bl*bn+j;return;/复数矩阵求逆。参数:mat为待求矩阵,n为阶数voidMatrixInv(Plural*mat,intn)inti,j;doublepluralRnn,pluralInn;double*a=NULL,*b=NULL,*c=NULL;double*resultR=NULL,*resultI=NULL;Pluralresultnn;for(i=0;in;i+)for(j=0;jn;j+)pluralRij=mati*n+j.GetR();pluralIij=mati*n+j.GetI();print
13、f(原始矩阵为:n);for(i=0;in;i+)for(j=0;jn;j+)printf(%10.4f+j%0.4ft,(*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求逆之后虚部是:
14、n);if(n%2=0)for(i=0;in;i+)for(j=0;jn;j+)printf(%10.4f+j%0.4ft,resultR=NULL?0:resultRi*n+j,resultI=NULL?0:resultIi*n+j);printf(n);elsefor(i=0;in;i+)for(j=0;jn;j+)printf(%10.4f+j%0.4ft,resultR=NULL?0:resultRi*n+j,resultI=NULL?0:-1.0*resultIi*n+j);printf(n);/测试所求实部逆矩阵/mulAB(*pluralR,a,c,n,n,n,n);/print
15、f(nn求逆后原实部和现在的实部乘积是n);/for(i=0;in;i+)/for(j=0;jn;j+)/printf(%10.4ft,ci*n+j);/printf(n);/测试用所求逆矩阵/mulAB(*pluralI,b,c,n,n,n,n);/printf(nn求逆之后原虚部和现在的虚部乘积是:n);/for(i=0;in;i+)/for(j=0;jn;j+)/printf(%10.4ft,-1.0*ci*n+j);/printf(n);/for(i=0;in;i+)for(j=0;jn;j+)mati*n+j.SetRI(resultR=NULL?0:resultRi*n+j,res
16、ultI=NULL?0:resultIi*n+j);free(a);free(b);free(c);#include#includeplural.hpp/#includeinput.hppusingnamespacestd;voidNodInit()floatg1S,g1X,g2S,g2X,l1L,l1D,l2L,l2D,t1S,t1U,t2S,t2U;coutg1S;coutg1X;coutendl*endlendl;coutg2S;coutg2X;coutendl*endlendl;coutl1L;coutl1D;coutendl*endlendl;coutl2L;coutl2D;cout
17、endl*endlendl;coutt1S;coutt1U;coutendl*endlendl;coutt2S;coutt2U;intmain()NodInit();Pluralmatrix233;matrix200.SetRI(0,1);matrix201.SetRI(0,2);matrix210.SetRI(0,1);matrix211.SetRI(0,1);matrix202.SetRI(0,2);matrix212.SetRI(0,1);matrix220.SetRI(0,3);matrix221.SetRI(0,2);matrix222.SetRI(0,1);MatrixInv(*matrix2,3);printf(n1点短路电流是n);printf(%f+j%f,PluralDiv(matrix200).GetR(),PluralDiv(matrix200).GetI();printf(n2点短路电流是n);printf(%f+j%f,PluralDiv(matrix211).GetR(),PluralDiv(matrix211).GetI();printf(n3点短路电流是n);printf(%f+j%f,PluralDiv(matrix211).GetR(),PluralDiv(matrix211).GetI();getchar();return0;-