《2022年潮流程序 .pdf》由会员分享,可在线阅读,更多相关《2022年潮流程序 .pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1 电力系统分析潮流计算潮流计算框图:输入电网节点注入数据计算节点导纳矩阵参数设置节点电压初值设置 k=0 及最大迭代次数kmax 计算 fi(x(k)以及雅各比矩阵x(k+1)=x(k)+dx(k) 求解修正方程获得dx max|fi(x(k)|kmax? 输出潮流不收敛信息结束N Y N Y 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 2 程序部分:#include #include #include FuShu.h
2、#include #include using namespace std; double Function1(PowerGrid &y,double *e,double *f,double *w,double *P,double *Q,double *U,int n,int m); void Function2(int n,double *pa); void Function3(int n,int m,double *Ya,PowerGrid &Y,double *e,double *f); void Function4(int &n); void Function5(int k,doubl
3、e *ya,int n,PowerGrid &y,FuShu *z); void Function6(double *e,double *f,double *P,double *Q,PowerGrid &y,int n); void Function7(double *e,double *f,double *P,double *Q,PowerGrid &y,int n,int m); void Function8(PowerGrid &y,double *e,double *P,double *Q,double *U,int n,int m); void Function9(FuShu &If
4、,int &k,double *U,FuShu *z,FuShu zf,double *e,double *f,int n); void main() int n(0),m; int shuliang(0); double MAX(0.0); int i,j; int kmax(4); double *e,*de,*f,*df,*P,*dP,*Q,*dQ,*U,*dU2; double h=1e-5; double *w,*ef,*Ya; int tell(1); FuShu *Z; int k(4); FuShu If(0,0),Zf(0,0); char nomeaning; Functi
5、on4(n); P=new double n+1; Q=new double n+1; U=new double n+1; Z=new FuShu n+1; PowerGrid Y(n); Y.FromFile(Data1.txt); Y.FromFile(Data4.txt); coutnn节点导纳矩阵实部G 为:endl; Y.PrintG(); coutnn节点导纳矩阵虚部B 为:endl; Y.PrintB(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 1
6、8 页 - - - - - - - - - 3 coutiPjQjUj; if(Uj=0) m+; j+; fin2.close(); e=new double n+1; f=new double n+1; de=new double n+1; df=new double n+1; dU2=new double n+1; dP=new double n+1; dQ=new double n+1; ifstream fin3; fin3.open(Data3.txt); while(!fin3.eof() for(i=1;iei; dU2i=dPi=dQi=0.0; for(i=1;ifi; f
7、or(i=1;in+1;i+) dei=dfi=0.0; fin3.close(); w=new double 2*n-1; ef=new double 2*n-1; Ya=new double*2*n+1; for(i=1;i2*n+1;i+) *(Ya+i)=new double 2*n+1; if(ih) shuliang+; fout.open(out.txt); Function3(n,m,Ya,Y ,e,f); for(i=1;i2*n-1;i+) for(j=1;j2*n-1;j+) foutYaij ; coutendl; fout.close(); i=1; fin4.ope
8、n(out.txt); while(i2*n-1) for(j=1;jYaij; i+; fin4.close(); Function2(2*n-2,Ya); for(i=1;i2*n-1;i+) for(j=1;j2*n-1;j+) efi+=Yaij*wj; for(i=1;i2*n-1;i+) efi=-efi; for(i=2;in+1;i+) dei=efi-1; dfi=efi-1+n-1; for(i=1;in+1;i+) ei=ei+dei; fi=fi+dfi; MAX=Function1(Y,e,f,w,P ,Q,U,n,m); for(i=1;ikmax-1) break
9、; cout迭代次数为 :shuliangendl; cout各节点电压为:endl; for(i=1;in+1;i+) cout 节点 i: e= setw(10)eisetw(10)f= fiendl; Function6(e,f,P,Q,Y ,n); Function7(e,f,P,Q,Y ,n,m); cout极坐标形式为 :endl; for(i=1;in+1;i+) ei=sqrt(ei*ei+fi*fi); fi=atan(fi/ei); for(i=1;in+1;i+) cout节点i: 幅值: setw(10)ei 相角: setw(10)fiendl; cout各节点功率为
10、:endl; for(i=1;in+1;i+) cout 节 点 i: 有 功 功 率 :setw(10)Pi 无 功 功 率 : setw(10)Qiendl; Function8(Y,e,P,Q,U,n,m); Function5(k,Ya,n,Y ,Z); cout节电阻抗矩阵的第k列为 :endl; for(i=1;in+1;i+) coutsetw(5); Zi.Print(); coutendl; coutendl; Function9(If,k,U,Z,Zf,e,f,n); coutnn短路电流为: ; If.Print(); coutendl; cout短路后各节点电压为:n;
11、 for(i=1;in+1;i+) cout节点i: 幅值: setw(12)ei 相角: setw(10)fiendl; cout短路点为 :kendl; delete P; delete dP; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 6 delete Q; delete dQ; delete e; delete de; delete f; delete df; delete U; delete dU2; dele
12、te w; delete ef; delete Z; Y.Deletep(); for(i=1;inomeaning; double Function1(PowerGrid &y,double *e,double *f,double *w,double *P,double *Q,double *U,int n,int m) int i,j; double temp2(0),temp3(0.0),temp(0); for(i=2;in+1;i+) for(j=1;jn+1;j+) temp2+=(y.pij.shibu*ej-y.pij.xubu*fj); temp3+=(y.pij.shibu
13、*fj+y.pij.xubu*ej); temp=Pi-ei*temp2-fi*temp3; wi-1=temp; temp3=temp2=0.0; temp2=temp3=0.0; for(i=n-m+1;in+1;i+) for(j=1;jn+1;j+) temp2+=(y.pij.shibu*ej-y.pij.xubu*fj); temp3+=(y.pij.shibu*fj+y.pij.xubu*ej); temp=Qi-fi*temp2+ei*temp3; wi+m-1=temp; temp3=temp2=0.0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
14、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 18 页 - - - - - - - - - 7 temp2=temp3=0.0; for(i=2;in-m+1;i+) temp=Ui*Ui-ei*ei-fi*fi; wn+m+i-2=temp; temp2=0; for(i=1;itemp2) temp2=fabs(wi); return temp2; void Function2(int n,double *pa) int i; double *pb; pb=new double*n+1; for(i=1;in+1;i+) *(pb+i
15、)=new doublen+1; double *pe; pe=new double*n+1; for(i=1;in+1;i+) *(pe+i)=new doublen+1; int j,k,l; double m(1.0),h(1.0); for(i=1;in+1;i+) for(j=1;jn+1;j+) if(j!=i) peij=0; else peij=1; for(i=1;in+1;i+) for(j=1;jn+1;j+) if(paij!=0.000) m=paij; k=j; break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - -
16、- - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 8 if(j=(n+1) k=n+1; break; for(j=1;jn+1;j+) paij/=m; peij/=m; for(l=1;ln+1;l+) h=palk; if(l!=i) for(j=1;jn+1;j+) palj-=(h*paij); pelj-=(peij*h); if(kn+1) for(i=1;in+1;i+) for(j=1;jn+1;j+) if(paij!=0.0) k=j; break; for(j=1;jn+1;j+) pbkj=
17、peij; else cout矩阵不可逆!endl; for(i=1;in+1;i+) for(j=1;jn+1;j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 9 paij=pbij; for(i=1;in+1;i+) delete *(pb+i); delete *(pe+i); delete pb; delete pe; void Function3(int n,int m,double *Ya,PowerGri
18、d &Y,double *e,double *f) int i,j,k; double temp1=0,temp2=0; double *H,*N,*M,*L,*R,*S; H=new double*n; N=new double*n; for(i=1;in;i+) *(H+i)=new doublen; *(N+i)=new doublen; M=new double*m+1; L=new double*m+1; for(i=1;im+1;i+) *(M+i)=new doublen; *(L+i)=new doublen; R=new double*n-m; S=new double*n-
19、m; for(i=1;in-m;i+) *(R+i)=new doublen; *(S+i)=new doublen; temp1=temp2=0.0; for(i=1;in;i+) for(j=1;jn;j+) if(j+1)!=(i+1) Hij=-(Y.pi+1j+1.shibu*ei+1+Y.pi+1j+1.xubu*fi+1); Nij=(Y.pi+1j+1.xubu*ei+1-Y.pi+1j+1.shibu*fi+1); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9
20、 页,共 18 页 - - - - - - - - - 10 else for(k=1;kn+1;k+) temp1+=(Y.pi+1k.shibu*ek-Y.pi+1k.xubu*fk); temp2+=(Y.pi+1k.shibu*fk+Y.pi+1k.xubu*ek); Hij=-temp1-(Y.pi+1i+1.shibu*ei+1+Y.pi+1i+1.xubu*fi+1); Nij=-temp2+(Y.pi+1i+1.xubu*ei+1-Y.pi+1i+1.shibu*fi+1); temp1=temp2=0.0; temp1=temp2=0.0; temp1=temp2=0.0;
21、for(i=1;im+1;i+) for(j=1;jn;j+) if(j+1)!=(n-m+i) Mij=Y.pn-m+ij+1.xubu*en-m+i-Y.pn-m+ij+1.shibu*fn-m+i; Lij=Y.pn-m+ij+1.shibu*en-m+i+Y.pn-m+ij+1.xubu*fn-m+i; else for(k=1;kn+1;k+) temp1+=(Y.pn-m+ik.shibu*fk+Y.pn-m+ik.xubu*ek); temp2+=(Y.pn-m+ik.shibu*ek-Y.pn-m+ik.xubu*fk); Mij=temp1+Y.pn-m+in-m+i.xub
22、u*en-m+i-Y.pn-m+in-m+i.shibu*fn-m+i; Lij=-temp2+Y.pn-m+in-m+i.shibu*en-m+i+Y.pn-m+in-m+i.xubu*fn-m+i; temp1=temp2=0.0; temp1=temp2=0.0; temp1=temp2=0.0; for(i=1;in-m;i+) for(j=1;jn;j+) if(j!=i) Rij=0.0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 18 页 - - -
23、 - - - - - - 11 Sij=0.0; else Rii=-2*ei+1; Sii=-2*fi+1; for(i=1;in;i+) for(j=1;j2*n-1;j+) if(jn) Yaij=Hij; else Yaij=Nij-n+1; for(i=n;in+m;i+) for(j=1;j2*n-1;j+) if(jn) Yaij=Mi-n+1j; else Yaij=Li-n+1j-n+1; for(i=n+m;in*2-1;i+) for(j=1;j2*n-1;j+) if(jn) Yaij=Ri-n-m+1j; else Yaij=Si-n-m+1j-n+1; for(i=
24、1;in;i+) delete *(H+i); delete *(N+i); delete H; delete N; for(i=1;im+1;i+) delete *(M+i); delete *(L+i); delete M; delete L; for(i=1;istendY.shibuY.xubuB2k; if(stn) n=st; if(endn) n=end; while(!fin2.eof() fin2stendY.shibuY.xubuB2k; if(stn) n=st; if(endn) n=end; fin1.close(); fin2.close(); void Func
25、tion5(int k,double *ya,int n,PowerGrid &y,FuShu *z) int i,j; for(i=1;i2*n+1;i+) for(j=1;j2*n+1;j+) if(i=n&j=n) yaij=y.pij.shibu; if(in) yaij=-y.pij-n.xubu; if(in&jn&jn) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 18 页 - - - - - - - - - 13 yaij=y.pi-nj-n.shi
26、bu; Function2(2*n,ya); for(i=1;in+1;i+) zi.shibu=yaik; zi.xubu=yai+nk; void Function6(double *e,double *f,double *P,double *Q,PowerGrid &y,int n) double temp1(0),temp2(0); int j; for(j=1;jn+1;j+) temp1+=(y.p1j.shibu*ej-y.p1j.xubu*fj); temp2+=(y.p1j.shibu*fj+y.p1j.xubu*ej); P1=e1*temp1+f1*temp2; Q1=f
27、1*temp1-e1*temp2; temp1=temp2=0.0; void Function7(double *e,double *f,double *P,double *Q,PowerGrid &y,int n,int m) int i,j; double temp1(0),temp2(0); for(i=2;in-m+1;i+) for(j=1;jn+1;j+) temp1+=(y.pij.shibu*ej-y.pij.xubu*fj); temp2+=(y.pij.shibu*fj+y.pij.xubu*ej); Qi=fi*temp1-ei*temp2; temp1=temp2=0
28、.0; void Function8(PowerGrid &y,double *e,double *P,double *Q,double *U,int n,int m) y.FromFile(Data5.txt); int num(0),i; for(i=1;in+1;i+) if(Pi=0&Ui!=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 18 页 - - - - - - - - - 14 num=i; break; if(num!=(n+1) y.pnu
29、mnum.shibu+=fabs(Pnum)/(enum*enum); y.pnumnum.xubu+=(Qnum)/(enum*enum); for(i=n-m+1;in+1;i+) y.pii.shibu+=fabs(Pi)/(ei*ei); y.pii.xubu+=(Qi)/(ei*ei); void Function9(FuShu &If,int &k,double *U,FuShu *z,FuShu zf,double *e,double *f,int n) int i; FuShu t(0,0); zk=zk+zf; zk.ToRad(); If.shibu=ek/(zk.shib
30、u); If.xubu=fk-zk.xubu; for(i=1;in+1;i+) zi.ToRad(); t.shibu=zi.shibu*If.shibu; t.xubu=zi.xubu+If.xubu; t.d=1; t.ToShiXu(); ei=ei*cos(fi); fi=ei*sin(fi); ei=ei-t.shibu; fi=fi-t.xubu; ei=sqrt(ei*ei+fi*fi); fi=atan(fi/ei); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
31、 14 页,共 18 页 - - - - - - - - - 15 程序附加部分:定义复数运算:#include #include #include #include using namespace std; class FuShu public: double shibu; double xubu; int d; FuShu() shibu=0; xubu=0; d=0; FuShu Set(double s,double x) return FuShu(s,x); FuShu(double s,double x) shibu=s; xubu=x; d=0; FuShu() void Pri
32、nt() cout=0) cout+xubuj; else coutxubud!=1) this-shibu=sqrt(shibu*shibu+xubu*xubu); this-xubu=atan(xubu/shibu); this-d=!d; void ToShiXu() if(this-d!=0) this-shibu=shibu*cos(xubu); this-xubu=shibu*sin(xubu); this-d=!d; ; class PowerGrid public: int NodeNumber; FuShu *p; PowerGrid(int nn) NodeNumber=n
33、n; p=new FuShu*NodeNumber+1; for(int i=0;iNodeNumber+1;i+) *(p+i)=new FuShuNodeNumber+1; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 18 页 - - - - - - - - - 17 void FromFile(char s20) ifstream fin(s); int startpoint=1,endpoint=1; double B2=0,k=1; FuShu Y(0,0
34、),YB; int i=0; while(istartpoint; finendpoint; finY.shibuY.xubuB2k; YB=YB.Set(0.0,B2); if(k!=0&startpoint!=0&endpoint!=0) pstartpointstartpoint=pstartpointstartpoint+Y.DaoShu(); pendpointendpoint=pendpointendpoint+(Y.Kbei(k*k).DaoShu(); pstartpointendpoint=pstartpointendpoint-(Y.Kbei(k).DaoShu(); pe
35、ndpointstartpoint=pendpointstartpoint-(Y.Kbei(k).DaoShu(); if(k=0&startpoint!=0&endpoint!=0) pstartpointstartpoint=pstartpointstartpoint+Y.DaoShu()+YB; pendpointendpoint=pendpointendpoint+Y.DaoShu()+YB; pstartpointendpoint=pstartpointendpoint-Y.DaoShu(); pendpointstartpoint=pendpointstartpoint-Y.Dao
36、Shu(); if(startpoint!=0&endpoint=0) pstartpointstartpoint=pstartpointstartpoint+Y.DaoShu(); fin.close(); void Deletep() for(int i=1;iNodeNumber+1;i+) delete *(p+i); delete p; void Print() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 18 页 - - - - - - - - - 18
37、 for(int i=1;i=NodeNumber;i+) for(int j=1;j=NodeNumber;j+) pij.Print(); cout ; coutendl; void PrintG() for(int i=1;i=NodeNumber;i+) for(int j=1;j=NodeNumber;j+) coutsetw(10)pij.shibu; /cout ; coutendl; void PrintB() for(int i=1;i=NodeNumber;i+) for(int j=1;j=NodeNumber;j+) coutsetw(10)pij.xubu; /cout ; coutendl; ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 18 页 - - - - - - - - -