没有合适的资源?快使用搜索试试~ 我知道了~
潮流计算法
3星 · 超过75%的资源 需积分: 3 2 下载量 98 浏览量
2014-06-05
21:18:45
上传
评论 2
收藏 96KB DOC 举报
温馨提示
试读
16页
极坐标下的潮流计算方法,采用C语言编程来计算各节点电压,通过迭代,算出个点功率
资源推荐
资源详情
资源评论
/*本程序利用牛顿-拉夫逊迭代法(极坐标形式),计算复杂电力系统潮流,具有收敛性好,
收敛速度快等优点。所有参数应归算至标幺值下。
/*可计算最大节点数为 100,可计算 PQ,PV,平衡节点*/
/*可计算非标准变和平行支路*/
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#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,&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 华北电力大学 电力 1104
谭程凯 201105030119\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;
}
/*--------------------------------计算节点导纳矩阵----------------------------------*/
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++) /*节点导纳矩阵的主对角线上的元素,非对地导纳
加入相应的主对角线元素中(考虑非标准变比)*/
for(j=1;j<=m;j++)
if(zl[j].p1==i)
{
if(zl[j].kx==1)
{
mozhi(zl[j].r,zl[j].x);
if(mo==0) continue;
shang(1,0,zl[j].r,zl[j].x);
G[i][i]+=c2;
B[i][i]+=d2;
}
else
{
mozhi(zl[j].r,zl[j].x);
if(mo==0) continue;
shang(1,0,zl[j].r,zl[j].x);
G[i][i]+=c2/zl[j].kx+c2*(1-zl[j].kx)/(zl[j].kx*zl[j].kx);
B[i][i]+=d2/zl[j].kx+d2*(1-zl[j].kx)/(zl[j].kx*zl[j].kx);
}
}
else if(zl[j].p2==i)
{
if(zl[j].kx==1)
{
mozhi(zl[j].r,zl[j].x);
if(mo==0) continue;
shang(1,0,zl[j].r,zl[j].x);
G[i][i]+=c2;
B[i][i]+=d2;
}
else
{
mozhi(zl[j].r,zl[j].x);
if(mo==0) continue;
shang(1,0,zl[j].r,zl[j].x);
G[i][i]+=c2/zl[j].kx+c2*(zl[j].kx-1)/zl[j].kx;
B[i][i]+=d2/zl[j].kx+d2*(zl[j].kx-1)/zl[j].kx;
}
剩余15页未读,继续阅读
资源评论
- i321oo662014-06-08这个东西还不错,有点用
离瑰345
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功