




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合法的合同范本樣書
- 2025標準版合同采購樣本
- 2025設備租賃的合同協議
- 靶向治療概述
- 新員工轉正答辯
- 山東省煙臺市、德州市2025屆高三下學期二模診斷測試 化學試題
- 質子治療及護理
- 護理文件書寫規范與實施要點
- 2025年操作系統期末試題
- 中國社區矯正的現狀和弊端
- 暑假假期安全教育(課件)-小學生主題班會
- DB21T 3823-2023 巖土工程監測技術規程
- 《T CPSS 1003-2019-交流輸入電壓暫降與短時中斷的低壓直流型補償裝置技術規范》
- 2024年度新能源汽車產業聯盟合作協議3篇
- 2024年考研英語一閱讀理解80篇試題及答案
- 金屬非金屬地下礦山緊急避險系統建設規范培訓
- 施工現場揚塵污染治理巡查記錄
- 《卵巢無性細胞瘤》課件
- 戶用光伏逆變器Modbus通訊協議地址定義
- PRP注射治療膝關節炎
- 2024年會計專業考試高級會計實務試題與參考答案
評論
0/150
提交評論