题目:一电力系统中,线路额定电压为110KV,导线均采用LGJ-120型的,其参数为r1=0.21Ω/km,x1=0.4Ω/km,b1=2.85×10-6S/km,
线路长度分别为l1=150km,l2=100km,l3=75km。变压器容量为63000kV.A,额定电压为110/11kV,短路电压百分数Uk%=10.5,在-2.5%
分接头上运行。电容器额定容量为5MV.A。若取Sb=100MV.A,Ub=Un,试形成系统的节点导纳矩阵。
输入数据如下:
4 4 1 2 2 0.00001
4 3 0.260331 0.495868 0.025864
1 4 0.173554 0.330579 0.017243
2 2 0.000000 -20.000000 0.000000
3 1 0.130165 0.247934 0.012932
1 2 0.000000 0.166667 1.128205
4 0 0.0 0.0 1.05
3 -1 0.2 0.0 1.05
2 0.5 0.3
4 0.15 0.1
计算程序如下:
#include
#include
#include
#define pnt
void read_data ();
void admt_matrix ();
void form_Jacobian ();
void solv_eqn ();
void node_flow ();
double * * newspacedouble2 (int,int);
void deletespacedouble2 (double * * ,int);
int num_node,num_line,num_tran,num_gene,num_load,iter;
struct data *line,*tran,*gene,*load;
double * * G,* * B, * * Jacob;
double *Um, *Ua, *P, *Q;
double error_max;
FILE *fin,*fou,*chk;
struct data
{
int i;
int j;
double a;
double b;
double c;
};
void main()
{
int i,j,conv;
double a,error;
fin=fopen("输入数据.txt","r");
if(fin==NULL)
{
printf("注意!没有“输入数据.txt”文件\n");
exit(0);
}
fou=fopen("潮流输出.txt","w");
if(pnt==1)
chk=fopen("中间结果.txt","w");
//输入原始数据和形成节点导纳矩阵
read_data();
G=newspacedouble2(num_node,num_node);
B=newspacedouble2(num_node,num_node);
for(i=1;i<=num_node;i++)
for(j=1;j<=num_node;j++)
G[i][j]=B[i][j]=0.0;
admt_matrix();
//给定电压有效值和相位初值
Um=new double[num_node+1];
Ua=new double[num_node+1];
for(i=1;i
{
Um[i]=1.0;
Ua[i]=0.0;
}
for(i=1;i
if(gene[i].j<=0)
Um[gene[i].i]=gene[i].c;
iter=0;
//形成雅克比矩阵计算功率误差
Jacob=newspacedouble2(2*num_node,2*num_node+1);
P=new double [num_node+1];
Q=new double [num_node+1];
R2:form_Jacobian();
//收敛判断
error=0.0;
for(i=1;i<=2*num_node;i++)
if(fabs(Jacob[i][2*num_node+1])>error)
eerror=fabs(Jacob[i][2*num_node+1]);
fprintf(fou,"\n 迭代次数:%2d 最大功率误差:%11.6f",iter+1,error);
if(error
{
conv=1;
goto R1;
}
if((iter>10)||(error>1.0e4))//潮流计算不收敛
{
fprintf(fou,"\n\n 潮流不收敛");
goto nd;
}
//求解修正方程