电力系统分析大作业报告C++.docx

上传人:b****4 文档编号:4033594 上传时间:2022-11-27 格式:DOCX 页数:39 大小:137.65KB
下载 相关 举报
电力系统分析大作业报告C++.docx_第1页
第1页 / 共39页
电力系统分析大作业报告C++.docx_第2页
第2页 / 共39页
电力系统分析大作业报告C++.docx_第3页
第3页 / 共39页
电力系统分析大作业报告C++.docx_第4页
第4页 / 共39页
电力系统分析大作业报告C++.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

电力系统分析大作业报告C++.docx

《电力系统分析大作业报告C++.docx》由会员分享,可在线阅读,更多相关《电力系统分析大作业报告C++.docx(39页珍藏版)》请在冰豆网上搜索。

电力系统分析大作业报告C++.docx

电力系统分析大作业报告C++

原创

电力系统分析潮流分析与三相短路计算

 

年级09级

学院电气与自动化工程学院

专业电气工程及其自动化

程序说明:

本程序实现了从键盘输入各节点参数,各支路参数,进行潮流计算、三相金属性短路计算,并将结果输出到文件中。

节点参数的输入顺序与节点序号无关,支路参数参数的输入同样与其头尾结点的序号无关。

节点编号从零开始,中间不能出现间断。

由于时间紧迫,没能实现有文件输入数据,以及通过键盘输入命令调整节点参数,很是遗憾。

本程序将节点编号(ID)作为作为联系程序各部分的纽带,减小了个部分之间的联系是程序的结构简单化。

使用LU解潮流方程,而不是用高斯法,以减少计算量。

但关于内存分配还没有优化(毕竟时间紧)。

程序中关于函数重载,指针的使用也小有心得。

本程序写了整整两个星期,花了很多精力,后很多收获,对潮流计算又有了更深的理解,同时也耽误了好多时间。

有得也有失吧

程序流程图:

程序中参数的意义

1.全局变量

nodes_num(int)节点数目(由外部输入)

branchs_num(int)支路书目(由外部输入)

pv_num(int)PV节点数目

pq_num(int)PQ节点数目

B_angle_num(int)与相角有关的电导矩阵阶数

B_u_num(int)与电压有关的电导矩阵的阶数

array_end(int*)以某节点为头结点的支路的条数

B(double**)节点电导矩阵

G(double**)节点电抗矩阵

b_angle_no(int*)相角相关矩阵各节点ID数列

b_u_no(int)电压相关矩阵各节点ID数列

NB_angle(double**)相角相关矩阵

NB_u(double**)电压相关矩阵

d_angle_angle(double**)相角变化量数列(其元素为nodes中d_angle_x_u的地址)

d_u_u(double**)电变化量数列(其元素为nodes中d_u的地址)

lu_u(double**)

的LU分解矩阵

lu_angle(double**)

的LU分解矩阵

d_P(double)

d_Q(double)

fxP(double**)相角相关矩阵的fx数列(其元素为node中fx_P的地址)

fxQ(double**)电压相关矩阵的fx数列(其元素为node中fx_Q的地址)

Zf(double**)短路点所在的节点阻抗矩阵的列(Zf[i][0]=R,Zf[i][1]=X)

Uf(double**)各节点短路电压矩阵(Uf[i][0]为实部,Zf[i][1]为虚部)

outfile(ofstream)文件输出流

nodes_array(Node*)节点数组(以节点ID为序排列)

branchs(Branch**)支路矩阵(以头结点ID排列)

2.Node

id(int)节点序号(输入时最小序号为1,内部从0开始)

type(int)节点类型(平衡节点0,PV节点1,PQ节点2)

u(double)节点电压

angle(double)节点电压相角

angle_x_u(double)相角与电压的乘积

xd(double)发电机直轴电抗

pi(double)发电机输出有功与节点流出有功之差

qi(double)节点流出有功的值

d_u(double)电压变化量

d_angle_x_u(double)电压与相角乘积的变化量

P(double)计算得节点的净流入有功

Q(double)计算得节点的净流入无功

fx_P(double)(Pi-P)/U

fx_Q(double)(Qi-Q)/U

c_nodes(int[5])与本节点相关的节点ID数列(本节点ID为该数列第一个元素)

c_nodes_num(int)本节点相关节点的数目

3.Branchs

head_id(int)头结点ID(输入参数)

end_id(int)尾节点ID(输入参数)

r(double)线路阻抗(输入参数)

x(double)线路电抗(输入参数)

b_2(double)线路并联电纳(输入参数)

gii(double)本支路对相关节点自电导的贡献

gij(double)本支路对相关节点互电导的贡献

bii(double)本支路对相关节点自电纳的贡献

bij(double)本支路对相关节点互电导的贡献

程序中函数

voidcreat_B_angle_u(void)建立

voidlu(double**a,double**lu,intnum)将线性方程组的系数矩阵进行LU分解

voidsoving_equations(double**lu,double**x,double**b,intnum)利用LU矩阵进行回代解方程组

voidcompute_PQ(void)结算各节点的P、Q

voidcreat_mat(double***a,inti,intj);为矩阵分配内存空间

voidcreat_mat(double***a,inti);为矩阵分配内存空间

voidini_test(void)用于测试的参数初始化函数

voidini(void)从键盘输入的参数初始化函数

voidout_mat(double**a,intn1,intn2)输出矩阵

voidout_mat(double**a,intn)输出矩阵

voidout_mat(double*a,intn);输出数列

voidout_paraments(inti)输出电网潮流结果

voidout_const_parament(void)输出BG矩阵等潮流计算恒定参数

voidcompute_new_B(void)计算考虑发电机和负载后的节点导纳矩阵(含B、G)

voidcompute_Zf(intid)计算短路点所在的节点阻抗矩阵的列向量(id为短路点序号)

voidcompute_new_BG(void)计算考虑发电机和负载后的节点导纳矩阵(含B、G)

voida_to_xy(double*a)将虚数由极坐标表示变为直角坐标表示

voidxy_to_a(double*a)将虚数由表示直角坐标变为极坐标表示

voidadd_i(double*a,double*b)虚数加法运算(参数为直角坐标表示,下同)

voidadd_i(double*c,double*a,double*b)虚数加法运算

voidsub_i(double*a,double*b)虚数减法运算

voidsub_i(double*c,double*a,double*b)虚数减法运算

voidmul_i(double*a,double*b)虚数乘法运算

voidmul_i(double*c,double*a,double*b)虚数乘法运算

voiddiv_i(double*a,double*b)虚数除法运算

voiddiv_i(double*c,double*a,double*b)虚数除法运算

voidcompute_UI(intid)计算短路后个点的电压

voidcompute_Ii()计算短路后各支路点电流

潮流计算程序

#include

#include

#include

usingnamespacestd;

//PQ,PV,平衡节点的fxP,fx_Q的求取

intnodes_num,branchs_num;//节点总数,支路总数

intpv_num,pq_num;//=pv节点数

intB_angle_num;//=pv节点数+PQ节点数

intB_u_num;//=PQ节点数

int*array_end;//以某节点为头结点的树枝的条数

double**B,**G;

int*b_angle_no,*b_u_no;

double**NB_angle,**NB_u;

double**d_angle_angle,**d_u_u;

double**lu_u,**lu_angle;//lu分解结果

doubled_P,d_Q,**fxP_angle,**fxQ_u;

double**Zf,**Uf;

ofstreamoutfile("E:

\\data.txt");

constdoublee=0.0001;//精确度

structNode

{

intid,type;//平衡节点0,pv节点1,PQ节点2

doubleu,angle,angle_x_u,xd;

doublepi,qi;

doubled_u,d_angle_x_u;

doubleP,Q,fxP,fxQ;

intc_nodes[5],c_nodes_num;

}*nodes_array;

structBranch

{

inthead_id,end_id;

doubler,x,b_2;//输入参数

doublegii,gij;//gb构成y

doublebii,bij;

}**branchs;

voidmain()

{

voidcreat_B_angle_u(void);

voidlu(double**a,double**lu,intnum);

voidsoving_equations(double**lu,double**x,double**b,intnum);

voidcompute_PQ(void);

voidcreat_mat(double***a,inti,intj);

voidcreat_mat(double***a,inti);

voidini_test(void);

voidini(void);

voidout_mat(double**a,intn1,intn2);

voidout_mat(double**a,intn);

voidout_mat(double*a,intn);

voidout_paraments(inti);

voidout_const_parament(void);

voidcompute_new_B(void);

voidcompute_Zf(intid);

voidcompute_new_BG(void);

voida_to_xy(double*a);

voidxy_to_a(double*a);

voidadd_i(double*a,double*b);

voidadd_i(double*c,double*a,double*b);

voidsub_i(double*a,double*b);

voidsub_i(double*c,double*a,double*b);

voidmul_i(double*a,double*b);

voidmul_i(double*c,double*a,double*b);

voiddiv_i(double*a,double*b);

voiddiv_i(double*c,double*a,double*b);

voidcompute_UI(intid);

voidcompute_Ii();

ini();

/*ini_test();*/

B_angle_num=pv_num+pq_num;//计算雅可比矩阵

B_u_num=pq_num;

b_angle_no=newint[B_angle_num];

b_u_no=newint[B_u_num];

creat_mat(&B,nodes_num,nodes_num);

creat_mat(&G,nodes_num,nodes_num);

creat_mat(&NB_angle,B_angle_num,B_angle_num);

creat_mat(&lu_angle,B_angle_num,B_angle_num);

creat_mat(&NB_u,B_u_num,B_u_num);

creat_mat(&lu_u,B_u_num,B_u_num);

creat_mat(&d_angle_angle,B_angle_num,1);

creat_mat(&d_u_u,B_u_num,1);

creat_mat(&fxP_angle,B_angle_num,1);

creat_mat(&fxQ_u,B_u_num,1);

creat_mat(&Zf,nodes_num,2);

creat_mat(&Uf,nodes_num,2);

for(inti=0;i

B[i]=newdouble[nodes_num];

for(inti=0;i

for(intj=0;j

{

B[i][j]=0;

G[i][j]=0;

}

for(inti=0;i

{

for(intj=0;j

{

B[i][branchs[i][j].end_id]=-branchs[i][j].bij;

B[branchs[i][j].end_id][i]=-branchs[i][j].bij;

B[i][i]+=branchs[i][j].bii;

B[branchs[i][j].end_id][branchs[i][j].end_id]+=branchs[i][j].bii;

G[i][branchs[i][j].end_id]=-branchs[i][j].gij;

G[branchs[i][j].end_id][i]=-branchs[i][j].gij;

G[i][i]+=branchs[i][j].gii;

G[branchs[i][j].end_id][branchs[i][j].end_id]+=branchs[i][j].gii;

}

}

creat_B_angle_u();

lu(NB_angle,lu_angle,B_angle_num);

lu(NB_u,lu_u,B_u_num);

out_const_parament();

intcount=0;

for(inti=0;i<20;i++)

{

intlte=0;

count++;

compute_PQ();

for(inti=0;i

{

intthis_id=b_angle_no[i];

nodes_array[this_id].fxP=(nodes_array[this_id].pi-nodes_array[this_id].P)/nodes_array[this_id].u;//改动------

if(abs(nodes_array[i].fxP)

lte++;

}

for(inti=0;i

{

intthis_id=b_u_no[i];

nodes_array[this_id].fxQ=(nodes_array[this_id].qi-nodes_array[this_id].Q)/nodes_array[this_id].u;

if(abs(nodes_array[this_id].fxQ)

lte++;

}

if(lte>=(B_angle_num+B_u_num))

break;

else

{

soving_equations(lu_angle,d_angle_angle,fxP_angle,B_angle_num);

soving_equations(lu_u,d_u_u,fxQ_u,B_u_num);

for(inti=0;i

{

nodes_array[i].angle_x_u+=nodes_array[i].d_angle_x_u;

nodes_array[i].angle=nodes_array[i].angle_x_u/nodes_array[i].u;

nodes_array[i].u+=nodes_array[i].d_u;

}

}

}

out_paraments(count);

compute_new_BG();

outfile<<"修正后的节点电纳矩阵---------------"<

out_mat(B,nodes_num);

outfile<<"修正后的节点电导矩阵---------------"<

out_mat(G,nodes_num);

compute_Zf(3);

compute_UI(3);

for(inti=0;i

{

outfile<<"第"<<(i+1)<<"节点电压:

"<

}

outfile<

compute_Ii();

}

voidcreat_B_angle_u(void)

{

for(inti=0,j=0,k=0;i

{

if(nodes_array[i].type!

=0)

{

b_angle_no[j]=i;

j++;

}

if(nodes_array[i].type==2)

{

b_u_no[k]=i;

k++;

}

}

for(inti=0;i

{

for(intj=0;j

{

NB_angle[i][j]=-B[b_angle_no[i]][b_angle_no[j]];

}

d_angle_angle[i]=&(nodes_array[b_angle_no[i]].d_angle_x_u);

fxP_angle[i]=&(nodes_array[b_angle_no[i]].fxP);

}

for(inti=0;i

{

for(intj=0;j

{

NB_u[i][j]=-B[b_u_no[i]][b_u_no[j]];

}

d_u_u[i]=&(nodes_array[b_u_no[i]].d_u);

fxQ_u[i]=&(nodes_array[b_u_no[i]].fxQ);

}

}

voidlu(double**a,double**lu,intnum)

{

for(inti=0;i

{

for(intj=0;j

{

lu[i][j]=a[i][j];

if(i

{

for(intk=0;k

lu[i][j]-=lu[i][k]*lu[k][j];

lu[i][j]/=lu[i][i];

}

else

{

for(intk=0;k

lu[i][j]-=lu[i][k]*lu[k][j];

}

}

}

}

voidsoving_equations(double**lu,double**x,double**b,intnum)

{

double*y=newdouble[num];

for(inti=0;i

{

y[i]=b[i][0];

for(intj=0;j

y[i]-=lu[i][j]*y[j];

y[i]/=lu[i][i];

}

for(inti=num-1;i>=0;i--)

{

x[i][0]=y[i];

for(intj=i+1;j

x[i][0]-=lu[i][j]*x[j][0];

}

deletey;

}

voidcompute_PQ(void)

{

for(inti=0;i

{

doubletempP=0,tempQ=0;

for(intj=0;j

{

intc_id=nodes_array[i].c_nodes[j];

doubleangleij=nodes_array[i].angle-nodes_array[c_id].angle;

tempP+=nodes_array[c_id].u*(G[i][c_id]*cos(angleij)+B[i][c_id]*sin(angleij));

tempQ+=nodes_array[c_id].u*(G[i][c_id]*sin(angleij)-B[i][c_id]*cos(angleij));

}

nodes_array[i].P=tempP*nodes_array[i].u;

nodes_array[i].Q=tempQ*nodes_array[i].u;

}

}

voidcreat_mat(double***a,inti,intj)

{

*a=newdouble*[i];

for(intk=0;k

(*a)[k]=newdouble[j];

}

voidcreat_mat(double***a,inti)

{

*a=newdouble*[i];

for(intk=0;k

(*a)[k]=newdouble[i];

}

voidini_test(void)

{

nodes_num=9;

pv_num=2;

pq_num=6;

nodes_array=newNode[nodes_num];

branchs=newBranch*[nodes_num];

for(inti=0;i

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

当前位置:首页 > 农林牧渔 > 林学

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

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