稀疏化形成节点导纳矩阵
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct jdlb *insert1(struct jdlb *tp,struct jdlb *z) //节点导纳矩阵插入指针数据{
struct jdlb *p0,*p111,*p112;
double r,r1,x,x1;
kk=0;
p111=tp;
p0=z;
if(p0==null)
return(tp);
if(tp==null)
{ tp=p0;
p0->next=null;
return(tp);
}
if(p0->lnxt
{ tp=p0;
p0->next=p111;
return(tp);
}
while((p0->lnxt>p111->lnxt)&&(p111->next!=null))
{ p112=p111;
p111=p111->next;
}
if(p0->lnxt==p111->lnxt) //两点间有多条线路或变压器
{ r=p111->fu*cos(p111->jd);
x=p111->fu*sin(p111->jd);
r1=p0->fu*cos(p0->jd);
x1=p0->fu*sin(p0->jd);
r=r+r1;
x=x+x1;
x1=sqrt(r*r+x*x);
p111->fu=x1;
p111->jd=atan2(x,r);
kk=1;
return(tp);
}
if((p111->next==null)&&(p0->lnxt>p111->lnxt))
{ p111->next=p0;
p0->next=null;
}
else
{ p112->next=p0;
}
return(tp);
}
//线路部分形成节点导纳矩阵
p1=(struct jdlb *)malloc(len);
p2=(struct jdlb *)malloc(len);
p3=headlij; //线路部分
while(p3!=null) //形成节点导纳矩阵,可为双边的{ r=p3->fu;
x=p3->jd;
bb=p3->bb;
i=p3->i;
j=p3->j;
gij=r/(r*r+x*x);
bij=-x/(r*r+x*x);
r=-gij;
x=-bij;
tmp=sqrt(r*r+x*x);
if(tmp!=0)
{ p1->irow=i;
p1->lnxt=j;
p1->fu=tmp;
p1->jd=atan2(x,r);
a[i]=insert1(a[i],p1);
if(kk==0)
p1=(struct jdlb *)malloc(len);
p2->irow=j;
p2->lnxt=i;
p2->fu=tmp;
p2->jd=atan2(x,r);
a[j]=insert1(a[j],p2);
if(kk==0)
p2=(struct jdlb *)malloc(len);
}
p3->fu=tmp;
p3->jd=atan2(x,r);
p3->bb=bb;
g[i]=g[i]+gij;
b[i]=b[i]+bij+bb;
g[j]=g[j]+gij;
b[j]=b[j]+bij+bb;
}
k=1;
p4=headbyq;
while(p4!=null) //变压器部分
{ i=p4->i;
j=p4->j;
r=p4->r;
x=p4->x;
k0=p4->kk;
gij=r/(r*r+x*x);
bij=-x/(r*r+x*x);
k0=1/k0; //在计变压器变比时用1/k0来做变量,既用倒数来做变量r=-gij*k0;
x=-bij*k0;
tmp=sqrt(r*r+x*x);
if(tmp!=0)
{ p1->irow=i;
p1->lnxt=j;
p1->fu=tmp;
p1->jd=atan2(x,r);
a[i]=insert1(a[i],p1);
if(kk==0)
p1=(struct jdlb *)malloc(len);
p2->irow=j;
p2->lnxt=i;
p2->fu=tmp;
p2->jd=atan2(x,r);
a[j]=insert1(a[j],p2);
if(kk==0)
p2=(struct jdlb *)malloc(len);
}
g[i]=g[i]+gij*k0*k0;
b[i]=b[i]+bij*k0*k0;
g[j]=g[j]+gij;
b[j]=b[j]+bij;
p4=p4->next;
}
free(p1);
free(p2);
p5=headjdzl;