牛顿-拉夫逊迭代法极坐标潮流计算C语言程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*利用牛顿-拉夫逊迭代法(极坐标形式),计算复杂电力系统潮流,具有收敛性好,收敛速度快等优点。所有参数应归算至标幺值下。

/*可计算最大节点数为100,可计算PQ,PV,平衡节点*/

/*可计算非标准变比和平行支路*/

#include

#include

#include

#define M 100 /*最大矩阵阶数*/

#define Nl 100 /*迭代次数*/

int i,j,k,a,b,c; /*循环控制变量*/

int t,l;

double P,Q,H,J; /*中间变量*/

int n, /*节点数*/

m, /*支路数*/

pq, /*PQ节点数*/

pv; /*PV节点数*/

double eps; /*迭代精度*/

double aa[M],bb[M],cc[M],dd[M],max, rr,tt; /*中间变量*/

double mo,c1,d1,c2,d2; /*复数运算函数的返回值*/ double G[M][M],B[M][M],Y[M][M]; /*节点导纳矩阵中的实部、虚部及其模方值*/

double ykb[M][M],D[M],d[M],dU[M]; /*雅克比矩阵、不平衡量矩阵*/

struct jd /*节点结构体*/

{ int num,ty; /* num为节点号,ty为节点类型*/ double p,q,S,U,zkj,dp,dq,du,dj; /*节点有功、无功功率,功率模值,电压模值,阻抗角

牛顿--拉夫逊中功率不平衡量、电压修正量*/

} jd[M];

struct zl /*支路结构体*/

{ int numb; /*numb为支路号*/

int p1,p2; /*支路的两个节点*/

double kx; /*非标准变比*/

double r,x; /*支路的电阻与电抗*/ } zl[M];

FILE *fp1,*fp2;

void data() /* 读取数据*/

{

int h,number;

fp1=fopen("input.txt","r");

fscanf(fp1,"%d,%d,%d,%d,%lf\n",&n,&m,&pq,&pv,&eps); /*输入节点数,支路数,PQ

节点数,PV节点数和迭代精度*/

for(i=1;i<=n;i++) /*输入节点编号、类型、输入功率和电压初值*/

{

fscanf(fp1,"%d,%d",&number,&h);

if(h==1) /*类型h=1是PQ节点*/

{

fscanf(fp1,"%lf,%lf,%lf,%lf\n",&jd[i].p,&jd[i].q,&jd[i].U,&jd[i].zkj);

jd[i].num=number;

jd[i].ty=h;

}

if(h==2) /*类型h=2是pv节点*/

{

fscanf(fp1,",%lf,%lf,%lf\n",&jd[i].p,&jd[i].U,&jd[i].zkj);

jd[i].num=number;

jd[i].ty=h;

jd[i].q=-1.567;

}

if(h==3) /*类型h=3是平衡节点*/

{

fscanf(fp1,",%lf,%lf\n",&jd[i].U,&jd[i].zkj);

jd[i].num=number;

jd[i].ty=h;

}

}

for(i=1;i<=m;i++) /*输入支路阻抗*/

fscanf(fp1,"%d,%lf,%d,%d,%lf,%lf\n",&zl[i].numb,&zl[i].kx,&zl[i].p1,&zl[i].p2,&zl[i].r,&zl[i].x );

fclose(fp1);

if((fp2=fopen("output.txt","w"))==NULL)

{

printf(" can not open file!\n");

exit(0);

}

fprintf(fp2," 电力系统潮流计算\n ");

fprintf(fp2," ********** 原始数据*********\n");

fprintf(fp2,"============================================================= ===================\n");

fprintf(fp2," 节点数:%d 支路数:%d PQ节点数:%d PV节点数:%d 精度:%f\n",

n,m,pq,pv,eps);

fprintf(fp2," ------------------------------------------------------------------------------\n");

for(i=1;i<=pq;i++)

fprintf(fp2," PQ节点: 节点%d P[%d]=%f Q[%d]=%f\n",

jd[i].num,jd[i].num,jd[i].p,jd[i].num,jd[i].q);

for(i=pq+1;i<=pq+pv;i++)

fprintf(fp2," PV节点: 节点%d P[%d]=%f U[%d]=%f 初值Q[%d]=%f\n",

jd[i].num,jd[i].num,jd[i].p,jd[i].num,jd[i].U,jd[i].num,jd[i].q);

fprintf(fp2," 平衡节点: 节点%d e[%d]=%f f[%d]=%f\n",

jd[n].num,jd[n].num,jd[n].U,jd[n].num,jd[n].zkj);

fprintf(fp2," -------------------------------------------------------------------------------\n");

for(i=1;i<=m;i++)

fprintf(fp2," 支路%d: 相关节点:%d,%d 非标准变比:kx=%f R=%f X=%f \n", i,zl[i].p1,zl[i].p2,zl[i].kx,zl[i].r,zl[i].x);

fprintf(fp2,"

====================================================================== ========\n");

}

/*------------------------------------复数运算函数--------------------------------------*/

double mozhi(double a0,double b0) /*复数求模值函数*/

{ mo=sqrt(a0*a0+b0*b0);

return mo;

}

double ji(double a1,double b1,double a2,double b2) /*复数求积函数a1为电压模值,a2为阻抗角,a3为导纳实部,a4为导纳虚部*/

{ a1=a1*cos(b1);

b1=a1*tan(b1);

c1=a1*a2-b1*b2;

d1=a1*b2+a2*b1;

return c1;

return d1;

}

double shang(double a3,double b3,double a4,double b4) /*复数除法求商函数*/

{ c2=(a3*a4+b3*b4)/(a4*a4+b4*b4);

d2=(a4*b3-a3*b4)/(a4*a4+b4*b4);

return c2;

return d2;

}

相关文档
最新文档