版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年入股驾校的合同二篇
- 2027年买卖租赁合同二篇
- 2027年劳务合同如何转正式合同二篇
- 合规转利润:降本增效全指南(2026)《GBT 36103.14-2018铁氧体磁心 尺寸 第14部分:电源用EFD型磁心》
- 合规转利润:降本增效全指南(2026)《GBT 35992-2018粮油机械 容积式配麦器》
- 金属轧制工岗前工作效率考核试卷含答案
- 《比较正数和负数的大小》教学实录
- 脊柱外伤术后相关腹胀的原因
- 石脑油加工工安全培训评优考核试卷含答案
- 机织无结网片工规章评优考核试卷含答案
- 部编人教版一年级上册道德与法治全册教案 (一)
- 环境工程造价课件
- 高考生物真题分项汇编 专题21 基因工程-:五年(2019-2023)高考生物真题分项汇编(全国)(原卷版)
- 弹性力学讲义
- 2025年中储粮集团北京分公司招聘(99人)笔试参考题库附带答案详解
- 石材地面铺贴施工专项方案
- 会议室简易改造合同样本
- (高清版)DZT 0079-2015 固体矿产勘查地质资料综合整理综合研究技术要求
- 2023年广西钦州市残疾人康复中心招聘工作人员4人笔试《行政职业能力测验》模拟试卷(答案详解版)
- 初高中-化学衔接(共75张PPT)
- 甘蔗糖厂制炼一碳饱充罐技术改造
评论
0/150
提交评论