电力系统分析大作业报告C++.docx
- 文档编号:4033594
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:39
- 大小:137.65KB
电力系统分析大作业报告C++.docx
《电力系统分析大作业报告C++.docx》由会员分享,可在线阅读,更多相关《电力系统分析大作业报告C++.docx(39页珍藏版)》请在冰豆网上搜索。
电力系统分析大作业报告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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电力系统 分析 作业 报告 C+