logo资料库

网络潮流计算C++版本.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
看大家在人人上发了各种电力系统作业,刚编完我也来得瑟一下吧,基本上可以解决开式单直网络和树状网络的计算。 树状网络计算时要自己先设定好支路的起始节点和终止节点标号以及计算顺序,本来想做一个树状图的的深度遍历来进 行自动排序,不过从网上找到一个深度遍历代码太长,在此就偷个懒把顺序自己输进去了。测试后 3-4,3-3,以及例 3-2 答案基本正确。另外 fun3 是不加入横向电压分量计算的函数,在例 3-2 计算用的是这个函数。另外就是迭代终止条件的 问题上我只是设定固定迭代次数为 3,也可以用精度来限定,大致就是如此吧。请大家多多指教了。源代码: #include #include #include #include using namespace std; struct node{//节点类 int i;//节点编号 double U,P,Q,delta;//额定电压 计算负荷 电压相角 }; struct line{//线路类 连接父节点子节点 node f_node,s_node;//父节点 子节点 double R,X,B;//线路参数 R X B/2 double P_in,Q_in,P_out,Q_out,d_P,d_Q,D_U,d_U;//线路输入输出功率以及线路消耗功率 void Set_node(node nod1,node nod2){ f_node=nod1; s_node=nod2; } }; void fun1(line &lin){//由后往前递推功率 double p=lin.P_out; double q=lin.Q_out; double u=lin.s_node.U; lin.d_P=(p*p+q*q)/u/u*lin.R; lin.d_Q=(p*p+q*q)/u/u*lin.X; lin.P_in=lin.d_P+lin.P_out; lin.Q_in=lin.d_Q+lin.Q_out; }; void fun2(line &lin){//由前往后推电压 double p=lin.P_in; double q=lin.Q_in; double u=lin.f_node.U; lin.D_U=(p*lin.R+q*lin.X)/u; lin.d_U=(p*lin.X-q*lin.R)/u; lin.s_node.U=sqrt(pow(lin.f_node.U-lin.D_U,2)+pow(lin.d_U,2));//子节点电压 lin.s_node.delta=lin.f_node.delta-atan(lin.d_U/(lin.f_node.U-lin.D_U)); }; void fun3(line &lin){//由前往后推电压不计横向分量 double p=lin.P_in; double q=lin.Q_in;
double u=lin.f_node.U; lin.D_U=(p*lin.R+q*lin.X)/u; lin.d_U=(p*lin.X-q*lin.R)/u; lin.s_node.U=lin.f_node.U-lin.D_U,2;//子节点电压 lin.s_node.delta=lin.f_node.delta-atan(lin.d_U/(lin.f_node.U-lin.D_U)); }; void main(){ int num_l; int num_n;//支路数 节点数 ifstream fin; fin.open("E:\\data.txt"); fin>>num_n>>num_l;//输入节点数支路数 ofstream fout; fout.open("E:\\databak.txt"); node *nod; nod=new node[num_n];//节点数目 line *lin; lin=new line[num_l];//线路数目 nod[0].delta=0; double *u;//节点额定电压 u=new double[num_n]; for(int i=0;i>u[i]; }; double *p;//节点有功功率 p=new double[num_n]; for(int i=0;i>p[i]; }; double *q;//节点无功功率 q=new double[num_n]; for(int i=0;i>q[i]; }; for(int i=0;i
fin>>r[i]; }; double *x;//线路电抗 x=new double[num_l]; for(int i=0;i>x[i]; }; double *b;//线路电纳 b=new double[num_l]; for(int i=0;i>b[i]; }; for(int i=0;i>lin[i].f_node.i; fin>>lin[i].s_node.i; }; for(int i=0;i
}; for(int ts=0;ts0;j--){ fun1(lin[j]); nod[lin[j].f_node.i].P+=lin[j].P_in; nod[lin[j].f_node.i].Q+=lin[j].Q_in; for(int i=0;i
fout<<"功率损耗:"<
delete[]u; delete[]p; delete[]q; delete[]r; delete[]x; delete[]b; } 附:3-4 的 data 文件 3 2 113 110 100 0 0.17 20 0 1.7 15 8.5 1.22 20.5 20.2 0.000282 0 0 1 1 2 输出为:第 1 次迭代 支路信息: 支路 1-2: 始端功率:1.02165+j0.693296 末端功率:1.00434+j0.658675 功率损耗:0.0173106+j0.0346211 电压损耗 0.274063 支路 2-3: 始端功率:0.5034+j0.3068 末端功率:0.5+j0.3 功率损耗:0.0034+j0.0068 电压损耗 0.109 支路 2-4: 始端功率:0.200938+j0.151875 末端功率:0.2+j0.15 功率损耗:0.0009375+j0.001875 电压损耗 0.0739643 节点信息: 节点 1 电压:10.5 相角:0 节点 2 电压:10.2259 相角:-0.864932 节点 3 电压:10.1169 相角:-1.25281 节点 4 电压:10.152 相角:-1.072 全网信息:
总电源有功:1.02165 总负荷有功:1 总有功损耗:0.0216481 网损率:0.0107081 最低电压:10.1169 最低电压点:3 第 2 次迭代 支路信息: 支路 1-2: 始端功率:1.02078+j0.69156 末端功率:1.00423+j0.658463 功率损耗:0.0165484+j0.0330969 电压损耗 0.273567 支路 2-3: 始端功率:0.503322+j0.306644 末端功率:0.5+j0.3 功率损耗:0.00332186+j0.00664371 电压损耗 0.108957 支路 2-4: 始端功率:0.20091+j0.151819 末端功率:0.2+j0.15 功率损耗:0.000909642+j0.00181928 电压损耗 0.0739403 节点信息: 节点 1 电压:10.5 相角:0 节点 2 电压:10.2264 相角:-0.86489 节点 3 电压:10.1175 相角:-1.25273 节点 4 电压:10.1525 相角:-1.07194 全网信息: 总电源有功:1.02078 总负荷有功:1.70434 总有功损耗:0.0207799 网损率:0.00762533 最低电压:10.1175 最低电压点:3 第 3 次迭代 支路信息: 支路 1-2: 始端功率:1.02078+j0.691556 末端功率:1.00423+j0.658462 功率损耗:0.0165468+j0.0330936 电压损耗 0.273566
支路 2-3: 始端功率:0.503322+j0.306643 末端功率:0.5+j0.3 功率损耗:0.0033215+j0.00664301 电压损耗 0.108957 支路 2-4: 始端功率:0.20091+j0.151819 末端功率:0.2+j0.15 功率损耗:0.000909549+j0.0018191 电压损耗 0.0739402 节点信息: 节点 1 电压:10.5 相角:0 节点 2 电压:10.2264 相角:-0.86489 节点 3 电压:10.1175 相角:-1.25273 节点 4 电压:10.1525 相角:-1.07194 全网信息: 总电源有功:1.02078 总负荷有功:1.70423 总有功损耗:0.0207778 网损率:0.00762487 最低电压:10.1175 最低电压点:3 例 3-2 的 data: 4 3 10.5 10 10 10 0 0.3 0.5 0.2 0 0.2 0.3 0.15 1.2 1 1.5 2.4 2 3 0 0 0 0 1 1 2 1 3 输出: 第 1 次迭代 支路信息: 支路 1-2: 始端功率:1.02165+j0.693296
分享到:
收藏