潮流计算C++程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序为计算书3-4的过程
程序可以解决开式单直网络和树状网络的计算。树状网络计算时要自己先设定好支路的起始节点和终止节点标号以及计算顺序源代码:
#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 fin>>u[i]; }; double *p;//节点有功功率 p=new double[num_n]; for(int i=0;i fin>>p[i]; }; double *q;//节点无功功率 q=new double[num_n]; for(int i=0;i fin>>q[i]; }; for(int i=0;i nod[i].i=i; nod[i].P=p[i]; nod[i].Q=q[i]; nod[i].U=u[i]; }; double *r;//线路电阻 r=new double[num_l]; for(int i=0;i fin>>r[i]; }; double *x;//线路电抗 x=new double[num_l]; for(int i=0;i fin>>x[i]; }; double *b;//线路电纳 b=new double[num_l]; for(int i=0;i fin>>b[i]; }; for(int i=0;i lin[i].R=r[i]; lin[i].X=x[i]; lin[i].B=b[i]; }; for(int i=0;i fin>>lin[i].f_node.i; fin>>lin[i].s_node.i; }; for(int i=0;i nod[lin[i].f_node.i].Q-=lin[i].B*nod[lin[i].f_node.i].U*nod[lin[i].f_node.i].U; nod[lin[i].s_node.i].Q-=lin[i].B*nod[lin[i].s_node.i].U*nod[lin[i].s_node.i].U; }; double *P_c,*Q_c;//保存运算负荷数据 P_c=new double[num_n]; Q_c=new double[num_n]; for(int tc=0;tc P_c[tc]=nod[tc].P; Q_c[tc]=nod[tc].Q; }; for(int i=0;i lin[i].Set_node(nod[lin[i].f_node.i],nod[lin[i].s_node.i]); }; for(int re=0;re<3;re++){//迭代运算开始 fout<<"第"< double to_P(0),to_dP(0); for(int i=1;i to_P+=nod[i].P; }; for(int tc=0;tc nod[tc].P=P_c[tc]; nod[tc].Q=Q_c[tc];