/*利用牛顿-拉夫逊迭代法(极坐标形式),计算复杂电力系统潮流,具有收敛性好,收敛速度快等优点。所
有
参
数
应
归
算
至
标
幺
值
下
。
/*可计算最大节点数为100,可计算PQ,PV,平衡节点*/ /*可计算非标准变比和平行支路*/ #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, 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; double p,q,S,U,zkj,dp,dq,du,dj; 抗角
修正量*/ } jd[M];
struct zl { int numb; int p1,p2;
double kx;
double r,x; } zl[M]; FILE *fp1,*fp2;
void data() {
int h,number;
fp1=fopen(\
/*最大矩阵阶数*/ /*迭代次数*/ /*循环控制变量*/ /*中间变量*/ /*节点数*/ /*支路数*/ /*PQ节点数*/ /*PV节点数*/ /*迭代精度*/ /*中间变量*/ /*复数运算函数的返回值*/
/*节点导纳矩阵中的实部、虚部及其模方值 /*雅克比矩阵、不平衡量矩阵*/ /*节点结构体*/
/* num为节点号,ty为节点类型*/ /*节点有功、无功功率,功率模值,电压模值,阻 牛顿--拉夫逊中功率不平衡量、电压
/*支路结构体*/ /*numb为支路号*/ /*支路的两个节点*/ /*非标准变比*/ /*支路的电阻与电抗*/
/* 读取数据 */ fscanf(fp1,\ /*输入节点数,支路数,PQ节点数,PV节点数和迭代精度*/
for(i=1;i<=n;i++) /*输入节点编号、类型、输入功率和电压初值*/ {
fscanf(fp1,\{
fscanf(fp1,\
if(h==1) /*类型h=1是PQ节点*/
jd[i].num=number; jd[i].ty=h;
} {
fscanf(fp1,\
if(h==2) /*类型h=2是pv节点*/
jd[i].num=number; jd[i].ty=h;
jd[i].q=-1.567;
}
if(h==3) /*类型h=3是平衡节点*/ {
fscanf(fp1,\ jd[i].num=number; jd[i].ty=h; } }
fscanf(fp1,\
for(i=1;i<=m;i++) /*输入支路阻抗*/ fclose(fp1);
if((fp2=fopen(\ {
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); jd[n].num,jd[n].num,jd[n].U,jd[n].num,jd[n].zkj);
fprintf(fp2,\ 平衡节点: 节点%d e[%d]=%f f[%d]=%f\\n\ 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); }
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); }
/*--------------------------------计算节点导纳矩阵----------------------------------*/ void Form_Y() {
for(i=1;i<=n;i++) /*节点导纳矩阵元素附初值*/
for(j=1;j<=n;j++)
G[i][j]=B[i][j]=0;
for(i=1;i<=n;i++) /*节点导纳矩阵的主对角线上的元素,非对地导 return c2; return d2; c1=a1*a2-b1*b2; d1=a1*b2+a2*b1; return c1; return d1;
纳加入相应的主对角线元素中(考虑非标准变比)*/