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

上传人:b****1 文档编号:3211439 上传时间:2022-11-20 格式: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

《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);/对角线的导纳Gi

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

当前位置:首页 > 考试认证 > IT认证

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1