华电电分极坐标潮流上机
电力系统潮流计算实验报告
电力系统潮流上机计算实验报告11.手算过程已知:节点1:PQ 节点,节点, s(1)= s(1)= -0.5000-j0.3500 节点2:PV 节点,节点, p(2)=0.4000 v(2)=1.0500 p(2)=0.4000 v(2)=1.0500 节点3:平衡节点,:平衡节点,U(3)=1.0000U(3)=1.0000U(3)=1.0000∠∠0.0000 网络的连接图:0.0500+j0.2000 1 0.0500+j0.2000231)计算节点导纳矩阵由2000.00500.012j Z +=Þ71.418.112j y -=; 2000.00500.013j Z +=Þ71.418.113j y -=;\导纳矩阵中的各元素:42.936.271.418.171.418.1131211j j j y y Y -=-+-=+=;71.418.11212jy Y +-=-=; 71.418.11313j y Y +-=-=; =21Y71.418.11212j y Y +-=-=; 71.418.12122j y Y -==; 002323j y Y +=-=;=31Y 71.418.11313j y Y +-=-=; =32Y 002323j y Y +=-=; 71.418.13133j y Y -==;\形成导纳矩阵B Y :úúúûùêêêëé-++-+-+-+-+--=71.418.10071.418.10071.418.171.418.171.418.171.418.142.936.2j j j j j j j j j Y B 2)计算各PQ PQ、、PV 节点功率的不平衡量,及PV 节点电压的不平衡量:取:000.0000.1)0(1)0(1)0(1j jf e U +=+=000.0000.1)0(2)0(2)0(2j jf e U +=+=节点3是平衡节点,保持000.0000.1333j jf e U +=+=为定值。
华电潮流上机计算实验报告全解
院系:电气与电子工程学院班级:电气1205学号:1121181223学生姓名:王城指导教师:孙英云设计周数:两周成绩:日期:2015年7月7日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细内容见附录)1.手算2.计算机计算3.思考题三、课程设计总结或结论(详细内容见附录)四、参考文献1.《电力系统计算:电子数字计算机的应用》,西安交通大学等合编。
北京:水利电力出版社;2.《现代电力系统分析》,王锡凡主编,科学出版社;3.《电力系统稳态分析》,陈珩,中国电力出版社,1995年,第三版;附录(设计流程图、程序、表格、数据等)4.机算潮流程序及结果// dierti.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"struct Line //线路结构体{int Num,NumI,NumJ; //线路号左节点名右节点名float R,X,B,K; //电阻电抗电纳变比(K等于1为普通支路,不等于1为变压器支路的变比) };struct Bus //节点结构体{int Num ;float Volt,Phase,GenP,GenQ,LoadP,LoadQ;int Type;};#include"stdio.h"#include"string.h"#include"math.h"#include"stdlib.h"#define NBUS 4#define NLINE 4/* Global variables */int nL,nB,nVA,nSH;float X[NBUS];int L;double def[2*NBUS];double mn[50];void Gauss(double a[50][50],double b[50], int n) /*定义高斯法 */{int JS[50];int i,j,k;float d,t,x[50];FILE *fp;int L=1;for(i=0;i<50;i++) JS[i]=0;for(k=0;k<n;k++){d=0.0;for(j=k;j<n;j++)if(fabs(a[k][j])>d){ /*在一行中找到一个最大值赋值d,并用JS[K]记住这个最大值所在的列号*/ d=fabs(a[k][j]);JS[k]=j;}if(fabs(d)<0.000001) /*如果d的数值太小,做为被除数将带来很大的误差 */L=0;else {if(JS[k]!=k)for(i=0;i<n;i++){t=a[i][k];a[i][k]=a[i][JS[k]]; /*进行列交换,让最大值始终在对角元上*/a[i][JS[k]]=t;}}if(L==0)break;for(j=k+1;j<n;j++)a[k][j]=a[k][j]/a[k][k]; /*对角元上的元素消为1*/b[k]=b[k]/a[k][k];for(i=k+1;i<n;i++){for(j=k+1;j<n;j++)a[i][j]=a[i][j]-a[i][k]*a[k][j]; /*使下三角阵的元素为0*/b[i]=b[i]-a[i][k]*b[k];}}if(fabs(a[n-1][n-1])>0.00001){ /*用追赶法,解方程组,求未知数x*/ x[n-1]=b[n-1];for(i=n-2;i>=0;i--){t=0.0;for(j=i+1;j<n;j++)t=t+a[i][j]*x[j];x[i]=(b[i]-t);}}if((fp=fopen("gauss.txt","w"))==NULL) /*将结果写到TXT文件中*/{printf("err");exit(0);}for(i=0;i<n;i++){fprintf(fp,"%lf",x[i]);mn[i]=x[i];fprintf(fp,"\n");}fclose(fp);if(fp!=NULL) fclose(fp);}int _tmain(int argc, _TCHAR* argv[]){FILE *fp;FILE *fpout;int i,j,k,l,h,n,v;int i1,i2,i3,kp,kq;float d1,d2,d3,d4,d5,d6,r,x,g,b,tt,LL,e,ps,qs,shsh,m;struct Line sL[NLINE];struct Bus sB[NBUS];float YG[NBUS+1][NBUS+1],YB[NBUS+1][NBUS+1];double u[50][2];i1=i2=i3=0;d1=d2=d3=d4=d5=d6=ps=qs=0.0;for(i=0;i<NBUS;i++)if((fp=fopen("in.txt","r"))==NULL){ printf("Can not open the file named 'in.txt' \n");exit(0);}fscanf(fp,"%d,%d,%d",&nB,&nL,&nSH);for(i=0;i<nB;i++){sB[i].Num=sB[i].Type=0;sB[i].Volt=1.0;sB[i].Phase=sB[i].GenP=sB[i].GenQ=sB[i].LoadP=sB[i].LoadQ=0.0;fscanf(fp,"%d,%f,%f,%f,%f,%f,%f,%d",&i1,&d1,&d2,&d3,&d4,&d5,&d6,&i2);sB[i].Num=i1;sB[i].Volt=d1;sB[i].Phase=d2;sB[i].GenP=d3;sB[i].GenQ=d4;sB[i].LoadP=d5,sB[i].LoadQ=d6;sB[i].T ype=i2;};for(i=0;i<nL;i++){sL[i].Num=sL[i].NumI=sL[i].NumJ=0;sL[i].R=sL[i].X=sL[i].B=0.0;sL[i].K=1.0;fscanf(fp,"%2d %3d %3d %f %f %f %f",&i1,&i2,&i3,&d1,&d2,&d3,&d4);sL[i].Num=i1;sL[i].NumI=i2;sL[i].NumJ=i3;sL[i].R=d1;sL[i].X=d2;sL[i].B=d3;sL[i].K=d4;}if(fp!=NULL) fclose(fp);/*Make Y Matrix*/for(i=1;i<nB+1;i++)for(j=1;j<nB+1;j++){YG[i][j]=0.0;YB[i][j]=0.0;};for(l=0; l<nL; l++){i=sL[l].NumI;j=sL[l].NumJ;r=sL[l].R;x=sL[l].X;d1=r*r+x*x;g=r/d1;b=-x/d1;m=sL[l].K;if(fabs(sL[l].K-1.0)<0.000001) //普通支路 {YG[i][i]=YG[i][i]+g;YG[j][j]=YG[j][j]+g;YB[i][i]=YB[i][i]+b+sL[l].B;YB[j][j]=YB[j][j]+b+sL[l].B;YG[i][j]=YG[i][j]-g;YG[j][i]=YG[j][i]-g;YB[i][j]=YB[i][j]-b;YB[j][i]=YB[j][i]-b;}else //变压器支路{YG[i][i]=YG[i][i]+g/m+g*(m-1)/m;YG[j][j]=YG[j][j]+g/m+g*(1-m)/m/m;YB[i][i]=YB[i][i]+b/m+b*(m-1)/m;YB[j][j]=YB[j][j]+b/m+b*(1-m)/m/m;YG[i][j]=YG[i][j]-g/m;YG[j][i]=YG[j][i]-g/m;YB[i][j]=YB[i][j]-b/m;YB[j][i]=YB[j][i]-b/m; }}/* Check the Y matrix */if((fp=fopen("GGBB.txt","w"))==NULL){printf("Can not open the file named 'GGBB.txt' \n");exit(0);}fprintf(fp,"---Y Matrix---\n");for(i=1;i<nB+1;i++)for(j=1;j<nB+1;j++)if(fabs(YB[i][j]-0.0)>0.000001) fprintf(fp,"Y(%3d,%-3d)=(%10.5f,%10.5f)\n",i,j,YG[i][j],YB[i][j]);if(fp!=NULL) fclose(fp);/* 节点电压附初值 */for(i=1;i<nB+1;i++){if(sB[i-1].Type==0){u[i][0]=0.0;u[i][1]=1.0;}else if(sB[i-1].Type==1){u[i][1]=sB[i-1].Volt;u[i][0]=0.0;}else if(sB[i-1].Type==2){u[i][1]=sB[i-1].Volt;u[i][0]= sB[i-1].Phase;}}for(v=1;;v++)/* 迭代次数可以无限大 */{/* 节点电压附初值 */printf("迭代第%d次赋予的电压初值为e+jf:\n",v); for(i=1;i<nB+1;i++)printf("%lf,%lf\n",u[i][1],u[i][0]);printf("\n");printf("\n");/* 求偏移量 */double P_P[10];double P_Q[10];double P_UU[10];for(i=1;i<nB+1;i++){if(sB[i-1].Type==2){P_P[i]=0.0;P_Q[i]=0.0;P_UU[i]=1.05;}if(sB[i-1].Type==0){double tempP=0.0;double tempQ=0.0;for(j=1;j<nB+1;j++){tempP+=YG[i][j]*u[j][1]-YB[i][j]*u[j][0];tempQ+=YG[i][j]*u[j][0]+YB[i][j]*u[j][1];}P_P[i]=(sB[i-1].GenP-sB[i-1].LoadP)-tempP*u[i][1]-tempQ*u[i][0]; P_Q[i]=(sB[i-1].GenQ-sB[i-1].LoadQ)-tempP*u[i][0]+tempQ*u[i][1]; P_UU[i]=0.0;}if(sB[i-1].Type==1){double tempP=0.0;double tempQ=0.0;for(j=1;j<nB+1;j++){tempP+=YG[i][j]*u[j][1]-YB[i][j]*u[j][0];tempQ+=YG[i][j]*u[j][0]+YB[i][j]*u[j][1];P_P[i]=(sB[i-1].GenP-sB[i-1].LoadP)-tempP*u[i][1]-tempQ*u[i][0]; }P_UU[i]=sB[i-1].Volt*sB[i-1].Volt-u[i][1]*u[i][1]-u[i][0]*u[i][0]; P_Q[i]=0.0;}}/* 偏移量阵 */double P_PQ[6];int a=0;for(i=1;i<3;i++){P_PQ[a]=P_P[i];a=a+2;}a=1;for(i=1;i<3;i++){P_PQ[a]=P_Q[i];a=a+2;P_PQ[4]=P_P[3];P_PQ[5]=P_UU[3];printf("迭代第%d次的偏移量为:\n",v);for(i=0;i<6;i++){printf("%f",P_PQ[i]);printf("\n");}printf("\n");printf("\n");/* 雅可比矩阵 */double H[6][6],N[6][6],J[6][6],L[6][6],R[6][6],S[6][6],aa[6],bb[6]; for(i=1;i<5;i++){ if(fabs(sB[i-1].Type-2.0)<0.000001)continue;else{for(j=1;j<5;j++)if(i!=j){H[i][j]=-YB[i][j]*u[i][1]+YG[i][j]*u[i][0];N[i][j]=YG[i][j]*u[i][1]+YB[i][j]*u[i][0];J[i][j]=-N[i][j];L[i][j]=H[i][j];R[i][j]=0;S[i][j]=0;}else{aa[i]=bb[i]=0.0;aa[i]+=YG[i][n]*u[n][1]-YB[i][n]*u[n][0];bb[i]+=YG[i][n]*u[n][0]+YB[i][n]*u[n][1];}H[i][i]=-YB[i][i]*u[i][1]+YG[i][i]*u[i][0]+bb[i]; N[i][i]=YG[i][i]*u[i][1]+YB[i][i]*u[i][0]+aa[i]; J[i][i]=-YG[i][i]*u[i][1]-YB[i][i]*u[i][0]+aa[i]; L[i][i]=YG[i][i]*u[i][0]-YB[i][i]*u[i][1]-bb[i]; R[i][i]=2*u[i][0];S[i][i]=2*u[i][1];}}}double ss[50][50];for(i=0;i<6;i++)for(j=0;j<6;j++)ss[i][j]=0.0;for(i=1;i<3;i++)for(j=1;j<4;j++){ss[2*i-2][2*j-2]=H[i][j];ss[2*i-2][2*j-1]=N[i][j];ss[2*i-1][2*j-2]=J[i][j];ss[2*i-1][2*j-1]=L[i][j];}i=3;for(j=1;j<4;j++){ss[2*i-2][2*j-2]=H[i][j];ss[2*i-2][2*j-1]=N[i][j];ss[2*i-1][2*j-2]=R[i][j];ss[2*i-1][2*j-1]=S[i][j];}printf("迭代第%d次的雅可比矩阵为:\n",v);for(i=0;i<6;i++){for(j=0;j<6;j++)printf("%10f",ss[i][j]);printf("\n");}printf("\n");printf("\n");Gauss(ss,P_PQ,6);for(i=1;i<nB;i++){u[i][0]=u[i][0]+mn[2*(i-1)];u[i][1]=u[i][1]+mn[2*i-1];}double max;max=fabs(P_PQ[0]);for(i=0;i<=5;i++)if (max<fabs(P_PQ[i]))max=fabs(P_PQ[i]);if(fabs(max)<0.0001){printf("满足精度要求,迭代终止,迭代次数为%d\n",v); printf("\n");}/* 叠代循环的括号 */printf("最终求得的节点电压值为e+jf:\n");for(i=1;i<nB+1;i++)printf("%lf,%lf\n",u[i][1],u[i][0]);printf("\n");printf("\n");double uu[5],Phase[5];for(i=1;i<nB+1;i++){uu[i]=sqrt(u[i][1]*u[i][1]+u[i][0]*u[i][0]); Phase[i]=atan(u[i][0]/u[i][1]);}for(i=1;i<nB+1;i++)printf("%lf,%lf\n",uu[i],Phase[i]);*计算线路功率和平衡节点 PV节点功率*/double P[5],Q[5];double tempP=0.0;double tempQ=0.0;for(i=1;i<nB+1;i++){for(j=1;j<nB+1;j++){tempP+=YG[i][j]*u[j][1]-YB[i][j]*u[j][0]; tempQ+=YG[i][j]*u[j][0]+YB[i][j]*u[j][1];}P[i]=tempP*u[i][1]+tempQ*u[i][0];Q[i]=tempP*u[i][0]-tempQ*u[i][1];}for(i=1;i<nB+1;i++)printf("节点%d注入功率为%lf,%lf\n",i,P[i],Q[i]);/* 支路功率 */double V[4][2];for(i=1;i<5;i++)for(j=0;j<3;j++)V[i][j]=u[i][j];double sP[5][5],sQ[5][5];double dsq,dsp,dp,sumgen;for(i=1;i<NBUS+1;i++){for(j=1;j<NBUS+1;j++){sP[i][j]=0.0;sQ[i][j]=0.0;}}for(l=0; l<nL; l++){i=sL[l].NumI;j=sL[l].NumJ;r=sL[l].R;x=sL[l].X;d1=r*r+x*x;if(fabs(sL[l].K-1.0)<0.000001){/*Normal lines or transformers*/sP[i][j]=V[i][1]*V[i][1]*g-V[i][1]*V[j][1]*(g*cos(V[i][0]-V[j][0])+b*sin(V[i][0]-V[j][0]));sQ[i][j]=-(V[i][1]*V[i][1]*sL[l].B+V[i][1]*V[i][1]*b+V[i][1]*V[j][1]*(g*sin(V[i][0]-V[j][0])-b*cos(V[i ][0]-V[j][0])));sP[j][i]=V[j][1]*V[j][1]*g-V[i][1]*V[j][1]*(g*cos(V[j][0]-V[i][0])+b*sin(V[j][0]-V[i][0]));sQ[j][i]=-(V[j][1]*V[j][1]*sL[l].B+V[j][1]*V[j][1]*b+V[i][1]*V[j][1]*(g*sin(V[j][0]-V[i][0])-b*cos(V[j ][0]-V[i][0])));}else{/*abnormal transformer ratio*/sP[i][j]=V[i][1]*V[i][1]*g/sL[l].B/sL[l].B-V[i][1]*V[j][1]*(g*cos(V[i][0]-V[j][0])/sL[l].B+b*sin(V[i][ 0]-V[j][0])/sL[l].B);sQ[i][j]=-(V[i][1]*V[i][1]*b/sL[l].B/sL[l].B+V[i][1]*V[j][1]*(g*sin(V[i][0]-V[j][0])/sL[l].B-b*cos(V[i ][0]-V[j][0])/sL[l].B));sP[j][i]=V[j][1]*V[j][1]*g-V[i][1]*V[j][1]*(g*cos(V[j][0]-V[i][0])/sL[l].B+b*sin(V[j][0]-V[i][0])/sL[l ].B);sQ[j][i]=-(V[i][1]*V[i][1]*b+V[i][1]*V[j][1]*(g*sin(V[j][0]-V[i][0])/sL[l].B-b*cos(V[j][0]-V[i][0])/sL [l].B));}}/* 输电效率 */dsp=P[4];sumgen=P[4];for(i=0;i<NBUS;i++){dsp+=sB[i].GenP-sB[i].LoadP;dsq+=sB[i].GenQ-sB[i].LoadQ;sumgen+=sB[i].GenP;}dp=dsp/sumgen*100;/* 输出功率情况 */if((fp=fopen("功率情况.txt","w"))==NULL){printf("Can not open the file named '功率情况.txt' \n");exit(0);}fprintf(fp,"---功率情况---\n");fprintf(fp,"平衡节点功率S=%10.5f+ j%10.5f\n",P[4],Q[4]);for(i=1;i<NBUS+1;i++)for(j=1;j<NBUS+1;j++)if(fabs(sP[i][j]-0.0)>0.000001)fprintf(fp,"S(%3d,%-3d)=(%10.5f,j%10.5f)\n",i,j,sP[i][j],sQ[i][j]); fprintf(fp,"网损为%10.5f+j%10.3f,输电效率为%10.3f\n",dsp,dsq,100-dp);if(fp!=NULL) fclose(fp);return 0;}结果:1.导纳阵Y( 1,1 )=( 1.01534, -8.19201) Y( 1,2 )=( -0.56148, 2.30208) Y( 1,3 )=( 0.00000, 3.66667) Y( 1,4 )=( -0.45386, 1.89107) Y( 2,1 )=( -0.56148, 2.30208) Y( 2,2 )=( 1.04225, -4.67651) Y( 2,4 )=( -0.48077, 2.40385) Y( 3,1 )=( 0.00000, 3.66667) Y( 3,3 )=( 0.00000, -3.33333) Y( 4,1 )=( -0.45386, 1.89107) Y( 4,2 )=( -0.48077, 2.40385) Y( 4,4 )=( 0.93463, -4.26159)2.设定电压初值01.1;01;01)0(3)0(3)0(2)0(2)0(1)0(1j jf e j jf e j jf e +=++=++=+ 3.计算功率和电压偏移;27731.0])()([41)0(11)0(1)0(141)0(11)0(1)0(11)0(11)0(1-=++--=-=∆∑∑==j j j j j j jj s s e B f G ff B eG e P P P P0.05097])()([41)0(11)0(1)0(141)0(11)0(1)0(11)0(11)0(1-=----=-=∆∑∑==jj j j jj jj s s e B f G ef B e G f Q Q Q Q同理可算出52596.0)0(22)0(2-=-=∆P P P s ,0196.0)0(22)0(2=-=∆Q Q Q s 5.0)0(33)0(3=-=∆P P P s ,0.02)0(3232)0(3=-=∆U U U s 4.根据求的第一次迭代时雅可比矩阵各元素的公式计算雅可比矩阵各个元素的具体值:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤-----------⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡20000.200066667.300003334.40052691.406629.130208.256148.00001821.182612.456148.030208.266667.3030208.256148.006298.803803.1066667.356148.030208.299265.032104.85.求高斯计算后的修正量:⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∆∆∆∆∆∆=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∆∆∆∆∆∆-0.0000000.1276520.023566-0.108546-0.006511-0.007919-2)0(3)0(3)0(2)0(2)0(1)0(11)0()0(3)0(3)0(2)0(2)0(1)0(1U P Q P Q P e f e f e f J 6.计算各节点电压的一次近似值:12765.010855.000792.010000.197643.099349.0)0(3)0(3)1(3)0(2)0(2)1(2)0(1)0(1)1(1)0(3)0(3)1(3)0(2)0(2)1(2)0(1)0(1)1(1=∆+=-=∆+=-=∆+==∆+==∆+==∆+=f f f f f f fffe e e e e e e e e返回第三步重新迭代,并校验收敛与否,令410-=ε。
极坐标潮流计算范文
极坐标潮流计算范文极坐标潮流计算是一种电力系统潮流计算的方法,它将电力系统中的节点和支路都用极坐标表示,利用复数计算的方法进行潮流计算。
这种方法主要适用于高压长距离传输线路和负荷较多的系统。
本文将详细介绍极坐标潮流计算的方法和步骤,并结合实例进行分析讲解。
一、极坐标潮流计算的基本原理极坐标潮流计算是基于复数计算的方法,它将电力系统中的节点和支路都用复数形式表示。
复数形式的节点电压和支路阻抗可以方便地进行计算,利用复数的计算规则可以得到支路电流和节点功率的结果。
极坐标潮流计算的基本原理可以概括为以下几点:1.节点功率平衡:节点注入功率等于节点消耗功率和输送功率的总和。
2.支路功率计算:根据节点电压和支路阻抗,可以计算得到支路电流和功率。
3.节点电压计算:根据节点注入功率、节点消耗功率和支路功率,可以利用功率平衡方程得到节点电压。
4.支路电流计算:根据节点电压和支路阻抗,可以利用欧姆定律计算得到支路电流。
二、极坐标潮流计算的步骤1.获取输入数据:包括节点注入功率、节点消耗功率和支路阻抗。
2.初始化节点电压:假设初始节点电压,并将节点注入功率、节点消耗功率和支路功率保存在容器中。
3.迭代计算节点电压和支路电流:根据节点注入功率、节点消耗功率和支路电流的计算公式,进行迭代计算,直到收敛。
4.输出结果:输出计算得到的节点电压、支路电流和支路功率等结果。
三、实例分析下面我们以一个例子来说明极坐标潮流计算的具体步骤。
假设电力系统有3个节点(节点1、节点2和节点3)和两条支路(支路12和支路23),节点1的注入功率为100+j50千伏安,节点2的注入功率为200+j100千伏安,节点3的注入功率为150+j75千伏安,节点1的消耗功率为150+j100千伏安,节点2的消耗功率为100+j50千伏安,支路12的阻抗为(0.1+j0.2)标幺,支路23的阻抗为(0.05+j0.1)标幺。
1.初始化节点电压:假设节点1的电压为1∠0度,其他节点的电压为0∠0度。
电力系统潮流上机设计教学指导书
电力零售仿真实验教学指导书一、综合实验的概述1.目的:培养学生对电力销售环节的分析能力,把握电力零售的相关知识。
2.使用的工具:零售市场仿真实验软件3.全然要求:把握电力销售环节的交易模型;销售电价的分类;电费计算;分析不同负荷特性的电力用户执行不同电价类不的差异。
4.考核方法:总成绩=出勤情况+设计报告+面试成绩5.参考教材:区域电力市场电价机制张粒子、郑华北京:中国电力出版社,2004二、综合实验的要求1.依据各类用户负荷数据,把握用户负荷特性分析方法。
2.把握销售电价中的电价结构。
3.把握各类电价制度的电费结算模型。
4.把握各类电价制度的特点、适用的用户范围。
5.对EXCEL的把握:翻开文件、维持文件、另存文件;读取计算数据;制作分析表格;依据分析数据制作展示图。
三、综合实验的内容实验一:电力用户负荷特性分析〔一〕根底理论知识预备:电力用户负荷特性1)电力用户用电负荷曲曲折折曲曲折折折折曲曲折折曲曲折折折折折折线:将电力用户的有功负荷,按时刻序列绘制成的图形,称为负荷曲曲折折曲曲折折折折曲曲折折曲曲折折折折折折线。
(1) 日负荷曲曲折折曲曲折折折折曲曲折折曲曲折折折折折折线:标示出一天内每小时〔每半小时、每15分钟〕的负荷值,反映一天内负荷动态。
(2) 年负荷曲曲折折曲曲折折折折曲曲折折曲曲折折折折折折线:标示出一年内每月的最高负荷值,反映一年内各月负荷动态。
2)要紧的负荷特性指标及计算(1) 最高负荷:报告期〔日、月、季、年〕内记录的负荷中,数值最大的一个。
(2) 最低负荷:报告期〔日、月、季、年〕内记录的负荷中,数值最小的一个。
(3) 平均负荷:报告期内瞬间负荷的平均值,即负荷时刻数列时序平均数。
(4) 负荷率:平均负荷与最高负荷的比率。
负荷率〔%〕=⨯)k k W W 报告期最高负荷()报告期平均负荷(100% (5) 最小负荷率:报告期最低负荷与最高负荷的比率。
最小负荷率〔%〕=⨯)报告期最高负荷()报告期最低负荷(W W k k 100%(6) 峰谷差:最高负荷与最低负荷之差。
电力系统潮流上机 (2)剖析
头文件和命名空间的引用
根据C语言标准,所有类和函数都是使用头 文件进行定义和说明的。在程序的开始需 要加入必需的头文件(.h)。C++类库还增 加了命名空间(namespace),程序所用到的 大多数类都包含在“std”命名空间中,这 些都需要在程序中加以说明。
文件输入输出程序测试
• 文件输入输出命令推荐采 用fstream的标准类库方式。 ifstream infile; ofstream outfile;
• ifstream与ofstream的程序 测试,如右图:
解方程程序测试
这一部分主要掌握如何添加头 文件,并在主程序中学会调用。 添加头文件:打开在F盘下所建 的以学号命名的文件夹 “1061181324”->打开 “TEST”文件下->再打开 “TEST”文件->将已建好的头 文件复制粘贴,(在这次潮流 上机中可使用老师编好的头文 件“NEquation.h”) 再回到C++主程序界面,在 “解决方案管理器窗口”处右 击“头文件”->添加->现有项>NEquation.h->确定:
printf函数的使用
点击“调试”->开始 调试(不执行)即可 输出运行结果。(快 捷键是Ctrl+F5)
iostream类的使用
在C语言中,用printf和scanf进行输入输出,通过 以前的学习,我们知道用这两个函数进行输入输 出时,必须指明输出和输入的数据的格式和类型 (如,“%d”表示整型,“%f”表示浮点型。) 这不仅使编程繁琐复杂,而且还容易出错。C++ 为了和C兼容,保留了printf和scanf函数,但C++ 通过提供I/O类库来实现丰富的I/O功能。iostream 是C++种提供的用于输入输出的类库,意为输入 输出流。 常用到的命令语句有以下: cin>>a: 把一个数输入给变量a; cout<<a: 把变量a的值输出;
电力系统潮流上机计算
设电压初值
在data.txt文件中有电压初值 文件中有电压初值 注意是极坐标还是直角坐标 如果是极坐标, 如果是极坐标,注意角度和弧度
求功率不平衡量
GetUnbalance() 将教材上的公式转为计算机语言
注意循环语句 计算机中乘法是有符号的 判断节点类型
PQ节点求有功,无功不平衡量 节点求有功, 节点求有功 PV节点求有功,电压不平衡量 节点求有功, 节点求有功 思考:为什么不求平衡节点的不平衡量? 思考:为什么不求平衡节点的不平衡量?
程序中如何使用原始数据
1.在config.h中创建结构体 在 中创建结构体 2.打开 打开data.txt文件,注意文件路径不要写错 文件, 打开 文件 3.指针指向 指针指向data.txt文件的开头 指针指向 文件的开头 4.取出该数据,保存在结构体里 取出该数据, 取出该数据 5.关闭 关闭data.txt文件 关闭 文件
形成节点导纳矩阵
利用支路数据:节点之间的连接关系, 利用支路数据:节点之间的连接关系,支路 的阻抗和导纳,支路类型. 的阻抗和导纳,支路类型. 计算的过程中使用数组
gY_G[Bus_Num][Bus_Num], gY_B[Bus_Num][Bus_Num]
计算结束,将导纳矩阵保存在 计算结束,将导纳矩阵保存在ymatrix.txt 如果用P-Q分解法,还要求 矩阵 分解法, 如果用 分解法 还要求B矩阵
计算雅可比矩阵
GetJaccobi() 将教材上的公式转为计算机语言
要判断节点类型 要判断节点号i与 是否相等 要判断节点号 与j是否相等
解修正方程式
修正方程式就是线性方程组: 这里A和 已知 已知, 修正方程式就是线性方程组:AX=B,这里 和B已知, 这里 如何求解X 如何求解 不用矩阵求逆,用高斯消去法,写在文件中 不用矩阵求逆,用高斯消去法,写在文件中 NEquation.h ,读不懂这个程序没关系,会使用就 读不懂这个程序没关系, 行 如何使用NEquation.h,看test() 如何使用 ,
华北电力大学电力系统分析1-07
(四)简化梯度最优潮流算法的分析
为此许多文献提出了改进算法,如在求无约束 极小点的搜索方向上,提出采用共轭梯度及拟 牛顿方向。 另外,该算法每次迭代用牛顿法计算潮流,耗 时很多,为此提出可用快速解耦法进行计算。
L(u, x) f (u, x) λT g(u, x)
(一)仅有等式约束条件时的算法
采用经典的函数求极值的方法,将L分别对变量 x, u及λ求导并令其等于零,即得到极值所满足 的必要条件为
L f g λ 0 x x x
T T
L f g λ 0 最优潮流的解必须同 u u u 时满足这三组方程。 L g(u, x )=0 联立求解这三个极值条件方程 λ 组,可以求得问题的最优解。
(一)仅有等式约束条件时的算法
(5) 将求得的x, u及λ代入式(1-195),则有
L f g u u u
T
L 0 ,则说明这组解是待求的最优解,计算 u 结束。否则,转入下一步;
g x
T
f x
L f g λ 0 x x x T L f g λ 0 u u u L g(u, x )=0 λ
T
g λ x
T
f x
1
(1-197)
二、最优潮流计算的简化梯度算法
最优潮流计算的简化梯度算法在最优潮流领域 内具有重要的地位,是最优潮流问题被提出后 能够成功地求解较大规模的最优潮流问题并被 广泛采用的第一个算法,它直到现在,仍然还 被看成是一种成功的算法而加以引用。 最优潮流计算的简化梯度算法以极坐标形式的 牛顿潮流算法为基础。
华电潮流上机课程设计报告程序..doc
院系:电气与电子工程学院班级:学号:学生姓名:指导教师:刘宝柱设计周数:成绩:日期:2012年1月5日课程课程设计报告一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细内容见附录)1.手算2.计算机计算3.思考题3.1潮流计算的方法有哪些?各有何特点?答:潮流计算的方法主要有高斯-赛德尔迭代法、牛顿-拉夫逊迭代法和P-Q分解法。
它们各自的特点如下:(1)高斯-赛德尔迭代法分为以节点导纳矩阵为基础的高斯-赛德尔迭代法和以以节点阻抗矩阵为基础的高斯-赛德尔迭代法的原理比较简单,要求的数字计算机的内存量也比较小,但收敛性差,当系统规模变大时,迭代次数急剧上升,往往出现迭代不收敛的情况;而阻抗法改善了电力系统潮流计算导纳法德收敛性问题,在当时获得了广泛的应用,但是,阻抗法的主要缺点是占用计算机的内存很大,每次迭代的计算量很大。
当系统不断扩大时,这些缺点就更加突出。
(2)牛顿-拉夫逊法是数学中求解非线性方程式的典型方法,有较好的收敛性。
只要在迭代过程中尽可能保持方程式系数矩阵的稀疏性,就可以大大提高牛顿潮流计算程序的计算效率,牛顿法在收敛性、内存要求、计算速度方面都超过了阻抗法,成为知道目前仍被广泛采用的方法。
(3)P-Q分解法潮流计算派生于以极坐标表示时的牛顿-拉夫逊法,它根据电力系统的特点,抓住主要矛盾,对纯数学的牛顿法进行了改造。
与牛顿法相比,P-Q分解法的修正方程的系数矩阵B’和B”分别是(n-1)和(m-1)的方阵,替代了原有的(n+m-2)阶系数矩阵J;B’、B”在迭代过程中可以保持不变且为对称的系数矩阵,提高了计算速度,降低了对存储容量的要求。
P-Q分解法在计算速度方面有显著地提高,迅速得到了推广。
3.2如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析)答:(1)在进行北京城市电网的潮流计算之前需要了解北京城市电网中所有的节点支路的相关数据,并对节点和支路分类。
潮流上机课程设计报告华电
《电力系统潮流上机》课程设计报告院系班级:学号:学生姓名:指导教师:设计周数成绩:日期:年月日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细内容见附录)1.手算: 要求应用牛顿-拉夫逊法或P-Q 分解法手算求解,要求精度为0.001MW 。
节点1为平衡节点,电压︒∠=00.11U ,节点2为PQ 节点,负荷功率6.08.0~2j S +=,节点3是PV 节点,1.1,4.033==U P ,两条支路分别为04.001.013j Z +=,2.005.012j Z +=,对地支路33.030j y =。
2.计算机计算:编写潮流计算程序,要求如下:2.1据给定的潮流计算任务书整理潮流计算的基础数据:节点的分类,线路模型,等值变压器模型,电压等级的归算,标幺值的计算;2.2基础数据的计算机存储:节点数据,支路数据(包括变压器); 2.3用牛顿-拉夫逊法计算;2.4根据所选潮流计算方法画流程图,划分出功能模块,有数据输入模块,导纳阵形成模块,解线性方程组模块,计算不平衡功率模块,形成雅可比矩阵模块,解修正方程模块,计算线路潮流,网损,PV 节点无功功率和平衡节点功率,数据输出模块; 2.5据上述模块编制程序并上机调试程序,得出潮流计算结果; 2.6源程序及其程序中的符号说明集、程序流图简单系统如下图所示,支路数据如下:41.01.012j z +=,3.013j z =,5.012.014j z +=,40.008.024j z +=01528.01,202,10j y y ==,0192.01,404,10j y y ==,01413.02,404,20j y y ==1.1=k节点数据如下:18.030.01j S --= ,13.055.02j S --= , 5.03=S ,10.13=U ,o U 005.14∠= 32S 1S 4S 4,10y 1,40y 2,10y 1,20y 4,20y 2,40y 12z 24z 14z k)1(13-k k z kz -1131)节点导纳阵#include <stdio.h> #include <math.h> #include <fstream.h> #include "LF.h"//form node conductance matrixintMakeY( intnB, intnL, Line* sL, double** YG, double** YB ) {inti,j,l;double r,x,d1,g,b,t;for(i=0;i<nB;i++)for(j=0;j<nB;j++){ YG[i][j]=0.0;YB[i][j]=0.0;}for(i=0;i<nL;i++){r=sL[i].R;x=sL[i].X;g=r/(r*r+x*x);b=-x/(r*r+x*x);switch(sL[i].Type){case 1://Linebreak;case 2://Transformerg*=1/sL[i].K;b*=1/sL[i].K;break;}YG[sL[i].NumI][sL[i].NumI]+=g;YG[sL[i].NumJ][sL[i].NumJ]+=g;YG[sL[i].NumI][sL[i].NumJ]-=g;YG[sL[i].NumJ][sL[i].NumI]-=g;YB[sL[i].NumI][sL[i].NumI]+=b+sL[i].B;YB[sL[i].NumJ][sL[i].NumJ]+=b+sL[i].B;YB[sL[i].NumI][sL[i].NumJ]-=b;YB[sL[i].NumJ][sL[i].NumI]-=b; }printf("实部:\n");for(i=0;i<nB;i++){for(j=0;j<nB;j++)printf("%lf\t",YG[i][j]);printf("\n");}printf("虚部:\n");for(i=0;i<nB;i++){for(j=0;j<nB;j++)printf("%lf\t",YB[i][j]);printf("\n");}/* Check the Y matrix */ofstreamfout("out.txt");fout<< "--------------Y Matrix--------------------" <<endl;for(i=0;i<nB;i++){for(j=0;j<nB;j++)fout<< YG[i][j] << "+j" << YB[i][j] << "\t";fout<<endl;}fout.close();return 0;}2)计算功率不平衡量#include <stdio.h>#include <math.h>#include <fstream.h>#include "LF.h"//form delta p and delta qintCalDeltaPQ( intnpv, intnpq, Bus* bus, double** YG, double** YB, int* p_Jtobus, double* deltaf ){intk,i,j;for(k=0;k<npv+npq*2;k++){ i=p_Jtobus[k];if(k<npv){ deltaf[k]=bus[i].GenP-bus[i].LoadP;for(j=0;j<npv+npq+1;j++){deltaf[k]-=bus[i].Volt*bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j ]*sin(bus[i].Phase-bus[j].Phase));}printf("PV节点%d的有功功率是%lf\n",i,deltaf[k]);}if(k<npq+npv&&k>=npv){ deltaf[k]=bus[i].GenP-bus[i].LoadP;for(j=0;j<npv+npq+1;j++){deltaf[k]-=bus[i].Volt*bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j ]*sin(bus[i].Phase-bus[j].Phase));}printf("PQ节点%d的有功功率是%lf\n",i,deltaf[k]);}if(k<npq*2+npv&&k>=npv+npq){deltaf[k]=bus[i].GenQ-bus[i].LoadQ;for(j=0;j<npv+npq+1;j++){deltaf[k]-=bus[i].Volt*bus[j].Volt*(YG[i][j]*sin(bus[i].Phase-bus[j].Phase)-YB[i][j ]*cos(bus[i].Phase-bus[j].Phase));}printf("PQ节点%d的无功功率是 %lf\n",i,deltaf[k]);}}return 0;}3)雅各比矩阵的计算/*Purpose: for undergraduate courseTask: Load FlowCopyright @ NCEPU, Liu Chongru*/#include <stdio.h>#include <math.h>#include <fstream.h>#include "LF.h"//form Jacobian matrixintFormJacobian( intnpv, intnpq, Bus* bus, double** YG, double** YB, int* p_Jtobus, double** Jac ){ intnp = npv+npq,j,k,i,m;//TODOdouble a[14],q[14];for(k=0;k<npv+npq*2;k++){i=p_Jtobus[k];a[i]=0;q[i]=0;if(k<np)//H N{for(j=0;j<np+1;j++)if(j!=i){a[i]+=bus[j].Volt*(YG[i][j]*sin(bus[i].Phase-bus[j].Phase)-YB[i][j]*cos(bus[i].Phase-bu s[j].Phase));q[i]+=bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j]*sin(bus[i].Phase-bu s[j].Phase));}for(m=0;m<npv+npq*2;m++){j=p_Jtobus[m];if(j!=i){if(m<np)Jac[k][m]=bus[i].Volt*bus[j].Volt*(YG[i][j]*sin(bus[i].Phase-bus[j].Phase)-YB[i][j]*cos (bus[i].Phase-bus[j].Phase));//Form HelseJac[k][m]=bus[i].Volt*bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j]*sin (bus[i].Phase-bus[j].Phase));//Form N}else if(j==i){if(m<np)Jac[k][m]=-bus[i].Volt*a[i];//Form HelseJac[k][m]=bus[i].Volt*q[i]+2*bus[i].Volt*bus[i].Volt*YG[i][j];//Form N}}}else{for(j=0;j<np+1;j++)if(j!=i){a[i]+=bus[j].Volt*(YG[i][j]*sin(bus[i].Phase-bus[j].Phase)-YB[i][j]*cos(bus[i].Phase-bu s[j].Phase));q[i]+=bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j]*sin(bus[i].Phase-bu s[j].Phase));}for(m=0;m<npv+npq*2;m++){j=p_Jtobus[m];if(j!=i){if(m<np)Jac[k][m]=-bus[i].Volt*bus[j].Volt*(YG[i][j]*cos(bus[i].Phase-bus[j].Phase)+YB[i][j]*si n(bus[i].Phase-bus[j].Phase)); //Form JelseJac[k][m]=bus[i].Volt*bus[j].Volt*(YG[i][j]*sin(bus[i].Phase-bus[j].Phase)-YB[i][j] *cos(bus[i].Phase-bus[j].Phase)); //Form L }else if(j==i){ if(m<np)Jac[k][m]=bus[i].Volt*q[i];elseJac[k][m]=bus[i].Volt*a[i]-2*bus[i].Volt*bus[i].Volt*YB[i][j];} }}}for(i=0;i<np+npq;i++){for(int j=0;j<np+npq;j++){printf("%d %d %f ",i,j,Jac[i][j]);}printf("\n");}//Output the matrix to check the Jacobian matrixofstreamfout("out.txt",ios::app);fout<< "--------------Jacobian Matrix--------------------" <<endl;for(i=0; i<np+npq;i++ ){for(j=0; j<np+npq; j++ )fout<<Jac[i][j] << "\t";fout<<endl;}fout.close();return 0;}4)线路损耗//8.calculate the power flowdouble* p_Pij, *p_Qij, *p_Pji, *p_Qji;p_Pij = new double[nL];p_Qij = new double[nL];p_Pji = new double[nL];p_Qji = new double[nL];int x1,x2;for( i=0; i<nL; i++ ){ x1=line[i].NumI;x2=line[i].NumJ;if(line[i].Type==1){p_Pij[i]=bus[x1].Volt*bus[x1].Volt*(-YG[x1][x2])-bus[x1].Volt*bus[x2].Volt*((-YG[x1][x2 ])*cos(bus[x1].Phase-bus[x2].Phase)+(-YB[x1][x2])*sin(bus[x1].Phase-bus[x2].Phase));p_Qij[i]=-bus[x1].Volt*bus[x1].Volt*(line[i].B+(-YB[x1][x2]))-bus[x1].Volt*bus[x2]. Volt*((-YG[x1][x2])*sin(bus[x1].Phase-bus[x2].Phase)-(-YB[x1][x2])*cos(bus[x1].Phase-bu s[x2].Phase));p_Pji[i]=bus[x2].Volt*bus[x2].Volt*(-YG[x2][x1])-bus[x2].Volt*bus[x1].Volt*((-YG[x2][x1 ])*cos(bus[x2].Phase-bus[x1].Phase)+(-YB[x2][x1])*sin(bus[x2].Phase-bus[x1].Phase));p_Qji[i]=-bus[x2].Volt*bus[x2].Volt*(line[i].B+(-YB[x2][x1]))-bus[x2].Volt*bus[x1]. Volt*((-YG[x2][x1])*sin(bus[x2].Phase-bus[x1].Phase)-(-YB[x2][x1])*cos(bus[x2].Phase-bu s[x1].Phase));}else{p_Pij[i]=bus[x1].Volt*bus[x1].Volt*(-YG[x1][x2])/line[i].K-bus[x1].Volt*bus[x2].Vol t*((-YG[x1][x2])*cos(bus[x1].Phase-bus[x2].Phase)+(-YB[x1][x2])*sin(bus[x1].Phase-bus[x 2].Phase));p_Qij[i]=-bus[x1].Volt*bus[x1].Volt*((-YB[x1][x2])/line[i].K+line[i].B)-bus[x1].Volt*bu s[x2].Volt*((-YG[x1][x2])*sin(bus[x1].Phase-bus[x2].Phase)-(-YB[x1][x2])*cos(bus[x1].Ph ase-bus[x2].Phase));p_Pji[i]=bus[x2].Volt*bus[x2].Volt*(-YG[x2][x1]*line[i].K)-bus[x2].Volt*bus[x1].Volt*(( -YG[x2][x1])*cos(bus[x2].Phase-bus[x1].Phase)+(-YB[x2][x1])*sin(bus[x2].Phase-bus[x1].P hase));p_Qji[i]=-bus[x2].Volt*bus[x2].Volt*((-YB[x2][x1])*line[i].K+line[i].B)-bus[x2].Volt*bu s[x1].Volt*((-YG[x2][x1])*sin(bus[x2].Phase-bus[x1].Phase)-(-YB[x2][x1])*cos(bus[x2].Ph ase-bus[x1].Phase));}}//p and q of PH bus and PV busint s=0;double p[9],q[9],Ps[9],Qs[9],PS=0,QS=0;for( i=0; i<nB; i++ ){p[i]=0;q[i]=0;for(int j=0; j<nB; j++ ){p[i]+=(bus[j].Volt*(YG[i][j])*cos(bus[j].Phase)-bus[j].Volt*(YB[i][j])*sin(bus[j].Phas e));q[i]-=(bus[j].Volt*(YG[i][j])*sin(bus[j].Phase)+bus[j].Volt*(YB[i][j])*cos(bus[j].Phase ));}Ps[i]=bus[i].Volt*cos(bus[i].Phase)*p[i]-bus[i].Volt*sin(bus[i].Phase)*q[i]; Qs[i]=bus[i].Volt*cos(bus[i].Phase)*q[i]+bus[i].Volt*sin(bus[i].Phase)*p[i];} for(i=0;i<nB;i++){ PS+=Ps[i];QS+=Qs[i];}printf("PS=%7.7f,QS=%7.7f\n",PS,QS);}//lossdoublePloss=0, Qloss=0;for( i=0; i<nB; i++ ){Ploss+=p_Pij[i]+p_Pji[i];Qloss+=p_Qij[i]+p_Qji[i];}5)程序流图如下6)得到的数据(out.txt )输入原始数据形成节点导纳矩阵设非平衡节点电压初值)0(i e ;)0(i f令迭代次数k=0对PQ 节点计算)()(.k i k i Q P ∆∆对PV 节点计算)(2)(,k i k iU P ∆∆令节点号i=1计算雅客比矩阵各元素)()()()()()(,,,,,k ijk ij k ij k ij k ij k ij S R L J N H 增加节点号i=i+1解修正方程,由)()(.k i k i Q P ∆∆)(2k i U ∆及雅客比矩阵用高斯法求各节点的电压增量)()(,k ik if e∆∆求出max)(max)(,k k f e ∆∆迭代是否收敛ε<∆∆max)(max)(,k k f e 雅客比矩阵是否形成,i>n?计算节点的新电压)()()1(k i k i k i e e e ∆+=+ )()()1(k i k i k i f f f ∆+=+增加迭代次数k=k+1计算平衡节点的功率及线路功率停止启动--------------Y Matrix--------------------0+j-17.3611 0+j0 0+j0 0+j17.3611 0+j0 0+j0 0+j0 0+j0 0+j00+j0 0+j-16 0+j0 0+j0 0+j0 0+j0 0+j16 0+j0 0+j00+j0 0+j0 0+j-17.0648 0+j0 0+j0 0+j0 0+j0 0+j0 0+j17.06480+j17.3611 0+j0 0+j0 3.30738+j-39.3089 -1.36519+j11.6041 -1.94219+j10.5107 0+j0 0+j0 0+j00+j0 0+j0 0+j0 -1.36519+j11.6041 2.55279+j-17.3382 0+j0 -1.1876+j5.97513 0+j0 0+j00+j0 0+j0 0+j0 -1.94219+j10.5107 0+j0 3.2242+j-15.8409 0+j0 0+j0 -1.28201+j5.588240+j0 0+j16 0+j0 0+j0 -1.1876+j5.97513 0+j0 2.80473+j-35.4456 -1.61712+j13.698 0+j00+j0 0+j0 0+j0 0+j0 0+j0 0+j0 -1.61712+j13.698 2.77221+j-23.3032 -1.15509+j9.784270+j0 0+j0 0+j17.0648 0+j0 0+j0 -1.28201+j5.58824 0+j0 -1.15509+j9.78427 2.4371+j-32.1539--------------Jacobian Matrix--------------------16.4 0 0 0 0 -16.4 0 0 0 0 0 0 0 00 17.4915 0 0 0 0 0 -17.4915 0 0 0 0 0 00 0 40.1703 -11.6041 -10.5107 0 0 0 3.30738 -1.36519 -1.94219 0 0 00 0 -11.6041 17.5792 0 -5.97513 0 0 -1.36519 2.55279 0 -1.1876 0 00 0 -10.5107 0 16.0989 0 0 -5.58824 -1.94219 0 3.2242 0 0 -1.28201-16.4 0 0 -5.97513 0 36.0731 -13.698 0 0 -1.1876 0 2.80473 -1.61712 00 0 0 0 0 -13.698 23.4822 -9.78427 0 0 0 -1.61712 2.77221 -1.155090 -17.4915 0 0 -5.58824 0 -9.78427 32.864 0 0 -1.28201 0 -1.15509 2.43710 0 -3.30738 1.36519 1.94219 0 0 0 38.4474 -11.6041 -10.5107 0 0 00 0 1.36519 -2.55279 0 1.1876 0 0 -11.6041 17.0972 0 -5.97513 0 00 0 1.94219 0 -3.2242 0 0 1.28201 -10.5107 0 15.5829 0 0 -5.588240 0 0 1.1876 0 -2.80473 1.61712 0 0 -5.97513 0 34.8181 -13.698 00 0 0 0 0 1.61712 -2.77221 1.15509 0 0 0 -13.698 23.1242 -9.784270 0 0 0 1.28201 0 1.15509 -2.4371 0 0 -5.58824 0 -9.78427 31.4437--------------Jacobian Matrix--------------------16.9269 0 0 0 0 -16.9269 0 0 0 0 0 1.68793 0 00 18.1691 0 0 0 0 0 -18.1691 0 0 0 0 0 0.8836270 0 41.9297 -12.1301 -11.1536 0 0 0 3.54272 -1.0628 -1.76646 0 0 00 0 -12.0455 18.0609 0 -6.01539 0 0 -1.78138 1.30819 0 -2.10262 0 00 0 -11.0484 0 16.8144 0 0 -5.76607 -2.33608 0 2.42598 0 0 -1.97778-16.9269 0 0 -6.36224 0 37.9476 -14.6585 0 0 -0.357534 0 3.05959 -0.930027 00 0 0 0 0 -14.4721 24.8873 -10.4152 0 0 0 -2.509 1.86088 -1.473890 -18.1691 0 0 -6.05157 0 -10.4721 34.6928 0 0 -0.733327 0 -0.9919732.66270 0 -3.52149 1.0628 1.76646 0 0 0 42.0299 -12.1301 -11.1536 0 0 00 0 1.78138 -3.884 0 2.10262 0 0 -12.0455 17.2037 0 -6.01539 0 00 0 2.33608 0 -4.31386 0 0 1.97778 -11.0484 0 16.2993 0 0 -5.766071.68793 0 0 0.357534 0 -2.97549 0.930027 0 0 -6.36224 0 38.3226 -14.6585 00 0 0 0 0 2.509 -3.98289 1.47389 0 0 0 -14.4721 24.2355 -10.41520 0.883627 0 0 0.733327 0 0.991973 -2.60893 0 0 -6.05157 0 -10.4721 34.8585 --------------Jacobian Matrix--------------------16.7457 0 0 0 0 -16.7457 0 0 0 0 0 1.63043 0 00 18.0388 0 0 0 0 0 -18.0388 0 0 0 0 0 0.8501960 0 41.3695 -11.8919 -10.9686 0 0 0 3.48069 -1.02775 -1.73712 0 0 00 0 -11.8057 17.6918 0 -5.8861 0 0 -1.7602 1.28091 0 -2.0217 0 00 0 -10.8651 0 16.5476 0 0 -5.68251 -2.29737 0 2.40655 0 0 -1.91027-16.7457 0 0 -6.21183 0 37.3041 -14.3465 0 0 -0.382862 0 2.95313 -0.937485 00 0 0 0 0 -14.1704 24.4052 -10.2348 0 0 0 -2.42909 1.86079 -1.433530 -18.0388 0 0 -5.94693 0 -10.2872 34.273 0 0 -0.757656 0 -0.9892082.598470 0 -3.48089 1.02775 1.73712 0 0 0 41.3703 -11.8919 -10.9686 0 0 00 0 1.7602 -3.78189 0 2.0217 0 0 -11.8057 16.6941 0 -5.8861 0 00 0 2.29737 0 -4.20764 0 0 1.91027 -10.8651 0 15.9488 0 0 -5.682511.63043 0 0 0.382862 0 -2.95077 0.937485 0 0 -6.21183 0 37.3083 -14.3465 00 0 0 0 0 2.42909 -3.86262 1.43353 0 0 0 -14.1704 23.7059 -10.23480 0.850196 0 0 0.757656 0 0.989208 -2.59706 0 0 -5.94693 0 -10.2872 34.2743 --------------Jacobian Matrix--------------------16.7435 0 0 0 0 -16.7435 0 0 0 0 0 1.63 0 00 18.0374 0 0 0 0 0 -18.0374 0 0 0 0 0 0.850 0 41.3625 -11.8888 -10.9664 0 0 0 3.48016 -1.02713 -1.73662 0 0 00 0 -11.8026 17.6871 0 -5.8845 0 0 -1.76008 1.28053 0 -2.02045 0 00 0 -10.8628 0 16.5444 0 0 -5.68158 -2.29703 0 2.40632 0 0 -1.90929-16.7435 0 0 -6.20987 0 37.296 -14.3426 0 0 -0.383399 0 2.95114 -0.937742 00 0 0 0 0 -14.1667 24.3994 -10.2326 0 0 0 -2.42794 1.86097 -1.433020 -18.0374 0 0 -5.94567 0 -10.285 34.2681 0 0 -0.758139 0 -0.9892032.597340 0 -3.48016 1.02713 1.73662 0 0 0 41.3625 -11.8888 -10.9664 0 0 00 0 1.76008 -3.78053 0 2.02045 0 0 -11.8026 16.6871 0 -5.8845 0 00 0 2.29703 0 -4.20632 0 0 1.90929 -10.8628 0 15.9444 0 0 -5.681581.63 0 0 0.383399 0 -2.95114 0.937742 0 0 -6.20987 0 37.296 -14.3426 00 0 0 0 0 2.42794 -3.86097 1.43302 0 0 0 -14.1667 23.6994 -10.23260 0.85 0 0 0.758139 0 0.989203 -2.59734 0 0 -5.94567 0 -10.285 34.2681--------------iteration---------------iteration = 4--------------voltage magnitude and angle--------------------1.04 0 01.025 0.161967 9.280011.025 0.0814153 4.664761.02579 -0.0386902 -2.216790.995631 -0.0696178 -3.988811.01265 -0.0643572 -3.68741.02577 0.064921 3.71971.01588 0.0126979 0.7275371.03235 0.0343257 1.96672-------------bus P and Q------------------1 0.71641 0.2704592 1.63 0.06653663 0.85 -0.1085974 0 05 -1.25 -0.56 -0.9 -0.37 0 08 -1 -0.359 0 0----------------line flow--------------------NUM------i-------j-----------begin------------end--------------1 4 1 -0.71641+j-0.239232 0.71641+j0.270462 7 2 -1.63+j0.0917816 1.63+j0.06653653 9 3 -0.85+j0.149553 0.85+j-0.1085974 7 8 0.763799+j-0.00797398 -0.759046+j-0.1070415 9 8 0.241834+j0.0311946 -0.240954+j-0.2429586 7 5 0.866201+j-0.0838079 -0.843202+j-0.1131287 9 6 0.608166+j-0.180748 -0.594627+j-0.1345668 5 4 -0.406798+j-0.386872 0.409373+j0.2289319 6 4 -0.305372+j-0.165433 0.307037+j0.0102993--------------------Ploss and Qloss-----------------Ploss = 0.0471901 Qloss = -0.9574833.思考题3.1潮流计算的方法有哪些?各有何特点?答:潮流计算分为手算和机算两大类,其中机算又有高斯-赛德尔迭代法、牛顿-拉夫逊迭代法、P-Q 分解法等算法。
华北电力大学潮流上机课程设计报告
课程设计报告( 2011-- 2012年度第一学期)名称:电力系统潮流上机院系:电气与电子工程学院班级:电管0902学号:1091140202 学生:指导教师:麻秀设计周数:两周成绩:日期:2011年1月6日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细容见附录)1、手算在此我们同样采取计算机计算这种方便快捷的方法。
具体的方法及结果见附录。
2、计算机计算通过计算机编程,我们可以很方便的求解出相关量,其具体计算方法及计算结果见附录。
3、思考题答案见附录。
三、课程设计总结或结论潮流计算是研究电力系统稳态运行的一种基本运算方法,通过对于潮流的计算,实现对潮流的控制,维护电力系统稳定,防止出现超过约束条件的情况,从而使电力系统免遭崩溃的危险。
最初求解电力系统潮流时大多是用手算,这种计算方法不但耗费时间长,精度差,而且对于大容量的电力系统无法做到很好的控制。
随着电力系统结构日趋复杂,计算量也越来越大,仅靠手算难以求解一些复杂网络的潮流。
计算机作为一种处理数据的工具,其计算速度快,准确率高,存储量大,因此它广泛的应用于大规模复杂化的电力系统网络中。
为了能使计算机能进行潮流计算,就必须编制相应的程序,使其能按照人们在程序中设定的计算流程一步一步的执行,直到计算结果达到要求的精度,得到最终想要的结果。
C语言是一种简单实用的语言,利用它进行程序设计可以大大提高电力系统潮流控制的自动化程度。
本次的潮流上机,就是要求我们利用C语言编程,进行计算机潮流计算。
这既是对我们电力系统潮流计算知识的考验,也是对我们C语言编程能力的考验。
是一次各种知识的交汇综合的运用。
通过这次潮流上机,我对电力系统潮流计算有了更深刻的认识,同时,我的C语言编程能力也得到了提高。
我明白了学习不能仅限于课本,还要做到“学以致用”的道理。
在这次潮流设计中,我遇到了由于多问题,其中既包括由于对潮流知识掌握不牢而导致的问题,也包括由于C语言编程能力有限而导致的问题。
华北电力大学潮流计算上机实验
《电力系统潮流上机》课程设计报告院系:电气与电子工程学院班级:电气1006学号学生姓名:指导教师:***设计周数:两周成绩:日期:2013 年1 月10 日一、 目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、 主要内容1. 手算.要求应用牛顿-拉夫逊法或P-Q 分解法手算求解,要求精度为0.001MW 。
节点1为平衡节点,电压︒∠=00.11U ,节点2为PQ 节点,负荷功率6.08.0~2j S +=,节点3是PV 节点,1.1,4.033==U P ,两条支路分别为04.001.013j Z +=,2.005.012j Z +=,对地支路33.030j y =。
2. 计算机计算(详见附录)3. 思考题3.1潮流计算的方法有哪些?各有何特点?答:潮流计算分为手算和机算两大类,其中机算又有高斯-赛德尔迭代法、牛顿-拉夫逊迭代法、P-Q 分解法等算法。
迭特点:手算求解潮流一般只用在简单的网络中,其计算量大,对于多节点的网络用手算一般难以解决问题,但通过手算可以加深物理概念的理解,还可以在运用计算机计算前以手算求取某些原始数据。
高斯-赛德尔迭代法:算法简单,对初值的要求不高,但需要迭代的次数多,收敛的速度慢,在早期的潮流计算程序中应用很多,之后逐渐被牛顿-拉夫逊迭代法所取代,但仍可作为计算程序前几次迭代的算法,以弥补后者对初值要求高的缺点。
牛顿-拉夫逊迭代法:是常用的解非线性方程组的方法,也是当前广泛采用的计算潮流的方法,其收敛速度快,几次迭代就可以得到最终的结果。
但其缺点是要求初值的选择得比较接近它们的精确值,否则迭代过程可能不收敛。
P-Q 分解法潮流计算:派生于以极坐标表示时的牛顿-拉夫逊法,其根据电力系统的特点,对后者的修正方程做了简化,P-Q 分解法的系数矩阵B ’和B ”代替了牛拉法中的雅可比矩阵J ,阶数降低,其中的元素在迭代过程中不发生变化,而且元素对称,这些都大大提高了运算速度,而且精确度几乎不受影响。
电力系统潮流上机计算报告书写要求
电力系统潮流上机计算报告
系别:
班级:
姓名:
学号:
2012年×月×日
一、程序说明
包括:程序设计思想、程序流程图、程序使用说明。
二、给定题目的手算过程(迭代两次)
包括:原题目、节点导纳矩阵、雅克比矩阵、第一次和第二次迭代
结果。
三、给定题目的程序计算结果
包括:原题目、节点导纳矩阵、雅克比矩阵、程序输入和输出文件(误差0.0001)。
四、编程特色与创新
包括:程序能够完成的基本功能;程序能够完成的高级功能(如:是否包括非标准变比变压器支路,是否采用了稀疏矩阵技术,
是否增加了人机对话界面,程序的通用性和实用性如何)。
五、总结
包括:手算结果与程序计算结果的分析比较;本次上机体会,如:独立编程体会、跟踪调试技能的掌握情况、C语言中结构体、
指针、文件输入输出的掌握情况等。
报告要求:
1.报告中除上面的第“三”项外,其他部分必须手写(最好使用黑色水笔)。
2.报告统一采用A4打印纸书写(留出页边距: 1.5~2厘米)。
不使用实验报告纸。
3.封面按上述格式书写。
4.装订统一在左侧1厘米,二个钉。
5.上述五部分内容必须齐全,各部分内容可以扩充。
6.报告书写要求字迹清楚,不得潦草,流程图中的框要用尺子画。
7.报告必须与本人提交程序吻合,否则取消成绩。
8.报告不得有雷同,否则全部取消成绩。
华北电力大学潮流上机课程设计报告
课程设计报告(2014—2015年度第一学期)名称:电力系统潮流上机院系:电气与电子工程学院班级:电气1215学号:一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细内容见附录)1.手算2.计算机计算3.思考题三、课程设计总结或结论四、参考文献1.《电力系统分析基础》,李庚银,机械工业出版社,2011年,第一版;2.1.2.计算机计算流程图3.完整的潮流程序头文件(定义变量):#define Bus_Num9#define Line_Num9#define Precision1e-5struct Bus{int No;struct{floatfloatfloatfloatfloat#include#include#include#include#includevoid{ob1.SetSize(2);ob1.Data(0,0)=1;ob1.Data(0,1)=2;ob1.Data(1,0)=2;ob1.Data(1,1)=1;ob1.Value(0)=4;ob1.Value(1)=6;ob1.Run();printf("x1=%f\n",ob1.Value(0));}void GetData()//Readthedata{FILE*fp;int i;fp=fopen("E:\\1121960726\\flow\\data\\data.txt","r");if(fp==NULL){printf("Cannotopenthefilenamed'data.txt'\n");return;}{}{}}void{intfloatfor{for{}}for(i=0;i<=Line_Num-1;i++){if(gLine[i].k==0){bus1=gLine[i].No_I-1;bus2=gLine[i].No_J-1;r=gLine[i].R;x=gLine[i].X;d=r*r+x*x;b=-x/d;gY_G[bus1][bus1]=gY_G[bus1][bus1]+g;gY_G[bus2][bus2]=gY_G[bus2][bus2]+g;gY_G[bus1][bus2]=gY_G[bus1][bus2]-g;gY_G[bus2][bus1]=gY_G[bus2][bus1]-g;gY_B[bus1][bus1]=gY_B[bus1][bus1]+b+gLine[i].B;gY_B[bus2][bus2]=gY_B[bus2][bus2]+b+gLine[i].B;gY_B[bus1][bus2]=gY_B[bus1][bus2]-b;gY_B[bus2][bus1]=gY_B[bus2][bus1]-b;}else{g=r/d;b=-x/d;}}if{printf("Cannotopenthefilenamed'ymatrix.txt'\n");return;}fprintf(fp,"---YMatrix---\n");for(i=0;i<=Bus_Num-1;i++){for(j=0;j<=Bus_Num-1;j++){}}fclose(fp);}void SetInitial(){int i;for(i=0;i<=Bus_Num-1;i++){if(gBus[i].Type==3){}}void{int i,j;for{ifelsefor{ifgDelta_Q[i]=gDelta_Q[i]-gf[i+1]*(gY_G[i+1][j]*ge[j]-gY_B[i+1][j]*gf[j])+ge[i+1]*(gY_G[i+1][j]*gf[j]+gY_B[i+1][j]*ge[j]); }}for(i=0;i<=Bus_Num-2;i++)//合?并?é{gDelta_PQ[2*i]=gDelta_P[i];gDelta_PQ[2*i+1]=gDelta_Q[i];}fp=fopen("E:\\1121960726\\flow\\data\\unbalance.txt","w");printf("无法打开文件:”'unbalance.txt'\n");return;}fprintf(fp,"---Unbalance---\n");for(i=0;i<=2*Bus_Num-3;i++){fprintf(fp,"Unbalance[%d]=%10.5f\n",i+1,gDelta_PQ[i]); }fclose(fp);}void{int i,j;floatfor{ga[i]=0;gb[i]=0;for{}}for{for{if(i!=j){{gJaccobi[2*i+1][2*j]=0;gJaccobi[2*i+1][2*j+1]=0;}else//PQ{gJaccobi[2*i+1][2*j]=-gJaccobi[2*i][2*j+1];gJaccobi[2*i+1][2*j+1]=gJaccobi[2*i][2*j];}}gJaccobi[2*i][2*j]=-gY_B[i+1][j+1]*ge[i+1]+gY_G[i+1][j+1]*gf[i+1]+gb[i];gJaccobi[2*i][2*j+1]=gY_G[i+1][j+1]*ge[i+1]+gY_B[i+1][j+1]*gf[i+1]+ga[i];if(gBus[i+1].Type==2)//PV节¨2点ì?{gJaccobi[2*i+1][2*j]=2*gf[i+1];gJaccobi[2*i+1][2*j+1]=2*ge[i+1];}else//PQ节点{gJaccobi[2*i+1][2*j]=-gY_G[i+1][j+1]*ge[i+1]-gY_B[i+1][j+1]*gf[i+1]+ga[i];}}}}if{printf("return;}for{for{}}}void{int i,j;NEquationob1;//解矩阵方程ob1.SetSize(2*(Bus_Num-1));for(i=0;i<=2*Bus_Num-3;i++)for(j=0;j<=2*Bus_Num-3;j++)ob1.Data(i,j)=gJaccobi[i][j];for(i=0;i<=2*Bus_Num-3;i++)ob1.Value(i)=gDelta_PQ[i];ob1.Run();for(i=0;i<=Bus_Num-2;i++)gDelta_f[i]=ob1.Value(2*i);gDelta_e[i]=ob1.Value(2*i+1);gDelta_fe[2*i]=gDelta_f[i];gDelta_fe[2*i+1]=gDelta_e[i];}fp=fopen("E:\\1121960726\\flow\\data\\revised.txt","w");if(fp==NULL){printf("无法打开文件:”'revised.txt'\n");return;}for{}}void{int i;for{}if{printf("return;}for{fprintf(fp,"f(%d)=%10.5f,e(%d)=%10.5f\n",i+1,gf[i+1],i+1,ge[i+1]);} fclose(fp);}int main(array<System::String^>^args){int i,Count_Num;float maxValue;//test();GetData();GetYMatrix();SetInitial();for(Count_Num=0;Count_Num<=100;Count_Num++) {GetUnbalance();GetJaccobi();GetRevised();GetNewValue();maxValue=fabs(gDelta_fe[0]);for(i=1;i<=2*(Bus_Num-1)-1;i++){if(maxValue<fabs(gDelta_fe[i]))}for{}{}return0;}(1(2(3)Jacobi矩阵:(4)NewVoltageValue:(5)不平衡量:(6)修正量:(6)结果:3.回答思考题1.潮流计算的方法有哪些?各有何特点?2.如果交给你一个任务,请你用已有的潮流计算软件计算北京城市电网的潮流,你应该做哪些工作?(收集哪些数据,如何整理,计算结果如何分析)3.设计中遇到的问题和解决的办法。
华北电力大学 电力系统稳态潮流上机计算程序结果
unsigned int i,j,k;
//消元过程
for(i=0;i<Dimension;i++)
{
//规格化过程:(每次消元前,先规格化,以便以下各行消元时,消元系数直接取待消
//列元素的值即可,也便于回代过程,而运算量并不增加)
for( j = i+1; j < Dimension; j++ )
D[y][y].diandao+=lineg;//尾节点自导纳中电导
D[y][x].dianna=D[x][y].dianna;//首节点与尾节点之间导纳与尾节点与首节点之间导纳相等
D[y][x].diandao=D[x][y].diandao;
}
if(gLineData[i].Type==2)//对线路为变压器的类型 对变压器进行π型等值 计算方法与导线型相同
{
if( FactorMatrix[j][i] != 0 ) //如果第j行第i列元素本就是0,则不需本列对应的消元过程
{
for( k = i + 1; k < Dimension; k++ ) //当FactorMatrix[i][k]=0,a[j][k]值不变,可省去运算
{
D[x][y].dianna+=(-1)*lineb/gLineData[i].Conductance;
D[x][y].diandao+=(-1)*lineg/gLineData[i].Conductance;
D[x][x].diandao+=lineg/gLineData[i].Conductance+(1-gLineData[i].Conductance)*lineg/(gLineData[i].Conductance*gLineData[i].Conductance);
第一章华北电力大学 电力系统潮流计算1new
U i
k 1
(1-17) 上式是该算法最基本的迭代计算公式。 其迭代收敛的判据是 maxU k 1 U k
i i i
i 1 n 1 Pi jQi Yi1 U1s ( Yij U i( k 1) Yij U i( k ) i 2,3,, n Yii ( k ) j 2 j i 1 Ui
第三节 潮流计算的几种基本方法
一 高斯-塞德尔法 以导纳矩阵为基础,并应用高斯-塞 德尔迭代的算法是电力系统应用最早的 潮流计算方法。
三.潮流计算的几种基本方法
高斯—塞德尔迭代法原理
已知方程组 (1) 1
( 2)
x1 0 3 0.3333
( x21) 0 2 0.6667 3
第二节 潮流计算问题的数学模型
对这样的线性网络一般采用节点电压 法进行分析。节点电压与节点注入电流 之间的关系为:
或
YU I
U Z I
第二节 潮流计算问题的数学模型
式中:
I1 I I 2 , In . U1 . U U 2 U. n
j 1
Ui
n
或
U i Z ij
j 1
Pj jQ j
i 1,2,, n
Uj
(1-7)
第二节 潮流计算问题的数学模型
上两式是潮流计算问题的基本方程式, 是一个以节点电压为变量的非线性代数 方程组。而采用节点功率作为节点注入 量是造成方程组呈非线性的根本原因。 由于方程组为非线性的,因此必须采用 迭代方法进行数值求解。 根据对方程组的不同处理方式,形成 了不同的潮流算法。
极坐标潮流算法范文
极坐标潮流算法范文极坐标潮流算法(Polar Coordinate Power Flow Algorithm)是一种用于计算电力系统潮流的常用算法。
相对于传统的直角坐标潮流算法,极坐标潮流算法具有简单、高效的特点,尤其适用于大规模电力系统的潮流计算。
极坐标潮流算法基于极坐标系下的复数运算,通过将输电线路电压与相角表示为模长相位的形式,将潮流计算问题转化为复数方程的求解问题。
算法的核心思想是将电力系统节点的注入功率和电压相角的关系表示为平面复数方程,并通过迭代求解这些方程达到计算节点电压的目的。
算法的基本步骤如下:1.初始化:根据电力系统的拓扑结构和节点参数,确定各个节点的注入功率、节点电压的初始估计值。
2.迭代计算:利用复数方程,求解各个节点电压的模长和相位,同时更新各节点的注入功率。
3.收敛判断:判断当前节点电压与相应的迭代步骤中的估计值之间的差距是否满足收敛标准,若满足则停止迭代,算法结束;若不满足,则回到步骤2,继续迭代。
极坐标潮流算法的优点在于简化了运算过程,减少了计算节点电压的求解难度。
与直角坐标潮流算法相比,它具有更高的计算效率和更好的数学性质,适用于大规模电力系统的潮流计算。
此外,由于复数运算的特性,该算法可以很好地处理电压相位超过±180°的情况。
但是,极坐标潮流算法也存在一些不足之处。
首先,算法对于系统存在发生“齿轮效应”(gear effect)的情况,即由于非线性负荷和导纳元件之间的相互作用,导致节点电压的估计值在幅值和相位上出现振荡,影响算法的收敛性。
其次,算法对无功负荷的计算相对较为复杂,需要引入一些修正因子来维持潮流计算的准确性。
总的来说,极坐标潮流算法是一种有效的计算电力系统潮流的方法,具有简单、高效的特点。
通过将潮流计算问题转化为复数方程的求解问题,可以实现大规模电力系统的潮流计算,为电力系统的运行和规划提供重要的支持。
在实际应用中,还可以结合其他改进的潮流算法,进一步提高计算精度和算法的稳定性。
极坐标潮流算法
极坐标潮流算法潮流例题:根据给定的参数或工程具体要求(如图),收集和查阅资料;学习相关软件(软件自选:本设计选择Matlab进行设计)。
2.在给定的电力网络上画出等值电路图。
3.运用计算机进行潮流计算。
4.编写设计说明书。
一、设计原理1.牛顿-拉夫逊原理牛顿迭代法是取x0 之后,在这个基础上,找到比x0 更接近的方程的跟,一步一步迭代,从而找到更接近方程根的近似跟。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0 的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。
电力系统潮流计算,一般来说,各个母线所供负荷的功率是已知的,各个节点电压是未知的(平衡节点外)可以根据网络结构形成节点导纳矩阵,然后由节点导纳矩阵列写功率方程,由于功率方程里功率是已知的,电压的幅值和相角是未知的,这样潮流计算的问题就转化为求解非线性方程组的问题了。
为了便于用迭代法解方程组,需要将上述功率方程改写成功率平衡方程,并对功率平衡方程求偏导,得出对应的雅可比矩阵,给未知节点赋电压初值,一般为额平衡量(未知的)构成了误差方程,解误差方程,得到节点电压不平衡量,节点电压加上节点电压不平衡量构成新的节点电压初值,将新的初值带入原来的功率平衡方程,并重新形成雅可比矩阵,然后计算新的电压不平衡量,这样不断迭代,不断修正,一般迭代三到五次就能收敛。
牛顿—拉夫逊迭代法的一般步骤:(1)形成各节点导纳矩阵Y。
(2)设个节点电压的初始值U和相角初始值e 还有迭代次数初值为0。
(3)计算各个节点的功率不平衡量。
(4)根据收敛条件判断是否满足,若不满足则向下进行。
(5)计算雅可比矩阵中的各元素。
(6)修正方程式个节点电压(7)利用新值自第(3)步开始进入下一次迭代,直至达到精度退出循环。
(8)计算平衡节点输出功率和各线路功率2.网络节点的优化1)静态地按最少出线支路数编号这种方法由称为静态优化法。
在编号以前。
首先统计电力网络个节点的出线支路数,然后,按出线支路数有少到多的节点顺序编号。
极坐标法潮流计算概要
极坐标法潮流计算概要极坐标法(也称为复数法)是一种在电力系统中计算潮流的方法。
它将功率和阻抗表示为复数,并使用复数的运算来计算电流和电压的大小和相位角。
在极坐标法中,电力系统中的各个组件(发电机、变压器、传输线等)的功率和阻抗被表示为复数的形式。
一个复数由实部和虚部组成,实部代表有功功率,虚部代表无功功率。
复数的模表示功率的大小,复数的幅角表示功率相对于电压的相位差。
潮流计算的目的是确定电力系统中各个节点的电压和相角。
根据电流注入节点的输入,潮流计算可以找到节点的电压和相角,以及所有支路和设备上的电流和功率。
潮流计算的基本步骤如下:1.确定电力系统的拓扑结构和节点列表。
拓扑结构指的是电力系统中各个节点和支路之间的连接关系。
2.编制节点注入电流方程。
节点注入电流方程根据节点的输电功率和阻抗,以及节点的电压和相角,确定节点注入电流的大小和相位。
3.根据支路阻抗,编制支路电流方程。
支路电流方程考虑了支路上的输电功率、阻抗和节点电压和相角,确定支路电流的大小和相位。
4.根据节点注入电流方程和支路电流方程,建立潮流计算方程组。
5.解潮流计算方程组。
潮流计算方程组通常是非线性方程组,需要使用数值方法求解。
6.根据求解结果,计算节点的电压和相角。
潮流计算的结果可以得到节点的电压和相位角,以及系统中各个设备的电流和功率。
极坐标法潮流计算方法具有一些优点。
首先,它能够考虑到电力系统中各个节点和支路的复杂阻抗特性,可以更准确地计算节点电压和相位角。
其次,极坐标法可以有效地处理不平衡和非线性负载,适用于电力系统的实际应用。
然而,极坐标法潮流计算方法也存在一些局限性。
首先,它需要对电力系统进行建模和参数化,需要大量的输入数据和计算量。
其次,当电力系统发生变化或出现故障时,需要重新进行潮流计算。
最后,极坐标法潮流计算方法对于大规模电力系统的计算效率较低,需要使用高性能计算平台或并行计算技术来加速计算过程。
总之,极坐标法潮流计算方法是一种常用的电力系统分析方法,它通过将功率和阻抗表示为复数,并使用复数运算来计算电流和电压的大小和相位角。
潮流上机课程设计华电
潮流上机课程设计-华电————————————————————————————————作者:————————————————————————————————日期:ﻩ课程设计报告( 2011—2012年度第一学期)名称:电力系统潮流上机院系:电气与电子工程学院班级:学号:学生姓名:指导教师:设计周数:两周成绩:日期: 2011年12月19日一、课程设计的目的与要求培养学生的电力系统潮流计算机编程能力,掌握计算机潮流计算的相关知识二、设计正文(详细内容见附录)1.手算2.计算机计算3.思考题三、课程设计总结或结论潮流计算是研究电力系统稳态运行的一种基本计算,最初求解电力系统潮流时大多使用手算,但随着电力系统结构的日趋复杂,计算量也越来越大。
复杂电力系统潮流计算中,由于节点数量巨大,所形成的修正方程已经无法通过手算方式解决,尤其是需要迭代次数较多时,手算所需要的时间太长,计算机潮流计算无疑为解决这一问题提供了极大的便利。
计算机潮流计算可以迅速解决复杂网络的潮流计算问题,这是由于无论系统的复杂程度如何,其节点与支路的类型是固定的,所以只需要输入节点与支路的数据,就可以解决任何一个复杂网络的潮流计算问题。
即只需要一次编程,就可以基本上解决所有复杂网络的计算。
需要注意的是,在使用牛顿—拉弗逊发计算潮流时,对于初值要选择比较接近它们的精确解,否则迭代过程可能不收敛。
潮流计算C语言程序编程过程中需要注意的是,C语言无法实现复数运算,需要将得到的值的实部与虚部分开储存并计算。
这个过程复杂并且容易出错,编写程序是需要注意。
另外需要注意的一点是:C语言数组的编号是从零开始的,在程序编写过程中应注意下标的对应。
通过这一次的电力系统潮流计算编程,我不仅对C语言的编程有了更深刻的理解,也对《电力系统分析》这门课程进行了查漏补缺和巩固,对电力系统的运行也有了更加深入的了解,受益匪浅。
四、参考文献1.《电力系统计算:电子数字计算机的应用》,西安交通大学等合编。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/*本程序的功能是基于牛顿-拉夫逊法(极坐标形式)计算电力系统潮流分布*//*本程序可计算的最大节点数,可适用节点类型:100 ,PQ 节点,PV节点 ,平衡节点 *//*本程序的节点数,支路数,pq,pv,节点数及电压阻抗角初值,支路阻抗值,非标准变压器变比由文件input.txt读入,文件output.txt输出*//*本程序由个部分组成,首先读原始数据,其次形成节点导纳矩阵,然后进行牛顿--拉夫逊迭代(包括三个子函数计算不平衡功率和电压,形成雅可比矩阵,解线性方程组),最后输出潮流计算结果*//*本程序通过列主元消去法解线性方程组,相比LU分解法达到相同精度迭代次数较高*//*本程序阻抗角采用弧度制,若需转换为角度则经过相应转换即刻实现*//*本程序支路采用阻抗形式表示,对地支路也采用阻抗形式表示*/#include<stdio.h>#include<math.h>#include<stdlib.h>#define M 100 //矩阵阶数#define N 100 //迭代次数int i,j,k,a,b,c; //循环控制变量int t,l,g;double P,Q,H,J; //中间变量int n, // 节点数m, // 支路数pq, // PQ节点数pv, // PV节点数duidi; //对地支路数double eps; //精度double aa[M],bb[M],cc[M],dd[M],max, rr,tt; //中间变量double mo,c1,d1,c2,d2; //复数运算函数的返回值double G[M][M],B[M][M],Y[M][M]; //节点导纳矩阵中的实部、虚部及其模方值double ykb[M][M],D[M],d[M],dU[M]; //雅克比矩阵、不平衡量矩阵struct jd // 节点结构体{ int num,s; // num为节点号,s为节点类型double p,q,S,U,zkj,dp,dq,du,dj; //节点有功、无功功率,功率模值,电压模值,阻抗角牛顿--拉夫逊中功率不平衡量、电压修正量} jd[M];struct zhl // 支路结构体{ int numb; //numb为支路号int p1,p2; //支路的两个节点double kx; //变比double r,x; //支路的电阻与电抗} zhl[M];FILE *fp1,*fp2;void Read_data() // 读取数据{int h,number;fp1=fopen("input.txt","r");fscanf(fp1,"%d,%d,%d,%d,%d,%lf\n",&n,&m,&pq,&pv,&duidi,&eps); //输入节点数,支路数,PQ节点数,PV节点数,对地支路数和精度j=1;k=pq+1;for(i=1;i<=n;i++) //输入节点编号、类型、输入功率和电压初值{fscanf(fp1,"%d,%d",&number,&h);if(h==1) //类型h=1是PQ节点依次输入该节点的有功,无功功率,电压幅值初值,相角初值{fscanf(fp1,",%lf,%lf,%lf,%lf\n",&jd[j].p,&jd[j].q,&jd[j].U,&jd[j].zkj);jd[j].num=number;jd[j].s=h;j++;}if(h==2) //类型h=2是pv节点节点依次输入该节点的有功,无功功率初值,电压幅值,相角初值{fscanf(fp1,",%lf,%lf,%lf,%lf\n",&jd[k].p,&jd[k].q,&jd[k].U,&jd[k].zkj);jd[k].num=number;jd[k].s=h;k++;}if(h==3) //类型h=3是平衡节点依次输入该节点的电压幅值,相角{fscanf(fp1,",%lf,%lf\n",&jd[n].U,&jd[n].zkj);jd[n].num=number;jd[n].s=h;}}for(i=1;i<=m;i++) //输入支路阻抗依次输入该支路的节点,非标准变比,电阻,电抗,fscanf(fp1,"%d,%d,%d,%lf,%lf,%lf\n",&zhl[i].numb,&zhl[i].p1,&zhl[i].p2,&zhl[i].kx, &zhl[i].r,&zhl[i].x);fclose(fp1);if((fp2=fopen("output.txt","w"))==NULL){printf(" can not open file!\n");exit(0);}fprintf(fp2,"\n\n ------------------------------------- 潮流计算开始 --------------------------------------\n");fprintf(fp2,"\n\n\n 电力1105 张锐题号:163 电力系统潮流上机计算\n\n");fprintf(fp2,"\n --------------------------------------- 原始数据------------------------------------------ \n");fprintf(fp2," \n");fprintf(fp2," 节点数:%d 支路数:%d PQ节点数:%d PV节点数:%d 对地支路数:%d 精度:%f\n",n,m,pq,pv,duidi,eps);fprintf(fp2," \n");for(i=1;i<=pq;i++)fprintf(fp2," PQ节点: 节点%d 注入功率 P[%d]=%f Q[%d]=%f 初值U[%d]=%f 初值zkj[%d]=%f\n",jd[i].num,jd[i].num,jd[i].p,jd[i].num,jd[i].q,jd[i].num,jd[i].U,jd[i].num,jd[i].zkj);for(i=pq+1;i<=pq+pv;i++)fprintf(fp2," PV节点: 节点%d 注入功率 P[%d]=%f 初值Q[%d]=%fU[%d]=%f 初值zkj[%d]=%f\n",jd[i].num,jd[i].num,jd[i].p,jd[i].num,jd[i].q,jd[i].num,jd[i].U,jd[i].num,jd[i].zkj);fprintf(fp2," 平衡节点: 节点%d U[%d]=%f zkj[%d]=%f\n", jd[n].num,jd[n].num,jd[n].U,jd[n].num,jd[n].zkj);fprintf(fp2," \n");for(i=1;i<=m;i++)fprintf(fp2," 支路%d: 相关节点:%d,%d 非标准变比:kx=%f R=%f X=%f \n", i,zhl[i].p1,zhl[i].p2,zhl[i].kx,zhl[i].r,zhl[i].x);fprintf(fp2," \n");}//---------------------------------复数有关函数计算-----------------------------------------//double mozhi(double a0,double b0) //复数求模值函数{ mo=sqrt(a0*a0+b0*b0);return mo;}double ji(double a1,double b1,double a2,double b2) //复数求积函数 a1为电压模值,b1为阻抗角,a2为导纳实部,b2为导纳虚部{ a1=a1*cos(b1); //求实部b1=a1*tan(b1); //求虚部c1=a1*a2-b1*b2;d1=a1*b2+a2*b1;return c1; //返回实部return d1; //返回虚部}double shang(double a3,double b3,double a4,double b4) //复数求商函数{ c2=(a3*a4+b3*b4)/(a4*a4+b4*b4);d2=(a4*b3-a3*b4)/(a4*a4+b4*b4);return c2; //返回实部return d2; //返回虚部}//---------------------------------节点导纳矩阵-----------------------------------------//void Form_Y() //节点导纳矩阵{for(i=1;i<=n;i++) //节点导纳矩阵元素附初值for(j=1;j<=n;j++)G[i][j]=B[i][j]=0;for(i=1;i<=n;i++) //节点导纳矩阵的主对角线上的元素,非对地导纳加入相应的主对角线元素中(考虑非标准变比)for(j=1;j<=m;j++)if(zhl[j].p1==i){if(zhl[j].kx==1){shang(1,0,zhl[j].r,zhl[j].x);G[i][i]+=c2;B[i][i]+=d2;}else{shang(1,0,zhl[j].r,zhl[j].x);G[i][i]+=c2/zhl[j].kx+c2*(1-zhl[j].kx)/(zhl[j].kx*zhl[j].kx);B[i][i]+=d2/zhl[j].kx+d2*(1-zhl[j].kx)/(zhl[j].kx*zhl[j].kx);}}else if(zhl[j].p2==i){if(zhl[j].kx==1){shang(1,0,zhl[j].r,zhl[j].x);G[i][i]+=c2;B[i][i]+=d2;}else{shang(1,0,zhl[j].r,zhl[j].x);G[i][i]+=c2/zhl[j].kx+c2*(zhl[j].kx-1)/zhl[j].kx;B[i][i]+=d2/zhl[j].kx+d2*(zhl[j].kx-1)/zhl[j].kx;}}for(k=1;k<=m;k++) //节点导纳矩阵非主对角线上(考虑非标准变比)的元素 if(zhl[k].kx==1){i=zhl[k].p1;j=zhl[k].p2;shang(1,0,zhl[k].r,zhl[k].x);G[i][j]-=c2;B[i][j]-=d2;G[j][i]=G[i][j];B[j][i]=B[i][j];}else{i=zhl[k].p1;j=zhl[k].p2;shang(1,0,zhl[k].r,zhl[k].x);G[i][j]-=c2/zhl[k].kx;B[i][j]-=d2/zhl[k].kx;G[j][i]=G[i][j];B[j][i]=B[i][j];}fprintf(fp2,"\n\n ------------------------------------- 潮流计算过程 --------------------------------------\n");fprintf(fp2,"\n \n");fprintf(fp2,"\n 节点导纳矩阵为:"); //输出节点导纳矩阵for(i=1;i<=n;i++){fprintf(fp2,"\n ");for(k=1;k<=n;k++){fprintf(fp2,"%f",G[i][k]);if(B[i][k]>=0){fprintf(fp2,"+j");fprintf(fp2,"%f ",B[i][k]);}else{B[i][k]=-B[i][k];fprintf(fp2,"-j");fprintf(fp2,"%f ",B[i][k]);B[i][k]=-B[i][k];}}}fprintf(fp2,"\n \n");}//---------------------------------计算不平衡量-----------------------------------------//void Calculate_Unbalanced_Para() //计算不平衡量{for(i=1;i<=n;i++){if(jd[i].s==1) //计算PQ节点不平衡量{t=jd[i].num;cc[t]=dd[t]=0;for(j=1;j<=n;j++){for(a=1;a<=n;a++){if(jd[a].num==j)break;}P=Q=0;P=jd[a].U*(G[t][j]*cos(jd[i].zkj-jd[a].zkj)+B[t][j]*sin(jd[i].zkj-jd[a].zkj));Q=jd[a].U*(G[t][j]*sin(jd[i].zkj-jd[a].zkj)-B[t][j]*cos(jd[i].zkj-jd[a].zkj));cc[t]+=P;dd[t]+=Q;}jd[i].dp=jd[i].p-jd[i].U*cc[t]; //计算PQ节点dp不平衡量jd[i].dq=jd[i].q-jd[i].U*dd[t]; //计算PQ节点dq不平衡量 }if(jd[i].s==2) //计算PV节点不平衡量{t=jd[i].num;cc[t]=dd[t]=0;for(j=1;j<=n;j++){for(a=1;a<=n;a++){if(jd[a].num==j)break;}P=Q=0;P=jd[a].U*(G[t][j]*cos(jd[i].zkj-jd[a].zkj)+B[t][j]*sin(jd[i].zkj-jd[a].zkj));Q=jd[a].U*(G[t][j]*sin(jd[i].zkj-jd[a].zkj)-B[t][j]*cos(jd[i].zkj-jd[a].zkj));cc[t]+=P;dd[t]+=Q;}jd[i].dp=jd[i].p-jd[i].U*cc[t]; //计算Pv节点不平衡量 jd[i].q=jd[i].U*dd[t];}}for(i=1;i<=pq;i++) //形成不平衡量矩阵D[M]{D[2*i-1]=jd[i].dp;D[2*i]=jd[i].dq;}for(i=pq+1;i<=n-1;i++){D[pq+i]=jd[i].dp;}fprintf(fp2,"\n 不平衡量为:"); //输出不平衡量for(i=1;i<=pq;i++){t=jd[i].num;fprintf(fp2,"\n dp[%d]=%f",i,D[2*t-1]);//pq节点dp不平衡量 fprintf(fp2,"\n dq[%d]=%f",i,D[2*t]);//pq节点dq不平衡量}for(i=pq+1;i<=n-1;i++){t=jd[i].num;fprintf(fp2,"\n dp[%d]=%f",i,D[pq+t]);//pv节点dp不平衡量}}//---------------------------------雅克比矩阵-----------------------------------------//void Form_Jacobi_Matric() //形成雅克比矩阵{for(i=1;i<=pq;i++) //形成pq节点子阵for(j=1;j<n;j++){ int i1=jd[i].num;int j1=jd[j].num;double Ui=jd[i].U;double Uj=jd[j].U;double zi=jd[i].zkj;double zj=jd[j].zkj;if(j<=pq) //求j<=pq时的H、N、J、L{if(i!=j) //求i!=j时的H、N、J、L{ykb[2*i-1][2*j-1]=Ui*Uj*(G[i1][j1]*sin(zi-zj)-B[i1][j1]*cos(zi-zj));// H值ykb[2*i-1][2*j]=Ui*Uj*(G[i1][j1]*cos(zi-zj)+B[i1][j1]*sin(zi-zj));// N值ykb[2*i][2*j-1]=-ykb[2*i-1][2*j];// J值ykb[2*i][2*j]=ykb[2*i-1][2*j-1];// L值}else //求i=j时的H、N、J、L{aa[i]=0;bb[i]=0;for(k=1;k<=n;k++){int k1=jd[k].num;H=J=0;H=jd[k].U*(G[i1][k1]*sin(jd[i].zkj-jd[k].zkj)-B[i1][k1]*cos(jd[i].zkj-jd[k].zkj));J=jd[k].U*(G[i1][k1]*cos(jd[i].zkj-jd[k].zkj)+B[i1][k1]*sin(jd[i].zkj-jd[k].zkj));aa[i]=aa[i]+H;bb[i]=bb[i]+J;}ykb[2*i-1][2*j-1]=-Ui*(aa[i]-Ui*(G[i1][i1]*sin(jd[i].zkj-jd[i].zkj)-B[i1][i1]*cos(jd[i].zkj-jd[i].zkj)));//雅克比矩阵Hykb[2*i][2*j-1]=Ui*(bb[i]-Ui*(G[i1][i1]*cos(jd[i].zkj-jd[i].zkj)+B[i1][i1]*sin(jd[i].zkj-jd[i].zkj)));//雅克比矩阵Jykb[2*i-1][2*j]=ykb[2*i][2*j-1]+2*Ui*Ui*G[i1][i1];//雅克比矩阵Nykb[2*i][2*j]=-ykb[2*i-1][2*j-1]-2*Ui*Ui*B[i1][i1];//雅克比矩阵L}}else //求j>pq时的H、J{ ykb[2*i-1][pq+j]=Ui*Uj*(G[i1][j1]*sin(zi-zj)-B[i1][j1]*cos(zi-zj)); // Hykb[2*i][pq+j]=-Ui*Uj*(G[i1][j1]*cos(zi-zj)+B[i1][j1]*sin(zi-zj));// J}}for(i=pq+1;i<=n-1;i++) //形成pv节点子阵for(j=1;j<n;j++){int i1=jd[i].num;int j1=jd[j].num;double Ui=jd[i].U;double Uj=jd[j].U;double zi=jd[i].zkj;double zj=jd[j].zkj;if(j<=pq) //求j<=pq时的H、N{ykb[pq+i][2*j-1]=Ui*Uj*(G[i1][j1]*sin(zi-zj)-B[i1][j1]*cos(zi-zj)); // 雅克比矩阵Hykb[pq+i][2*j]=Ui*Uj*(G[i1][j1]*cos(zi-zj)+B[i1][j1]*sin(zi-zj)); // 雅克比矩阵N}else //求j>pq时的H{if(i!=j) //求i!=j时的Hykb[pq+i][pq+j]=Ui*Uj*(G[i1][j1]*sin(zi-zj)-B[i1][j1]*cos(zi-zj)); // Helse //求i=j时的H{aa[i]=0;for(k=1;k<=n;k++){int k1=jd[k].num;H=0;H=jd[k].U*(G[i1][k1]*sin(jd[i].zkj-jd[k].zkj)-B[i1][k1]*cos(jd[i].zkj-jd[k].zkj));aa[i]=aa[i]+H;}ykb[pq+i][pq+j]=-Ui*(aa[i]-Ui*(G[i1][i1]*sin(jd[i].zkj-jd[i].zkj)-B[i1][i1]*cos(jd[i].zkj-jd[i].zkj))); //雅克比矩阵H}}}fprintf(fp2,"\n\n 雅克比矩阵为: ");for(i=1;i<=(2*pq+pv);i++){fprintf(fp2,"\n");for(j=1;j<=2*pq+pv;j++){fprintf(fp2," %f",ykb[i][j]); //输出雅克比矩阵}}}//-------------------------求解修正方程组 --------------------------------//void Solve_Equations() //求解修正方程组 (用列主元消去法) { int g=2*pq+pv;for(i=1;i<=g;i++) //把函数残量矩阵编入修正方程ykb[i][g+1]=D[i];k=1;do{rr=ykb[k][k];l=k;i=k+1;do{if(fabs(ykb[i][k])>fabs(rr)) //列选主元{rr=ykb[i][k];l=i;}i++;} while(i<=g);if(l!=k){for(j=k;j<=g+1;j++){tt=ykb[l][j];ykb[l][j]=ykb[k][j];ykb[k][j]=t;}}for(j=k+1;j<=g+1;j++) //消元ykb[k][j]/=ykb[k][k];for(i=k+1;i<=g;i++)for(j=k+1;j<=g+1;j++)ykb[i][j]-=ykb[i][k]*ykb[k][j];k++;} while(k<=g);if(k!=1){for(i=g;i>=1;i--) //回代{tt=0;for(j=i+1;j<=g;j++)tt+=ykb[i][j]*D[j];D[i]=ykb[i][g+1]-tt;}}for(i=1;i<=(n-1);i++){jd[i].U+=D[2*i]*jd[i].U;jd[i].zkj+=D[2*i-1];}max=fabs(D[1]);for(i=1;i<=g;i++)if(fabs(D[i])>max)max=fabs(D[i]);}//---------------------------------牛顿--拉夫逊迭代-----------------------------------------// void Niudun_Lafuxun(){int z=1;fprintf(fp2,"\n迭代的次数和不平衡量的结果\n");do{ max=1;if((z<N)&&(max>=eps)){ fprintf(fp2,"\n");fprintf(fp2,"\n 第%d的迭代结果值:\n",z); //开始迭代计算}Calculate_Unbalanced_Para();Form_Jacobi_Matric();Solve_Equations();fprintf(fp2,"\n\n 输出修正量dJ,dU: "); //输出修正量的值for(c=1;c<=n;c++){for(a=1;a<=n;a++){if(jd[a].num==c)break;}fprintf(fp2,"\n"); //输出迭代后中的值if(jd[a].s==1)fprintf(fp2," 节点为 %2d dJ=%8.5f dU=%8.5f",c,D[2*a-1],D[2*a]);if(jd[a].s==2)fprintf(fp2," 节点为 %2d dJ=%8.5f",c,D[pq+a]);}fprintf(fp2,"\n\n 输出迭代过程中的电压值: ");//输出迭代过程中的电压值for(c=1;c<=n;c++){for(a=1;a<=n;a++){if(jd[a].num==c)break;}fprintf(fp2,"\n U[%d]=%f",c,jd[a].U);fprintf(fp2,"/_%f",jd[a].zkj);}z++;} while((z<N)&&(max>=eps)); //判断是否达到精度要求}//---------------------------------潮流计算结果-----------------------------------------//void Powerflow_Result(){int n1=jd[n].num;fprintf(fp2,"\n\n\n\n");fprintf(fp2," ----------------------------------潮流计算结果----------------------------------");fprintf(fp2,"\n 各节点电压值: "); //输出各节点的电压值for(c=1;c<=n;c++){for(a=1;a<=n;a++){if(jd[a].num==c)break;}fprintf(fp2,"\n U[%d]=%f",c,jd[a].U);fprintf(fp2,"/_%f",jd[a].zkj);}rr=tt=0; //计算节点的注入功率for(i=1;i<=n;i++){int i1=jd[i].num;ji(jd[i].U,-jd[i].zkj,G[n1][i1],-B[n1][i1]);rr+=c1;tt+=d1;}ji(jd[n].U,jd[n].zkj,rr,tt);fprintf(fp2,"\n\n 各节点注入功率:\n");//输出各节点注入功率for(i=1;i<=pq;i++){int i1=jd[i].num;fprintf(fp2," PQ节点: 节点%d S[%d]=%f", i1,i1,jd[i].p); //PQ节点注入功率if(jd[i].q>=0)fprintf(fp2,"+j%f\n",jd[i].q);elsefprintf(fp2,"-j%f\n",-jd[i].q);}for(i=pq+1;i<=n-1;i++){int i1=jd[i].num;fprintf(fp2," PV节点: 节点%d S[%d]=%f", i1,i1,jd[i].p); //PV节点注入功率if(jd[i].q>=0)fprintf(fp2,"+j%f\n",jd[i].q);elsefprintf(fp2,"-j%f\n",-jd[i].q);}fprintf(fp2," 平衡节点: 节点%d",jd[n].num,jd[n].num); //平衡节点注入功率fprintf(fp2," S[%d]=%f",n1,c1);if(d1>=0)fprintf(fp2,"+j%f",d1);elsefprintf(fp2,"-j%f",-d1);fprintf(fp2,"\n\n 线路功率:\n"); //输出线路功率rr=tt=0;for(i=1;i<=m;i++){int i1=zhl[i].p1; //计算线路功率int j1=zhl[i].p2;aa[i]=bb[i]=P=Q=0;for(a=1;a<=n;a++){if(jd[a].num==i1)break;}for(b=1;b<=n;b++){if(jd[b].num==j1)break;}mozhi(zhl[i].r,zhl[i].x);if(mo==0)continue;shang(1,0,zhl[i].r,zhl[i].x);ji(jd[a].U/zhl[i].kx/zhl[i].kx,-jd[a].zkj,c2,-d2); //考虑非标准变比//P+=c1;Q+=d1;ji(jd[b].U/zhl[i].kx,-jd[b].zkj,c2,-d2);P-=c1;Q-=d1;ji(jd[a].U,jd[a].zkj,P,Q);fprintf(fp2," 线路%d: %d--%d 的功率为: %f",i,i1,j1,c1); //输出线路功率//if(d1>=0)fprintf(fp2,"+j%f\n",d1);elsefprintf(fp2,"-j%f\n",-d1);aa[i]+=c1;bb[i]+=d1;P=Q=0;ji(jd[b].U,-jd[b].zkj,c2,-d2); //考虑非标准变比//P+=c1;Q+=d1;ji(jd[a].U/zhl[i].kx,-jd[a].zkj,c2,-d2);P-=c1;Q-=d1;ji(jd[b].U,jd[b].zkj,P,Q);fprintf(fp2," 线路%d: %d--%d 的功率为: %f",i,j1,i1,c1);//输出线路功率//if(d1>=0)fprintf(fp2,"+j%f\n",d1);elsefprintf(fp2,"-j%f\n",-d1);aa[i]+=c1;bb[i]+=d1;rr+=aa[i];tt+=bb[i];}fprintf(fp2,"\n\n 线路损耗功率:\n"); //计算线路功率损耗//for(i=1;i<=m;i++){int i1=zhl[i].p1;int j1=zhl[i].p2;fprintf(fp2," 线路%d损耗的功率为: %f",i,aa[i]);//输出线路功率损耗//if(bb[i]>=0)fprintf(fp2,"+j%f\n",bb[i]);elsefprintf(fp2,"-j%f\n",-bb[i]);}fprintf(fp2,"\n\n 网络总损耗功率为: %f",rr); //计算网络总损耗//if(tt>=0)fprintf(fp2,"+j%f\n",tt);elsefprintf(fp2,"-j%f\n",-tt);fprintf(fp2,"\n\n--------------------------------------- 潮流计算结束--------------------------------------------");}//---------------------------------主函数-----------------------------------------//void main(){Read_data(); //(读原始数据)Form_Y(); //(形成节点导纳矩阵)Niudun_Lafuxun(); //(牛顿--拉夫逊迭代)Powerflow_Result(); //(潮流计算结果)printf("-------------------计算结果存放于output.txt文件中-------------------------\n");}。