欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > PDF文档下载
    分享到微信 分享到微博 分享到QQ空间

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

    • 资源ID:3439398       资源大小:1.07MB        全文页数:27页
    • 资源格式: PDF        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    1、 1/20 潮流计算软件潮流计算软件-本软件基于牛顿-拉夫逊法(节点电压是直角坐标)By QQ: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 增

    2、大迭代次数,k-k+1 kk?2/20 程序代码如下:#include#include#include#include#include struct linetype /线路参数 int jiedian2;/若为变压器,则 左端为“低”压侧(换算成型等值电路),变压器的阻抗在“低”压侧 double R,X,K,B0;line30;struct Nodetype /节点功率 int lei;/PQ 定义 1,PV 定义 2,平衡节点 定义 3 int jie;/节点编号 double P,Q;double y1,y2;/初始电压 poin30;int point,road;/节点数 point

    3、 支路数 road int p1,p2;/PQ PV 节点数目 /*自定义 函数*void chargescreen()/调节屏幕 int mode;printf(t 请选择界面模式:.106*45.134*45nt);a:scanf(%d,&mode);if(mode!=1&mode!=2)printf(nt 错误,请重新输入.nt);goto a;printf(nt);system(pause);if(mode=1)system(mode con:cols=106 lines=45);/调整屏幕大小 else system(mode con:cols=134 lines=45);void

    4、pqpv()/统计 PQ、PV 节点 数目 3/20 int i;p1=p2=0;for(i=0;i);a:scanf(%s,filename);char ch=;/读取数据,以它们之间的空格做分隔标志 if(fp=fopen(filename,rb)=NULL)printf(t 打开文件失败.ntt 请重新输入.nt);goto a;else printf(nt 呵呵,读取文件信息成功.nn);while(ch!=EOF)/当读入的字符不是结束标志时进行循环 ch=fgetc(fp);if(ch=10)/当输入的字符时换行符时 ch=fgetc(fp);if(ch=1)/读取 PQ PV 平

    5、衡节点 参数 /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/20 if(ch=3)/节点数 po

    6、int 支路数 road fscanf(fp,%d%d,&point,&road);fclose(fp);void print()/定义“打印数据信息”int i,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,支路数%dnnt PQ 节点%d 个,PV 节点%d 个.nn,point,road,p

    7、1,p2);void jiedian(int i)/节点参数 int g3;char c;printf(nt 节点类型(1.PQ 2.PV 3.平衡节点):nt);a1:scanf(%d,&g3);/g3=c-48;if(g33)5/20 printf(nt 错误,请重新输入.nt);goto a1;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);else poini.Q=0;else poin

    8、i.P=poini.Q=0;if(poini.lei!=1)printf(t 电压 e:nt);scanf(%lf,&poini.y1);printf(t 电压 f:nt);scanf(%lf,&poini.y2);else poini.y1=poini.y2=0;void xianlu(int j)/线路参数 char g2;printf(nt 线路若含有变压器,则换算成型等值电路,左节点为“低”压侧nt 是否含变压器.(y/n);a:g2=getch();if(g2!=y&g2!=n)printf(nnt 错误,请重新输入.nt);goto a;printf(nnt 左节点:nt);sca

    9、nf(%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/20 printf(t 变压器变比 k:nt);scanf(%lf,&linej.K);else linej.K=1;printf(t 对地电容 B:nt);scanf(%lf,&linej.B0);void poro()/输入节点数和支路数 printf(nt 节点数:)

    10、;scanf(%d,&point);printf(t 支路数:);scanf(%d,&road);void gai()/修改数据 char g;int m,n;a:system(cls);printf(nt*修改数据模式*n);print();printf(t 修改类别如下:nta:节点数&支路数,b:节点参数,c:线路参数.(q 退出)nt);g=getch();switch(g)case a:poro();break;case b:printf(nt 请输入修改的节点编号:nt);scanf(%d,&m);poinm-1.jie=m;m-;jiedian(m);break;case c:p

    11、rintf(nt 请输入修改线路序号:nt);scanf(%d,&n);n-;7/20 xianlu(n);break;case q:;break;default:printf(nt 错误,请重新输入.nt);goto a;if(g!=q)goto a;void getdata(int i,int j)/生成数据表 char g1;while(1)a1:system(cls);printf(n a:节点数&支路数,b:节点参数,c:线路参数,d:修改数据,e:数据清零.(q 退出)nt);g1=getch();if(g1=a)poro();else if(g1=b)while(1)printf

    12、(nt 节点编号:nt);scanf(%d,&poini.jie);jiedian(i);printf(nt 按任意键继续.(q 退出)nt);i+;if(getch()=q)break;else if(g1=c)while(1)xianlu(j);printf(nt 按任意键继续.(q 退出)nt);j+;if(getch()=q)break;else if(g1=e)/每次生成数据,清零 point=road=0;p1=p2=0;8/20 i=j=0;printf(nt 数据清零成功.);goto a1;else if(g1=d)gai();else if(g1=q)break;else

    13、printf(nt 错误,请重新输入.nt);goto a1;void putfile2()/将数据存入文件 FILE*fp;int i,j;char filename20,beizhu60;printf(nt 请输入要存入计算数据的文件名.nt);a:scanf(%s,filename);printf(nt 备注信息:nt);scanf(%s,&beizhu);if(fp=fopen(filename,w)=NULL)printf(t 存入文件失败.ntt 请重试.nt);goto a;else printf(nt 恭喜你,成功存入文件%s.nn,filename);fprintf(fp,t

    14、ttt 潮流计算数据表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/20 void readormake()/开始界面模式 int m,n;m=n=0;/每次重新生成数据,清零 char g1,g2;a2:printf(nnt 请选择模式.(a.生

    15、成数据文件 b.读取数据文件)nt);a1:g1=getch();if(g1=a)system(mode con:cols=85 lines=40);system(color 07);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)goto a3;system(cls);system(color f0);system(mode con:cols=60

    16、 lines=20);/调整屏幕大小 printf(t *nntt 欢迎使用潮流计算软件nnt *nt);goto a2;else if(g1=b)readfile();pqpv();chargescreen();else if(g1=q)exit(0);else printf(nt 错误,请重新输入.nt);goto a1;void daona(double G30,double B30)/定义求导纳函数 int i,j;10/20 int m,n;double hu30;/互导纳的分母 for(i=0;i=point-1;i+)/初始化 B G for(j=0;j=point-1;j+)B

    17、ij=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

    18、+=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);/非对角的互导

    19、纳 Gmn=Gnm=(-1*linej.R)/(linej.K*huj);/非对角的互导纳 else Bmn=Bnm=linej.X/(linej.K*huj);/非对角的互导纳 Gmn=Gnm=-1*linej.R/(linej.K*huj);/非对角的互导纳 11/20 /*void charge(double B30,double G30)/定义导纳调序函数 int i,j;double b3030,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=p

    20、oint-1;i+)for(j=0;j=point-1;j+)Bij=bij;Gij=gij;*/void imbalance(double G30,double B30,double e30,double f30,double W58,double ya130,double ya230)/求各类节点的不平衡量 int i,j,k;double temp1,temp2;for(i=0;i=2*point;i+)Wi=0;/以下计算 PQ 节点的P Q for(i=0,j=0;j=p1-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=

    21、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 节点的P V*V for(;j=(p1+p2)-1;i=i+2,j+)temp1=0,temp2=0;for(k=0;k=point-1;k+)12/20 temp1+=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);double

    22、 maxone(double W58)/声明“求最大值函数”和 打印各项最大值 double temp1,temp2,temp3;/temp1 是绝对值最大的 P,temp2 是绝对值最大的 Q,temp3 是绝对值最大的 V double temp;/存放最大值 int i;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;te

    23、mp=fabs(temp1);if(tempfabs(temp2)temp=fabs(temp2);if(temp0)system(cls);printf(nt *第%d 次迭代*nnt 以下为各类节点的不平衡 13/20 量n,count);if(p10)printf(ntPQ 节点的P Qnt);/不平衡量 for(i=0,j=1;i0)printf(ntPV 节点的P V*Vnt);/不平衡量 for(;i=1)/迭代 1 次后的才出现的电压 e f printf(ntt【雅克比矩阵 J】nn);for(i=0;i=2*(point-1)-1;i+)printf(t);for(j=0;j

    24、=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);void jakebi(double G30,double B30,double e30,double f

    25、30,double J5858,double jake5858)/定义“求雅克比矩阵”int i,j,k,m,n;double temp1,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);/P Ji+1j+1=-1*Jij;/Q Jij+1=Ji+1j=Bmn*em-Gmn*fm;/P Q 14/20 /以下求 PV 节点 非对角线上的元素 for(;i=2*(p1+p2)-1-1;i=i+2,m+)for(j=

    26、0,n=0;j=2*(p1+p2)-1-1;j=j+2,n+)Jij=-(Gmn*em+Bmn*fm);/P Jij+1=Bmn*em-Gmn*fm;/P Ji+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;/P Jii+1=-temp2+Bjj*ej-Gjj*fj;/P Ji+1i=temp2+Bjj*ej-

    27、Gjj*fj;/Q Ji+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;/P Jii+1=-temp2+Bjj*ej-Gjj*fj;/P Ji+1i=-2*ej;/V Ji+1i+1=-2*fj;/V for(i=0;i=2*(point-1)-1;i+)/存放到新数组,方便打印出来 fo

    28、r(j=0;j=2*(point-1)-1;j+)jakeij=Jij;void liezhuyuan(int re,double W58,double J5858)/定义“列主元”绝对值的大小排序 int i,time;double a,temp;15/20 double b58;a=Jre-1re-1;for(i=re-1;i=2*(point-1)-1;i+)/选出“列主元”的绝对值最大的行号:time if(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*

    29、Vj;Vi=-1*(Wi-temp)/Jii;void FINDPQ(double G30,double B30,double e30,double f30,double PQ40)/平衡节点功率 int k;int i,j;double temp1,temp2;/以下计算节点的 P+jQ for(i=0,j=0;i=point-1;i+,j=j+2)/从 PQ0 PQ1 开始存放节点功率 P 和 Q temp1=0,temp2=0;for(k=0;k=point-1;k+)temp1+=Gik*ek-Bik*fk;16/20 temp2+=Gik*fk+Bik*ek;PQj=ei*temp1

    30、+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);void powerme(double G30,double B30,double e30,double f30,double PQ40)/线路功率 double temp1,temp2,temp3,temp5;double temp;int i,j;int k,m;for(k=0,m=19;k=road-1;k+,m=m+4)/从 PQ19 PQ20 开始存放

    31、线路功率的 P 和 Q if(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

    32、*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;/好虚部 else temp3=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*(

    33、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/20 temp3=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


    注意事项

    本文(C语言潮流计算牛顿拉夫逊法直角坐标.pdf)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


    收起
    展开