logo资料库

潮流计算C语言程序.doc

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
程序设计所涉及二叉树解释 任意一棵树或一个森林都能唯一地对应一棵二叉树,由此而编写本程序。 本程序采用类二叉树为整体结构,二叉树类下定义节点类,每一条支路均为树的一个节 点,支路所有的参数均作为节点的属性,并给节点加入属性“支路编号”,并以支路编号为 依据构建二叉树,这就要求提前根据二叉树结构给每一个支路编号。 支路编号原则:左子树上所有编号均小于其双亲的编号,右子树上所有编号均大于其双 亲的编号,为了便于查看,本程序在节点较少时编号从 1 开始,逐个递加至支路数;当支路 较多时,可不必拘泥于逐个递加,只要满足支路编号原则即可。 例如习题 3-4: 程序二叉树结构示意图: 本二叉树中节点 1 即支路 1 为题目中节点 1 与节点 2 之间的部分; 本二叉树中节点 2 即支路 2 为题目中节点 2 与节点 3 之间的部分;
对于习题 3-3: 程序二叉树结构示意图: 本二叉树中节点 2 即支路 2 为题目中节点 1 与节点 2 之间的部分; 本二叉树中节点 1 即支路 1 为题目中节点 2 与节点 3 之间的部分; 本二叉树中节点 3 即支路 3 为题目中节点 2 与节点 4 之间的部分. 拓展: 如下多支路网络: 对于三节点网络需先进行以下网络处理转化为标准二叉树,而后进行计算; 图中三角形表明该项阻抗为零,为纯导线,并进行相应参数补充进行计算。
程序说明文档 ******************************************************************************* ************************************************************************ 本程序测试使用方法:在 E 盘根目录下建立输入文件: 输入文件名:input.txt; 将所附算例对应输入文件内容复制粘贴至上述文件中,在 VC++6.0 环 境下运行 cpp 文件得出结果。 输出文件在 E 盘根目录下 输出文件名为:data.txt; ******************************************************************************* ************************************************************************ 程序功能说明:本程序可以计算任意长度线型开始网络潮流; 支持多电压等级下的计算; 可在除供电节点外任意节点引出负载; ******************************************************************************* ************************************************************************ 输入格式说明:以支路为基本单位,按潮流方向输入数据: 以下例示意: 2 1,110,118,8.5,20.5,0.000564,0,0,1,0,0 2,11,110,1.22,20.2,0,40,30,10,0.17,1.7 //支路个数 //线路等效的支路 //变压器等效的支路 . . . //按此方式知道输入所有的支 //输入从上到下的顺序为潮流 //线型开式网络中的流动方向 路 在 /* 第一行输入支路个数,回车 第二行至后输入各个支路参数,回车分隔不同支路; 各行输入的支路参数顺序是: 支路编号,末端电压,始端电压,线路等效电阻,线路等效感抗,线路等效 容纳,末端输入有功,末端输入无功,变比,变压器有功励磁损耗,变压器无功励磁损耗 对于线路等效电路:变压器有功/无功损耗输入零,变比输入 1; 对于变压器等效电路:所有的参数均归算至高压侧,Rt,Xt 对应输入线路等效电阻 /感抗的位置,线路等效容抗为零; 对于个节点的引出负荷:输入至以此节点为末节点的支路的末端输入有功/无功部 分; */
******************************************************************************* ************************************************************************* 输出文件格式说明:输出的内容包括 (1)支路信息:每个支路元件的始端有功、无功和末端有功、无功;有 功损耗无功损耗;电压损耗; (2)全网信息:全网的总电源有功、总负荷有功、有功损耗、网损率; (3)迭代信息:每次完整迭代后的所有内容; 具体在输出文件中都明确标出。 ******************************************************************************* ************************************************************************** 程序中变量定义说明: 类中定义的变量 class line_part{ double U[2]; 横分量,U[1]电压降落纵分量 double k; double val; double U_end; double U_begin; double X[3]; 感抗,X[2]容纳 double S_end[2]; S_end[1]无功 double S_begin[2]; S_begin[1]无功 double S0[2]; S0[1]无功 double S_org[2]; S_org[1]无功 line_part *lchild,*rchild; } class BinTree{ //定义支路类 //支路电压降落:U[0]电压降落 //变压器变比 //支路排序 //支路末端电压 //支路首段电压 //支路等效阻抗: X[0]电阻,X[1] //支路末端功率:S_end[0]有功, //支路首段功率:S_begin[0]有功, //变压器励磁损耗:S0[0]有功, //支路末端负载:S_org[0]有功, //支路的后继两个支路 //定义树类 void PreOrder(){PreOrder(root);}; //树的先序遍历修改电压 void PostOrder(){PostOrder(root);}; //树的后序遍历修改潮流 void display(){display(root);}; //树的先序遍历显示数据 line_part *root; }; //树的根,是一个支路类
主函数中定义的数据 ofstream outfile; ifstream infile; const int M(a); //输出数据流定 //输入数据流定 //支路个数常量 主程序(复制粘贴到 C++就能用) ******************************************************************************* ******************************************************************************* #include #include #include double p_cost_all=0; double sqr(double x){ return x*x;}; class line_part{ private: double val; double U_end; double U_begin; double X[3]; 感抗,X[2]容纳 double S_end[2]; S_end[1]无功 double S_begin[2]; S_begin[1]无功 double S0[2]; S0[1]无功 double S_org[2]; S_org[1]无功 line_part *lchild,*rchild; public: double U[2]; 横分量,U[1]电压降落纵分量 double k; public: //平方计算函数 //定义支路类 //支路排序 //支路末端电压 //支路首段电压 //支路等效阻抗: X[0]电阻,X[1] //支路末端功率:S_end[0]有功, //支路首段功率:S_begin[0]有功, //变压器励磁损耗:S0[0]有功, //支路末端负载:S_org[0]有功, //支路电压降落:U[0]电压降落 //变压器变比
line_part(){ val=0; U_end=0;U_begin=0;X[0]=0;X[1]=0; [1]=S_org[1]=0; X[2]=0;S_end[0]=S_org[0]=0;S_end S_begin[0]=0;S_begin[1]=0;k=1; S0[0]=0;S0[1]=0;U[0]=0;U[1]=0; lchild = rchild= NULL; } line_part(double vall,double u_end=0,double u_begin=0,double r=0, double x=0,double b=0,double Pe=0,double Xe=0,double K=0,double P0=0,double Q0=0){ U_end=u_end; U_begin=u_begin; val=vall; X[0]=r; X[1]=x; X[2]=b; S_end[0]=S_org[0]=Pe; S_end[1]=S_org[1]=Xe; S_begin[0]=0; S_begin[1]=0; k=K; S0[0]=P0; U[0]=0; U[1]=0; lchild = S0[1]=Q0; rchild= NULL; }; friend class BinTree; friend void pass_U(line_part*a,line_part*b,line_part*c); //电压传递函数
friend void pass_w(line_part*a,line_part*b,line_part*c); //功率传递函数 friend void pass_U2(line_part*a,line_part*b); //电压传递函数 friend void pass_w2(line_part*a,line_part*b); //功率传递函数 void Sbegin(){ (U_end)*X[2]/2))/sqr(Uend); ; -sqr(U_begin)*X[2]/2-sqr(U_end)*X[2]/2; }; void Uend(){ double U_heng(0),U_zong(0); //U_heng 即是△u2 //U_zong 即是δu2 X[2]/2-S0[1]; 1])/U_begin; 0])/U_begin; sqr(U_zong))/k; double get_val(){ }; //支路首段功率计算函数 double Uend,I2; Uend=k*U_end; I2=(sqr(S_end[0])+sqr(S_end[1]-sqr S_begin[0]=S_end[0]+I2*X[0]+S0[0] S_begin[1]=S_end[1]+I2*X[1]+S0[1] //支路末端电压计算函数 double p_begin,q_begin; p_begin=S_begin[0]-S0[0]; q_begin=S_begin[1]+sqr(U_begin)* U_heng=(p_begin*X[0]+q_begin*X[ U_zong=(p_begin*X[1]-q_begin*X[ U_end=sqrt(sqr(U_begin-U_heng)+ U[0]=U_heng; U[1]=U_zong; }; //返回支路编号 if(this==0){return -1;}else{ if(val>0&&val<100) {return val;} else return -1; }
//返回支路末端电压 //返回支路首段电压 return U_begin;}; //返回支路首段有功 return S_begin[0];}; //返回支路末端有功 //返回支路首段无功 return S_begin[1];}; //返回支路末端无功 //返回支路有功损耗 //返回支路无功损耗 //返回支路无功损耗 //返回支路无功损耗 double get_Uend(){ return U_end; }; double get_Ubegin(){ double get_Pbegin(){ double get_Pend(){ return S_end[0];}; double get_Qbegin(){ double get_Qend(){ return S_end[1];}; double get_Pcost(){ return S_begin[0]-S_end[0];}; double get_Qcost(){ return S_begin[1]-S_end[1];}; line_part *get_lchild(){ return lchild;}; line_part *get_rchild(){ return rchild;}; }; void pass_U(line_part *a,line_part *b,line_part *c){ (*c).U_begin=(*a).U_end; (*b).U_begin=(*a).U_end; }; void pass_w(line_part *a,line_part *b,line_part *c){ (*a).S_end[0]=(*b).S_begin[0]+(*c).S_begin[0]+(*a).S_org[0]; (*a).S_end[1]=(*b).S_begin[1]+(*c).S_begin[1]+(*a).S_org[1]; }; void pass_U2(line_part *a,line_part *b){ (*b).U_begin=(*a).U_end; }; void pass_w2(line_part *a,line_part *b){ (*a).S_end[0]=(*b).S_begin[0]+(*a).S_org[0];
分享到:
收藏