武汉理工大学电力系统分析C程序-短路电流计算_第1页
武汉理工大学电力系统分析C程序-短路电流计算_第2页
武汉理工大学电力系统分析C程序-短路电流计算_第3页
武汉理工大学电力系统分析C程序-短路电流计算_第4页
武汉理工大学电力系统分析C程序-短路电流计算_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

5.C语言实现三相短路电流的计算程序

代码使用C++编写的:

#ifndefPLURAL_HPP

#definePLURAL_HPP

〃类名称:Plural

〃方法:GctR,GctI,SctRI,SctR,SctI

〃数据:m_pluralR,m_pluralI

classPlural

(

public:

Plural();

Plural(floatpR,floatpl);

~Plural();

floatGetR()const;

floatGctl()const;

voidSetRKfloatpR,floatpl);

voidSetR(floatpR);

voidSeil(floatpl);

private:

floatm_pluralR;

floatm_plurall;

};

//名称:复数乘法,PluralMul(Pluralplural1,Pluralplural2)

〃参数:复数plural1plural2

〃返回值:复数

PluralPluralMuKPluralplural1.Pluralplural2);

〃函数名:复数除法,运算浮点数除以复数

〃参数:num,分子,是一个浮点数。den,分母,是一个复数

〃返回值:结果的复数

PluralPluralDiv(floatnum,Pluralden);

〃函数名:复数求倒数

〃参数:den,分母,是一个复数

〃返回值:此复数的倒数

PluralPluralDiv(Pluralplu);

〃参数:mal为待变换的复数矩阵的数组名,n为阶数

〃返回值:无

〃说明:变换后的结果依旧保存在mal中

voidMatrixInv(Plural*mat,intn):

#endif

#inchide"plural.hpp"

#include<stdio.h>

#include<stdlib.h>

#includc<math.h>

〃类名称:Plural

〃方法:GetR,GetI,SetRI,SetR,SetI

//数据:m_pkiralR,m_pkirail

Plural::Plural()

(

m_pluralR=0;

m_plurall=0;

)

Plural::Plural(floatpR,floatpl)

(

m_pluralR=pR;

m_plurall=pl;

)

Plural::~Plural(){}

floatPlural::GetR()const

(

returnm_pluralR;

}

floatPlural::GetI()const

{

returnm_plurall;

)

voidPlural::SctRI(floatpR.floatpl)

(

m_pkiralR=pR;

m_plurall=pl;

)

voidPlural::SetR(floatpR)

(

m_pluralR=pR;

)

voidPlural::Sctl(floatpl)

{

m_pkirall=pl;

)

〃名称:复数乘法,PluralMul(Pluralplural1,Pluralpkiral2)

〃参数:复数plural1plural2

〃返回值:复数

PluralPluralMul(Pluralplural1,Pluralplura12)

(

Pluralresult;

result.SetRI(plural1.GetR()*plural2.GetR()-plural1.Getl()*plura!2.GetI(),pluralI.GetR()*plural2.Ge(I()+

plurall.GetIO*plural2.GetR());

returnresult;

)

〃函数名:复数除法,运算浮点数除以复数

〃参数:num,分子,是一个浮点数。den,分母,是一个复数

〃返回值:结果的复数

PluralPluralDiv(floatnum.Pluralden)

Pluralresult;

floatk;

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

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

rcsult.Sctl(-1.O*nuin*dcn.GctlO/k);

returnresult;

I

〃函数名:复数求倒数

//参数:den,分母,是一个复数

〃返回值:此复数的倒数

PluralPluralDiv(Pluralplu)

(

Pluralresult;

floatk;

k=plu.GetR()*plu.GeiR()+plu.GelI()*plu.GelI();

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

resuli.SeiI(-1.O^plu.GeilO/k);

returnresult;

)

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

double*inv(double*A,double*A:nv,intn);

voidmulAB(double*A,double*B,double*C,iniam,inlan,inlbm,inlbn);

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

〃返回值:无

〃说明:变换后的结果依旧保存在mat中

voidMatrixInv(Plura)*mat,intn):

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

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

{

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

doubled,p;

for(i=0;i<n*n;i++)

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

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

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

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

{

d=0.0;

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

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

(

1=i*n+j;

p=fabs(Ainv[l]);

if(P>d)

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

if(i!=k)

1

u=i*n+k;

Ainv[u]=-Ainv[u]*Ainv[lJ;)

}

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

1

if(js[k]!=k)

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

{

u=k*n+j:

v=jsfkl*n+j;

p=Ainv[uJ;

Ainv[u]=Ainv[v];

Ainvfv]=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;

I

)

free(is);

free(js);

returnAinv;

)

〃参数:a为原矩阵,b为逆矩阵,c为结果。其他在此都为n

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

{

inti,j,1,u;

if(an!=bm)

{

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

return;

)

for(i=0;i<am;i++)

for(j=0;j<bn;j++)

(

u=i*bn+j;

c[ul=0.0;

for(1=0;l<an:1++)

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

relum;

)

〃复数矩阵求逆。参数:mat为待求矩阵,n为阶数

voidMatrixinv(PIural*mat,intn)

(

inii,j;

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

double=NULL,*b=NULL,气=NULL;

double*resultR=NULL,*resultl=NULL;

Pluralresult[n][n];

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

:

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

{

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

plurall[i][j]=mat[i*n4j].GetI();

)

}

printf("原始矩阵为八n");

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

!

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

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

printf("\n");

}

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

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

c=(double*)malloc(n*n*sizcof(doublc));

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

resultl=inv(*piurall,b5n);

if(resultl!=NULL)

(

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

if(n%2==0)

{

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

{

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

printf("%10.4f+j%0.4f\t",resultR==NULLO:resultR[i*n+j],resultI==NULLO:resultl[i*n+j]);

printf("\n");

else

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

for(j=O;j<n;j++)

printf("%10.4f+j%0.4f\t",resultR==NULLO:resultR[i*n+j],resultI==NULL0:-1.0*resultI[i*n+j]);

printf("\n");

//测试所求实部逆矩阵

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

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

//for(i=0;i<n;i++)

//{

//ror(j=0;j<n;j++)

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

//printfCNn'1);

〃}

//测试用所求逆矩阵

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

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

//for(i=0;i<n;i++)

〃{

//for(j=0;j<n;j++)

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

//prinlf("\n'^);

〃}

I

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

f

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

mat[i*n+j].SetRI(resultR==NULLO:resuItR[i*n+j],resultl==NULLO:resultl[i*n+j]);

I

free(a);

free(b);

free(c);

)

#include<iostream>

#includc"plural.hpp"

//#include"input.hpp"

usingnamespacestd;

voidNodlnit()

{

floatglS,glX,g2S,g2X,1IL,I1D,12L,12D,tlS,HU,t2S,t2U;

coutvv”请输入发电机G1的容量S(无穷大请输入0):

cin»glS;

coutvv”请输入发电机G1的电抗Xd(没有请输入0):”;

cin»glX;

cout«endl«”******************************************"«endl«end卜

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

cin»g2S;

coutvv”请输入发电机G2的电抗Xd(没有请输入0):

cin»g2X;

cout«endl«*******************************************"«endl«endl,

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

cin»11L;

coutV〈"请输入线路1每千米电抗值:";

cin»11D;

cout«endl«'‘**************************木********木*******«endl«endl,

cout«”请输入线路2的长度L(KM):

cin»12L;

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

cin»12D;

木********木*x********木***************木***

cout«endl«•I**11«endl«endl;

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

cin»tlS;

cou(«”请输入变压器Ti的Uk%:";

cin»tlU;

cout«endl«**************x*************************»**"<<endl«endl;

coinw”请输入变压器T2的容量S(MVA):

cin»t2S;

cout«”请输入变压器T2的Uk%:

cin»t2U;

intmain()

I

NodlnitO;

Pluralmatrix2[3][3];

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

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,l);

Matrixlnv(*matrix2,3);

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

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

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

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

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

printf("%f+j%f\PluralDiv(matrix2[1]f1]).GetR(),PkiralDiv(matrix2[1][1]).GetI());

getchar();

return0;

#inchide"stdafx.h"

#include,'stdio.h"

include1'math.h"

#defineSd100

#defineUavl37

#defineUav26.3

intmain(intargc,char*argv[])

(

doublexg1,S2,11,12,xT,Sn,xg

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论