电力系统潮流计算程序讲解.docx
- 文档编号:9812470
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:29
- 大小:21.23KB
电力系统潮流计算程序讲解.docx
《电力系统潮流计算程序讲解.docx》由会员分享,可在线阅读,更多相关《电力系统潮流计算程序讲解.docx(29页珍藏版)》请在冰豆网上搜索。
电力系统潮流计算程序讲解
电力系统潮流计算c语言程序,两行,大家可以看看,仔细研究,然后在这个基础上修改。
谢谢
#include"stdafx.h"
#include
#include
#include
#include"Complex.h"
#include"wanjing.h"
#include"gauss.h"
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
inti;//i作为整个程序的循环变量
intN=Bus:
:
ScanfBusNo();//输入节点个数
intL=Line:
:
ScanflineNo();//输入支路个数
if((L&&N)==0){return0;}//如果找不到两个文件中的任意一个,退出
Line*line=newLine[L];//动态分配支路结构体
Line:
:
ScanfLineData(line);//输入支路参数
Line:
:
PrintfLineData(line,L);//输出支路参数
Bus*bus=newBus[N];//动态分配结点结构体
for(inti=0;i { bus[i].Sdelta.real=0; bus[i].Sdelta.image=0; } Bus: : ScanfBusData(bus);//输入节点参数 Bus: : PrintfBusData(bus,N);//输出结点参数 Complex**X;X=newComplex*[N];for(i=0;i Bus: : JisuanNodeDnz(X,line,bus,L,N);//计算节点导纳矩阵 Bus: : PrintfNodeDnz(X,N);//输出节点导纳矩阵 intNN=(N-1)*2; double**JacAug;JacAug=newdouble*[NN];for(i=0;i double*x; x=newdouble[NN]; intcount=1; LOOP: Bus: : JisuanNodeI(X,bus,N);//计算节点注入电流 Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 Bus: : JisuanNodeSdelta(bus,N);//计算节点功率差值 Bus: : PrintfNodeScal(X,bus,N);//输出节点功率差值 inticon=wehcon1(bus,N);//whetherconverbence看迭代是否结束 if(icon==1) { cout<<"icon="< Bus: : JisuanJacAug(JacAug,X,bus,N);//计算雅可比增广矩阵 //Bus: : PrintfJacAug(JacAug,N); gauss: : gauss_slove(JacAug,x,NN);//解方程组求出电压差值 Bus: : ReviseNodeV(bus,x,N);//修正节点电压 //Bus: : PrintfNodeV(bus,N); count++; gotoLOOP; } else { for(i=0;i { intstatemp,endtemp; Complexaa,bb,cc,dd,B; B.real=0; B.image=-line[i].B; statemp=line[i].start; endtemp=line[i].end; aa=Complex: : productComplex(Complex: : getconj(bus[statemp-1].V),B); bb=Complex: : subComplex(Complex: : getconj(bus[statemp-1].V),Complex: : getconj(bus[endtemp-1].V)); cc=Complex: : productComplex(bb,Complex: : getconj(line[i].Y)); dd=Complex: : CaddC(aa,cc); line[i].stoe=Complex: : productComplex(bus[statemp-1].V,dd); aa=Complex: : productComplex(Complex: : getconj(bus[endtemp-1].V),B); bb=Complex: : subComplex(Complex: : getconj(bus[endtemp-1].V),Complex: : getconj(bus[statemp-1].V)); cc=Complex: : productComplex(bb,Complex: : getconj(line[i].Y)); dd=Complex: : CaddC(aa,cc); line[i].etos=Complex: : productComplex(bus[endtemp-1].V,dd); } cout<<"icon="< "< Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 for(i=0;i { bus[i].Scal.real=bus[i].Scal.real+bus[i].Load.real;//发电机功率=注入功率+负荷功率 bus[i].Scal.image=bus[i].Scal.image+bus[i].Load.image; bus[i].V=Complex: : Rec2Polar(bus[i].V); } cout<<"====节点电压===============发电机发出功率======"< for(i=0;i { cout<<"节点"<<(i+1)<<'\t'; Complex: : PrintfComplex(bus[i].V); coutt(bus[i].Scal.real); coutt(bus[i].Scal.image); cout< } cout<<"======线路传输功率=========="< for(i=0;i { intstatemp,endtemp; statemp=line[i].start; endtemp=line[i].end; cout< Complex: : PrintfComplex(Complex: : ComDivRea(line[i].stoe,0.01)); Complex: : PrintfComplex(Complex: : ComDivRea(line[i].etos,0.01)); cout< } } return0; } #include"stdafx.h" #include #include #include #include"Complex.h" #include"wanjing.h" #include"gauss.h" usingnamespacestd; int_tmain(intargc,_TCHAR*argv[]) { inti;//i作为整个程序的循环变量 intN=Bus: : ScanfBusNo();//输入节点个数 intL=Line: : ScanflineNo();//输入支路个数 if((L&&N)==0){return0;}//如果找不到两个文件中的任意一个,退出 Line*line=newLine[L];//动态分配支路结构体 Line: : ScanfLineData(line);//输入支路参数 Line: : PrintfLineData(line,L);//输出支路参数 Bus*bus=newBus[N];//动态分配结点结构体 for(inti=0;i { bus[i].Sdelta.real=0; bus[i].Sdelta.image=0; } Bus: : ScanfBusData(bus);//输入节点参数 Bus: : PrintfBusData(bus,N);//输出结点参数 Complex**X;X=newComplex*[N];for(i=0;i Bus: : JisuanNodeDnz(X,line,bus,L,N);//计算节点导纳矩阵 Bus: : PrintfNodeDnz(X,N);//输出节点导纳矩阵 intNN=(N-1)*2; double**JacAug;JacAug=newdouble*[NN];for(i=0;i double*x; x=newdouble[NN]; intcount=1; LOOP: Bus: : JisuanNodeI(X,bus,N);//计算节点注入电流 Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 Bus: : JisuanNodeSdelta(bus,N);//计算节点功率差值 Bus: : PrintfNodeScal(X,bus,N);//输出节点功率差值 inticon=wehcon1(bus,N);//whetherconverbence看迭代是否结束 if(icon==1) { cout<<"icon="< Bus: : JisuanJacAug(JacAug,X,bus,N);//计算雅可比增广矩阵 //Bus: : PrintfJacAug(JacAug,N); gauss: : gauss_slove(JacAug,x,NN);//解方程组求出电压差值 Bus: : ReviseNodeV(bus,x,N);//修正节点电压 //Bus: : PrintfNodeV(bus,N); count++; gotoLOOP; } else { for(i=0;i { intstatemp,endtemp; Complexaa,bb,cc,dd,B; B.real=0; B.image=-line[i].B; statemp=line[i].start; endtemp=line[i].end; aa=Complex: : productComplex(Complex: : getconj(bus[statemp-1].V),B); bb=Complex: : subComplex(Complex: : getconj(bus[statemp-1].V),Complex: : getconj(bus[endtemp-1].V)); cc=Complex: : productComplex(bb,Complex: : getconj(line[i].Y)); dd=Complex: : CaddC(aa,cc); line[i].stoe=Complex: : productComplex(bus[statemp-1].V,dd); aa=Complex: : productComplex(Complex: : getconj(bus[endtemp-1].V),B); bb=Complex: : subComplex(Complex: : getconj(bus[endtemp-1].V),Complex: : getconj(bus[statemp-1].V)); cc=Complex: : productComplex(bb,Complex: : getconj(line[i].Y)); dd=Complex: : CaddC(aa,cc); line[i].etos=Complex: : productComplex(bus[endtemp-1].V,dd); } cout<<"icon="< "< Bus: : JisuanNodeScal(X,bus,N);//计算节点功率 for(i=0;i { bus[i].Scal.real=bus[i].Scal.real+bus[i].Load.real;//发电机功率=注入功率+负荷功率 bus[i].Scal.image=bus[i].Scal.image+bus[i].Load.image; bus[i].V=Complex: : Rec2Polar(bus[i].V); } cout<<"====节点电压===============发电机发出功率======"< for(i=0;i { cout<<"节点"<<(i+1)<<'\t'; Complex: : PrintfComplex(bus[i].V); coutt(bus[i].Scal.real); coutt(bus[i].Scal.image); cout< } cout<<"======线路传输功率=========="< for(i=0;i { intstatemp,endtemp; statemp=line[i].start; endtemp=line[i].end; cout< Complex: : PrintfComplex(Complex: : ComDivRea(line[i].stoe,0.01)); Complex: : PrintfComplex(Complex: : ComDivRea(line[i].etos,0.01)); cout< } } return0; } #include usingnamespacestd; classComplex//定义复数类 { public: doublereal; doubleimage; intRecPolar;//0表示直角坐标,1表示极坐标 staticComplexCaddC(Complexc1,Complexc2);//求两个复数和 staticComplexsubComplex(Complexc1,Complexc2);//求两个复数差 staticComplexproductComplex(Complexc1,Complexc2);//求两个复数积 staticComplexdivideComplex(Complexc1,Complexc2);//求两个复数商 staticComplexComDivRea(Complexc1,doubler2);//除数 staticComplexgetconj(Complexc1);//求一个复数共轭 staticComplexgetinverse(Complexc1);//取倒数 staticdoublegetComplexReal(Complexc1);//求一个复数实部 staticdoublegetCompleximage(Complexc1);//求一个复数虚部 staticvoidPrintfComplex(Complexc1);//显示一个复数 staticvoidPrintfmultiComplex(ComplexC,intN);//显示多个复数 staticvoidzeroComplex(Complexc1);//将复数复零 staticComplexRec2Polar(Complexc1);//取极坐标 Complex() { RecPolar=0; } }; ComplexComplex: : Rec2Polar(Complexc1)//极坐标表示 { ComplexNode; Node.real=sqrt(c1.real*c1.real+c1.image*c1.image); Node.image=atan2(c1.image,c1.real)*180/3.1415926; Node.RecPolar=1; returnNode; } ComplexComplex: : CaddC(Complexc1,Complexc2)//复数加法 { ComplexNode; Node.real=c1.real+c2.real; Node.image=c1.image+c2.image; returnNode; } ComplexComplex: : subComplex(Complexc1,Complexc2)//复数减法 { ComplexNode; Node.real=c1.real-c2.real; Node.image=c1.image-c2.image; returnNode; } ComplexComplex: : productComplex(Complexc1,Complexc2)//复数乘法 { ComplexNode; Node.real=c1.real*c2.real-c1.image*c2.image; Node.image=c1.image*c2.real+c2.image*c1.real; returnNode; } ComplexComplex: : divideComplex(Complexc1,Complexc2)//复数除法 { ComplexNode; Node.real=(c1.real*c2.real+c1.image*c2.image)/(pow(c2.real,2)+pow(c2.image,2)); Node.image=(c1.image*c2.real-c1.real*c2.image)/(pow(c2.real,2)+pow(c2.image,2)); returnNode; } ComplexComplex: : ComDivRea(Complexc1,doubler1)//复数除数 { ComplexNode; Node.real=c1.real/(r1); Node.image=c1.image/(r1); returnNode; } ComplexComplex: : getconj(Complexc1)//取共轭 { ComplexNode; Node.real=c1.real; Node.image=-c1.image; returnNode; } ComplexComplex: : getinverse(Complexc1)//取倒数 { ComplexNode; Node.real=1; Node.image=0; Node=(Complex: : divideComplex(Node,c1)); returnNode; } doubleComplex: : getComplexReal(Complexc1)//取实部 { returnc1.real; } doubleComplex: : getCompleximage(Complexc1)//取虚部 { returnc1.image; } voidComplex: : PrintfComplex(Complexc1)//按直角坐标输出 { if(c1.RecPolar==0) {cout.precision(6); cout.width(8); cout.setf(ios: : right); cout< cout.precision(6); cout.width(8); cout.setf(ios: : left); cout< else { cout< "<<'\t';};//按极坐标输出 } voidComplex: : zeroComplex(Complexc1)//清零 { c1.real=0; c1.image=0; } classgauss { public: staticvoidgauss_slove(double**a,double*x,intNN); staticvoidgauss_output(); }; voidgauss: : gauss_slove(double**a,double*x,intNN) { intn,i,j,k,*pivrow,**pivcol; doubleeps,pivot,sum,aik,al; n=NN; pivrow=newint[n]; pivcol=newint*[n]; for(i=0;i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电力系统 潮流 计算 程序 讲解