C语言潮流计算牛顿拉夫逊法直角坐标.pdf

上传人:wj 文档编号:3439398 上传时间:2023-05-05 格式:PDF 页数:27 大小:1.07MB
下载 相关 举报
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第1页
第1页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第2页
第2页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第3页
第3页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第4页
第4页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第5页
第5页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第6页
第6页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第7页
第7页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第8页
第8页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第9页
第9页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第10页
第10页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第11页
第11页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第12页
第12页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第13页
第13页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第14页
第14页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第15页
第15页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第16页
第16页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第17页
第17页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第18页
第18页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第19页
第19页 / 共27页
C语言潮流计算牛顿拉夫逊法直角坐标.pdf_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

C语言潮流计算牛顿拉夫逊法直角坐标.pdf

《C语言潮流计算牛顿拉夫逊法直角坐标.pdf》由会员分享,可在线阅读,更多相关《C语言潮流计算牛顿拉夫逊法直角坐标.pdf(27页珍藏版)》请在冰点文库上搜索。

C语言潮流计算牛顿拉夫逊法直角坐标.pdf

1/20潮流计算软件潮流计算软件-本软件基于牛顿-拉夫逊法(节点电压是直角坐标)ByQQ:

879220194(有问题可交流)用C语言编程计算潮流的流程图否是否是开始输入原始数据形成节点导纳矩阵YB设节点电压初值ei(0),fi(0)置迭代次数k=1计算Pi(k),Qi(k),Ui(k)2形成雅可比矩阵求各节点电压变量ei(k),fi(k)求出|e(k)|max、|f(k)|max迭代是否收敛,|e(k)|max、|f(k)|max?

计算平衡节点功率sS停止计算各节点电压新值:

)()()1(kikikieee)()()1(kikikifff增大迭代次数,k-k+1kk?

2/20程序代码如下:

#include#include#include#include#includestructlinetype/线路参数intjiedian2;/若为变压器,则左端为“低”压侧(换算成型等值电路),变压器的阻抗在“低”压侧doubleR,X,K,B0;line30;structNodetype/节点功率intlei;/PQ定义1,PV定义2,平衡节点定义3intjie;/节点编号doubleP,Q;doubley1,y2;/初始电压poin30;intpoint,road;/节点数point支路数roadintp1,p2;/PQPV节点数目/*自定义函数*voidchargescreen()/调节屏幕intmode;printf(t请选择界面模式:

.106*45.134*45nt);a:

scanf(%d,&mode);if(mode!

=1&mode!

=2)printf(nt错误,请重新输入.nt);gotoa;printf(nt);system(pause);if(mode=1)system(modecon:

cols=106lines=45);/调整屏幕大小elsesystem(modecon:

cols=134lines=45);voidpqpv()/统计PQ、PV节点数目3/20inti;p1=p2=0;for(i=0;i);a:

scanf(%s,filename);charch=;/读取数据,以它们之间的空格做分隔标志if(fp=fopen(filename,rb)=NULL)printf(t打开文件失败.ntt请重新输入.nt);gotoa;elseprintf(nt呵呵,读取文件信息成功.nn);while(ch!

=EOF)/当读入的字符不是结束标志时进行循环ch=fgetc(fp);if(ch=10)/当输入的字符时换行符时ch=fgetc(fp);if(ch=1)/读取PQPV平衡节点参数/fscanf()读入ASCII字符的形式fscanf(fp,%d%d%lf%lf%lf%lf,&poini.lei,&poini.jie,&poini.P,&poini.Q,&poini.y1,&poini.y2);i+;if(ch=2)/读取线路参数(若为变压器,则左节点为“低”压侧(换算成型等值电路),变压器的阻抗在“低”压侧)fscanf(fp,%d%d%lf%lf%lf%lf,&linej.jiedian0,&linej.jiedian1,&linej.R,&linej.X,&linej.K,&linej.B0);j+;4/20if(ch=3)/节点数point支路数roadfscanf(fp,%d%d,&point,&road);fclose(fp);voidprint()/定义“打印数据信息”inti,j;pqpv();printf(nt节点参数表(PQ节点PV节点平衡节点):

nnt类型节点有功功率P无功功率Q电压et电压fn);for(i=0;i线路参数表(变压器换算成型等值电路,左节点为“低”压侧):

nnt节点1节点2阻抗R感抗X变压器变比k对地电容Bn);for(j=0;j节点数%d,支路数%dnntPQ节点%d个,PV节点%d个.nn,point,road,p1,p2);voidjiedian(inti)/节点参数intg3;charc;printf(nt节点类型(1.PQ2.PV3.平衡节点):

nt);a1:

scanf(%d,&g3);/g3=c-48;if(g33)5/20printf(nt错误,请重新输入.nt);gotoa1;poini.lei=g3;if(poini.lei!

=3)printf(t有功功率P:

nt);scanf(%lf,&poini.P);if(poini.lei!

=2)printf(t无功功率Q:

nt);scanf(%lf,&poini.Q);elsepoini.Q=0;elsepoini.P=poini.Q=0;if(poini.lei!

=1)printf(t电压e:

nt);scanf(%lf,&poini.y1);printf(t电压f:

nt);scanf(%lf,&poini.y2);elsepoini.y1=poini.y2=0;voidxianlu(intj)/线路参数charg2;printf(nt线路若含有变压器,则换算成型等值电路,左节点为“低”压侧nt是否含变压器.(y/n);a:

g2=getch();if(g2!

=y&g2!

=n)printf(nnt错误,请重新输入.nt);gotoa;printf(nnt左节点:

nt);scanf(%d,&linej.jiedian0);printf(t右节点:

nt);scanf(%d,&linej.jiedian1);printf(t阻抗R:

nt);scanf(%lf,&linej.R);printf(t感抗X:

nt);scanf(%lf,&linej.X);if(g2=y)linej.B0=0;6/20printf(t变压器变比k:

nt);scanf(%lf,&linej.K);elselinej.K=1;printf(t对地电容B:

nt);scanf(%lf,&linej.B0);voidporo()/输入节点数和支路数printf(nt节点数:

);scanf(%d,&point);printf(t支路数:

);scanf(%d,&road);voidgai()/修改数据charg;intm,n;a:

system(cls);printf(nt*修改数据模式*n);print();printf(t修改类别如下:

nta:

节点数&支路数,b:

节点参数,c:

线路参数.(q退出)nt);g=getch();switch(g)casea:

poro();break;caseb:

printf(nt请输入修改的节点编号:

nt);scanf(%d,&m);poinm-1.jie=m;m-;jiedian(m);break;casec:

printf(nt请输入修改线路序号:

nt);scanf(%d,&n);n-;7/20xianlu(n);break;caseq:

;break;default:

printf(nt错误,请重新输入.nt);gotoa;if(g!

=q)gotoa;voidgetdata(inti,intj)/生成数据表charg1;while

(1)a1:

system(cls);printf(na:

节点数&支路数,b:

节点参数,c:

线路参数,d:

修改数据,e:

数据清零.(q退出)nt);g1=getch();if(g1=a)poro();elseif(g1=b)while

(1)printf(nt节点编号:

nt);scanf(%d,&poini.jie);jiedian(i);printf(nt按任意键继续.(q退出)nt);i+;if(getch()=q)break;elseif(g1=c)while

(1)xianlu(j);printf(nt按任意键继续.(q退出)nt);j+;if(getch()=q)break;elseif(g1=e)/每次生成数据,清零point=road=0;p1=p2=0;8/20i=j=0;printf(nt数据清零成功.);gotoa1;elseif(g1=d)gai();elseif(g1=q)break;elseprintf(nt错误,请重新输入.nt);gotoa1;voidputfile2()/将数据存入文件FILE*fp;inti,j;charfilename20,beizhu60;printf(nt请输入要存入计算数据的文件名.nt);a:

scanf(%s,filename);printf(nt备注信息:

nt);scanf(%s,&beizhu);if(fp=fopen(filename,w)=NULL)printf(t存入文件失败.ntt请重试.nt);gotoa;elseprintf(nt恭喜你,成功存入文件%s.nn,filename);fprintf(fp,tttt潮流计算数据表n-n节点参数

(1)n);for(i=0;i=point-1;i+)fprintf(fp,1%d%d%11.7lf%11.7lf%11.7lf%11.7lfn,poini.lei,poini.jie,poini.P,poini.Q,poini.y1,poini.y2);fprintf(fp,-n线路参数

(2)n);for(j=0;j备注信息:

%s,beizhu);fclose(fp);9/20voidreadormake()/开始界面模式intm,n;m=n=0;/每次重新生成数据,清零charg1,g2;a2:

printf(nnt请选择模式.(a.生成数据文件b.读取数据文件)nt);a1:

g1=getch();if(g1=a)system(modecon:

cols=85lines=40);system(color07);a3:

getdata(m,n);pqpv();system(cls);printf(t*nnttt欢迎使用潮流计算软件nnt*nt);print();printf(nt是否存入文件.(y/n)输入r返回.nt);g2=getch();if(g2=y)putfile2();if(g2=r)gotoa3;system(cls);system(colorf0);system(modecon:

cols=60lines=20);/调整屏幕大小printf(t*nntt欢迎使用潮流计算软件nnt*nt);gotoa2;elseif(g1=b)readfile();pqpv();chargescreen();elseif(g1=q)exit(0);elseprintf(nt错误,请重新输入.nt);gotoa1;voiddaona(doubleG30,doubleB30)/定义求导纳函数inti,j;10/20intm,n;doublehu30;/互导纳的分母for(i=0;i=point-1;i+)/初始化BGfor(j=0;j=point-1;j+)Bij=Gij=0;for(i=0;i=point-1;i+)/节点数for(j=0;j=road-1;j+)/支路数huj=linej.R*linej.R+linej.X*linej.X;/互导纳的分母if(linej.K=1)if(i+1=linej.jiedian0|i+1=linej.jiedian1)Bii+=linej.B0+(-1*(linej.X/huj);/对角线的导纳Gii+=linej.R/huj;/对角线的导纳if(linej.K!

=1)if(i+1=linej.jiedian0)/变压器低压侧Bii+=-1*(linej.X/huj);/对角线的导纳Gii+=linej.R/huj;/对角线的导纳if(i+1=linej.jiedian1)/变压器高压侧Bii+=(-1*linej.X)/(linej.K*linej.K*huj);/对角线的导纳Gii+=linej.R/(linej.K*linej.K*huj);/对角线的导纳for(j=0;j=road-1;j+)/支路数huj=linej.R*linej.R+linej.X*linej.X;/互导纳的分母m=linej.jiedian0-1;n=linej.jiedian1-1;if(linej.K=1)Bmn=Bnm=linej.X/(linej.K*huj);/非对角的互导纳Gmn=Gnm=(-1*linej.R)/(linej.K*huj);/非对角的互导纳elseBmn=Bnm=linej.X/(linej.K*huj);/非对角的互导纳Gmn=Gnm=-1*linej.R/(linej.K*huj);/非对角的互导纳11/20/*voidcharge(doubleB30,doubleG30)/定义导纳调序函数inti,j;doubleb3030,g3030;for(i=0;i=point-1;i+)for(j=0;j=point-1;j+)bij=Bpoini.jie-1j;gij=Gpoini.jie-1j;for(i=0;i=point-1;i+)for(j=0;j=point-1;j+)Bij=bij;Gij=gij;*/voidimbalance(doubleG30,doubleB30,doublee30,doublef30,doubleW58,doubleya130,doubleya230)/求各类节点的不平衡量inti,j,k;doubletemp1,temp2;for(i=0;i=2*point;i+)Wi=0;/以下计算PQ节点的PQfor(i=0,j=0;j=p1-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=Gjk*ek-Bjk*fk;temp2+=Gjk*fk+Bjk*ek;Wi=poinj.P-ej*temp1-fj*temp2;Wi+1=poinj.Q-fj*temp1+ej*temp2;/以下计算PV节点的PV*Vfor(;j=(p1+p2)-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)12/20temp1+=Gjk*ek-Bjk*fk;temp2+=Gjk*fk+Bjk*ek;Wi=poinj.P-ej*temp1-fj*temp2;Wi+1=(ya1j*ya1j+ya2j*ya2j)-(ej*ej+fj*fj);doublemaxone(doubleW58)/声明“求最大值函数”和打印各项最大值doubletemp1,temp2,temp3;/temp1是绝对值最大的P,temp2是绝对值最大的Q,temp3是绝对值最大的Vdoubletemp;/存放最大值inti;temp1=W0;temp2=W1;temp3=W2*(p1+1)-1;for(i=0;ifabs(temp1)temp1=Wi;if(fabs(Wi+1)fabs(temp2)temp2=Wi+1;for(;ifabs(temp1)temp1=Wi;if(fabs(Wi+1)fabs(temp3)temp3=Wi;temp=fabs(temp1);if(tempfabs(temp2)temp=fabs(temp2);if(temp0)system(cls);printf(nt*第%d次迭代*nnt以下为各类节点的不平衡13/20量n,count);if(p10)printf(ntPQ节点的PQnt);/不平衡量for(i=0,j=1;i0)printf(ntPV节点的PV*Vnt);/不平衡量for(;i=1)/迭代1次后的才出现的电压efprintf(ntt【雅克比矩阵J】nn);for(i=0;i=2*(point-1)-1;i+)printf(t);for(j=0;j=2*(point-1)-1;j+)printf(%12.7lf,jakeij);printf(n);printf(nt解修正方程得电压修正量(e,f):

n);for(i=0;i=2*(point-1)-1;i=i+2)/电压修正量printf(t(%10.7lf,%10.7lf)n,Vi,Vi+1);printf(nt修正后的节点电压(e,f):

n);for(i=0;i=point-1-1;i+)/修正后的电压printf(t(%10.7lf,%10.7lf)n,ei,fi);voidjakebi(doubleG30,doubleB30,doublee30,doublef30,doubleJ5858,doublejake5858)/定义“求雅克比矩阵”inti,j,k,m,n;doubletemp1,temp2;/以下求PQ节点非对角线上的元素for(i=0,m=0;i=2*p1-1-1;i=i+2,m+)for(j=0,n=0;j=2*(p1+p2)-1-1;j=j+2,n+)Jij=-(Gmn*em+Bmn*fm);/PJi+1j+1=-1*Jij;/QJij+1=Ji+1j=Bmn*em-Gmn*fm;/PQ14/20/以下求PV节点非对角线上的元素for(;i=2*(p1+p2)-1-1;i=i+2,m+)for(j=0,n=0;j=2*(p1+p2)-1-1;j=j+2,n+)Jij=-(Gmn*em+Bmn*fm);/PJij+1=Bmn*em-Gmn*fm;/PJi+1j=Ji+1j+1=0;/V/以下求PQ节点对角线上的元素for(i=0,j=0;j=p1-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=Gjk*ek-Bjk*fk;temp2+=Gjk*fk+Bjk*ek;Jii=-temp1-Gjj*ej-Bjj*fj;/PJii+1=-temp2+Bjj*ej-Gjj*fj;/PJi+1i=temp2+Bjj*ej-Gjj*fj;/QJi+1i+1=-temp1+Gjj*ej+Bjj*fj;/Q/以下求PV节点对角线上的元素for(;j=(p1+p2)-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=Gjk*ek-Bjk*fk;temp2+=Gjk*fk+Bjk*ek;Jii=-temp1-Gjj*ej-Bjj*fj;/PJii+1=-temp2+Bjj*ej-Gjj*fj;/PJi+1i=-2*ej;/VJi+1i+1=-2*fj;/Vfor(i=0;i=2*(point-1)-1;i+)/存放到新数组,方便打印出来for(j=0;j=2*(point-1)-1;j+)jakeij=Jij;voidliezhuyuan(intre,doubleW58,doubleJ5858)/定义“列主元”绝对值的大小排序inti,time;doublea,temp;15/20doubleb58;a=Jre-1re-1;for(i=re-1;i=2*(point-1)-1;i+)/选出“列主元”的绝对值最大的行号:

timeif(fabs(a)=fabs(Jire-1)a=Jire-1;time=i;for(i=0;i=0;i-)temp=0;for(j=i+1;j=n-1;j+)temp+=-1*Jij*Vj;Vi=-1*(Wi-temp)/Jii;voidFINDPQ(doubleG30,doubleB30,doublee30,doublef30,doublePQ40)/平衡节点功率intk;inti,j;doubletemp1,temp2;/以下计算节点的P+jQfor(i=0,j=0;i=point-1;i+,j=j+2)/从PQ0PQ1开始存放节点功率P和Qtemp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=Gik*ek-Bik*fk;16/20temp2+=Gik*fk+Bik*ek;PQj=ei*temp1+fi*temp2;PQj+1=fi*temp1-ei*temp2;printf(ntt平衡节点功率:

P%d+jQ%d=%.7fl+j%.7lfn,point,point,PQ2*(point-1),PQ2*(point-1)+1);voidpowerme(doubleG30,doubleB30,doublee30,doublef30,doublePQ40)/线路功率doubletemp1,temp2,temp3,temp5;doubletemp;inti,j;intk,m;for(k=0,m=19;k=road-1;k+,m=m+4)/从PQ19PQ20开始存放线路功率的P和Qif(linek.K=1)i=linek.jiedian0-1;j=linek.jiedian1-1;temp=ei*ei+fi*fi;temp1=temp-(ei*ej+fi*fj);/某实部temp2=fi*(ei-ej)-ei*(fi-fj);/某虚部PQm=-1*(Gij*temp1+Bij*temp2);/好实部PQm+1=-1*temp*linek.B0-Gij*temp2+Bij*temp1;/好虚部j=linek.jiedian0-1;i=linek.jiedian1-1;temp=ei*ei+fi*fi;temp1=temp-(ei*ej+fi*fj);/某实部temp2=fi*(ei-ej)-ei*(fi-fj);/某虚部PQm+2=-1*(Gij*temp1+Bij*temp2);/好实部PQm+3=-1*temp*linek.B0-Gij*temp2+Bij*temp1;/好虚部elsetemp3=linek.K-1/linek.K;temp5=linek.R*linek.R+linek.X*linek.X;i=linek.jiedian0-1;j=linek.jiedian1-1;temp=ei*ei+fi*fi;temp1=temp-(ei*ej+fi*fj);/某实部temp2=fi*(ei-ej)-ei*(fi-fj);/某虚部PQm=temp*temp3*linek.R/temp5-1*(Gij*temp1+Bij*temp2);/变压器低压侧功率实部PQm+1=temp*temp3*linek.X/temp5+Bij*temp1-Gij*temp2;/变压器低压侧功率虚部17/20temp3=1-linek.K/linek.K*linek.K;j=linek.jiedian0-1;i=linek.jiedian1-1;temp=ei*ei+fi*fi;temp1=temp-(ei*ej+fi*fj);/某实部temp2=fi*(ei-ej)-ei*(fi-fj);/某虚部PQm+2=temp*temp3*linek.R/temp5-1*(Gij*temp1+Bij*temp2);/变压器高压侧功率实部PQm+3=temp*temp3*linek.X/temp5+Bij*te

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2