稀疏化形成节点导纳矩阵

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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->lnxtlnxt)

{ 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;

相关文档
最新文档