牛拉法计算C程序Word格式文档下载.docx

上传人:b****6 文档编号:21176570 上传时间:2023-01-28 格式:DOCX 页数:14 大小:16.31KB
下载 相关 举报
牛拉法计算C程序Word格式文档下载.docx_第1页
第1页 / 共14页
牛拉法计算C程序Word格式文档下载.docx_第2页
第2页 / 共14页
牛拉法计算C程序Word格式文档下载.docx_第3页
第3页 / 共14页
牛拉法计算C程序Word格式文档下载.docx_第4页
第4页 / 共14页
牛拉法计算C程序Word格式文档下载.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

牛拉法计算C程序Word格式文档下载.docx

《牛拉法计算C程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《牛拉法计算C程序Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。

牛拉法计算C程序Word格式文档下载.docx

doubleiteration=;

double**Jacob;

double**invJac;

double*dfe;

structNodeType*Node;

structBranchType*Branch;

voidmain()

voidLoadData();

voidFormY();

voidDeltaS();

voidFormJacob();

voidInvJac();

voidUpdateU();

voidCalculatePQ();

intkk;

LoadData();

FormY();

printf("

Î

ó

²

î

¾

«

È

iteration=%lf\n"

iteration);

kk=0;

DeltaS();

while(error>

iteration&

&

kk<

50)

FormJacob();

UpdateU();

kk++;

}

µ

ü

´

ú

Ê

ý

ª

%4d\n"

kk);

CalculatePQ();

Ö

error=%e\n"

error);

\n"

);

¢

:

\nNÎ

½

Ú

ã

º

Å

£

¬

TpÎ

À

à

Ð

Í

¨

Æ

ä

PQ½

PV½

â

©

\nAmpÎ

ç

Ñ

¹

¡

DltaÎ

Ï

»

Ç

PdÎ

³

ö

Ä

Ó

¦

Â

QdÎ

Þ

\nPsÎ

·

QsÎ

BcÎ

Á

Ý

¿

}\n"

voidLoadData()

inti,j;

inttN,tType;

doublete,tf,tPd,tQd,tPs,tQs,tBc;

FILE*fp;

charfilename[50]={"

"

ë

¼

þ

Ã

û

(Ì

á

Ë

ù

Ô

TXTÎ

)£

"

scanf("

%s"

filename);

if((fp=fopen(filename,"

r"

))==NULL)

cannotopenthefile:

return;

fscanf(fp,"

%d"

&

n);

¸

%d\n"

n);

Node=(structNodeType*)malloc(sizeof(structNodeType)*n);

÷

Õ

°

for(i=0;

i<

n;

i++)

%d%d%lf%lf%lf%lf%lf%lf%lf"

Node[i].N,&

Node[i].Type,&

Node[i].e,&

Node[i].f,&

Node[i].Pd,&

Node[i].Qd,&

Node[i].Ps,&

Node[i].Qs,&

Node[i].Bc);

 

if(Node[i].Type==1)

nPQ++;

elseif(Node[i].Type==2)

nPV++;

elseif(Node[i].Type==3)

nPH++;

nPQ);

nPV);

nPH);

for(j=0;

j<

n-1;

j++)

n-j-1;

if(Node[i].Type>

Node[i+1].Type)

tN=Node[i].N;

Node[i].N=Node[i+1].N;

Node[i+1].N=tN;

tType=Node[i].Type;

Node[i].Type=Node[i+1].Type;

Node[i+1].Type=tType;

te=Node[i].e;

Node[i].e=Node[i+1].e;

Node[i+1].e=te;

tf=Node[i].f;

Node[i].f=Node[i+1].f;

Node[i+1].f=tf;

tPd=Node[i].Pd;

Node[i].Pd=Node[i+1].Pd;

Node[i+1].Pd=tPd;

tQd=Node[i].Qd;

Node[i].Qd=Node[i+1].Qd;

Node[i+1].Qd=tQd;

tPs=Node[i].Ps;

Node[i].Ps=Node[i+1].Ps,Node[i+1].Ps=tPs;

tQs=Node[i].Qs;

Node[i].Qs=Node[i+1].Qs;

Node[i+1].Qs=tQs;

tBc=Node[i].Bc;

Node[i].Bc=Node[i+1].Bc;

Node[i+1].Bc=tBc;

Us=(double*)malloc(sizeof(double)*(n-1));

Us[i]=Node[i].e;

nbr);

§

nbr);

Branch=(structBranchType*)malloc(sizeof(structBranchType)*nbr);

nbr;

%d%d%d%lf%lf%lf%lf"

Branch[i].Nbr,&

Branch[i].Nl,&

Branch[i].Nr,&

Branch[i].R,&

Branch[i].X,&

Branch[i].Bn,&

Branch[i].Kt);

Mark=0;

if(Branch[i].Nl==Node[j].N&

Mark==0)

Branch[i].Nl=j+1;

Mark=1;

if(Branch[i].Nr==Node[j].N&

Branch[i].Nr=j+1;

fclose(fp);

voidFormY()

doubleZ2;

G=(double**)malloc(sizeof(double*)*n);

B=(double**)malloc(sizeof(double*)*n);

G[i]=(double*)malloc(sizeof(double)*n);

B[i]=(double*)malloc(sizeof(double)*n);

G[i][j]=0;

B[i][j]=0;

Z2=Branch[i].R*Branch[i].R+Branch[i].X*Branch[i].X;

if(Branch[i].Kt==0)

G[Branch[i].Nl-1][Branch[i].Nr-1]-=Branch[i].R/Z2;

B[Branch[i].Nl-1][Branch[i].Nr-1]+=Branch[i].X/Z2;

G[Branch[i].Nr-1][Branch[i].Nl-1]=G[Branch[i].Nl-1][Branch[i].Nr-1];

B[Branch[i].Nr-1][Branch[i].Nl-1]=B[Branch[i].Nl-1][Branch[i].Nr-1];

else

G[Branch[i].Nl-1][Branch[i].Nr-1]-=Branch[i].R/Z2/Branch[i].Kt;

B[Branch[i].Nl-1][Branch[i].Nr-1]+=Branch[i].X/Z2/Branch[i].Kt;

Z2=Branch[j].R*Branch[j].R+Branch[j].X*Branch[j].X;

if(Branch[j].Kt==0&

(Branch[j].Nl-1==i||Branch[j].Nr-1==i))

G[i][i]=G[i][i]+Branch[j].R/Z2;

B[i][i]=B[i][i]-Branch[j].X/Z2;

elseif(Branch[j].Kt!

=0&

G[i][i]=G[i][i]+Branch[j].R/Z2/Branch[j].Kt;

B[i][i]=B[i][i]-Branch[j].X/Z2/Branch[j].Kt;

B[Branch[i].Nl-1][Branch[i].Nl-1]+=Branch[i].Bn;

B[Branch[i].Nr-1][Branch[i].Nr-1]+=Branch[i].Bn;

B[Branch[i].Nl-1][Branch[i].Nl-1]-=(1-Branch[i].Kt)/Branch[i].Kt/Branch[i].Kt/Branch[i].X;

B[Branch[i].Nr-1][Branch[i].Nr-1]-=(Branch[i].Kt-1)/Branch[i].Kt/Branch[i].X;

B[i][i]=B[i][i]+Node[i].Bc;

voidDeltaS()

mid1=(double*)malloc(sizeof(double)*n);

mid2=(double*)malloc(sizeof(double)*n);

dS=(double*)malloc(sizeof(double)*2*(n-1));

mid1[i]=0;

mid2[i]=0;

mid1[i]=mid1[i]+G[i][j]*Node[j].e-B[i][j]*Node[j].f;

mid2[i]=mid2[i]+G[i][j]*Node[j].f+B[i][j]*Node[j].e;

dS[2*i]=Node[i].Ps-Node[i].Pd-(Node[i].e*mid1[i]+Node[i].f*mid2[i]);

if(i<

nPQ)

dS[2*i+1]=Node[i].Qs-Node[i].Qd-(Node[i].f*mid1[i]-Node[i].e*mid2[i]);

dS[2*i+1]=Us[i]*Us[i]-(Node[i].e*Node[i].e+Node[i].f*Node[i].f);

error=0;

2*(n-1);

if(dS[i]<

0&

error<

-dS[i])

error=-dS[i];

elseif(dS[i]>

dS[i])

error=dS[i];

voidFormJacob()

Jacob=(double**)malloc(sizeof(double*)*2*(n-1));

Jacob[i]=(double*)malloc(sizeof(double)*2*(n-1));

Jacob[i][j]=0;

if(i!

=j)

Jacob[2*i][2*j]=B[i][j]*Node[i].e-G[i][j]*Node[i].f;

Jacob[2*i][2*j+1]=-G[i][j]*Node[i].e-B[i][j]*Node[i].f;

Jacob[2*i][2*i]=B[i][i]*Node[i].e-G[i][i]*Node[i].f-mid2[i];

Jacob[2*i][2*i+1]=-G[i][i]*Node[i].e-B[i][i]*Node[i].f-mid1[i];

nPQ;

Jacob[2*i+1][2*j]=G[i][j]*Node[i].e+B[i][j]*Node[i].f;

Jacob[2*i+1][2*j+1]=B[i][j]*Node[i].e-G[i][j]*Node[i].f;

Jacob[2*i+1][2*i]=G[i][i]*Node[i].e+B[i][i]*Node[i].f-mid1[i];

Jacob[2*i+1][2*i+1]=B[i][i]*Node[i].e-G[i][i]*Node[i].f+mid2[i];

for(i=nPQ;

if(i==j)

Jacob[2*i+1][2*i]=-2*Node[i].f;

Jacob[2*i+1][2*i+1]=-2*Node[i].e;

voidInvJac()

inti,j,k;

doubletemp;

invJac=(double**)malloc(sizeof(double*)*2*(n-1));

invJac[i]=(double*)malloc(sizeof(double)*2*(n-1));

invJac[i][j]=0;

invJac[i][j]=1;

temp=Jacob[j][i]/Jacob[i][i];

for(k=0;

k<

k++)

Jacob[j][k]-=Jacob[i][k]*temp;

invJac[j][k]-=invJac[i][k]*temp;

if(Jacob[i][i]!

=1)

temp=Jacob[i][i];

invJac[i][j]=invJac[i][j]/temp;

voidUpdateU()

dfe=(double*)malloc(sizeof(double)2*(n-1));

InvJac();

dfe[i]=0;

dfe[i]-=invJac[i][j]*dS[j];

Node[i].e+=dfe[2*i+1];

Node[i].f+=dfe[2*i];

voidCalculatePQ()

mid1[n-1]=0;

mid2[n-1]=0;

mid1[n-1]=mid1[n-1]+G[n-1][j]*Node[j].e-B[n-1][j]*Node[j].f;

mid2[n-1]=mid2[n-1]+G[n-1][j]*Node[j].f+B[n-1][j]*Node[j].e;

Node[n-1].Ps=Node[n-1].e*mid1[n-1];

Node[n-1].Qs=-Node[n-1].e*mid2[n-1];

Node[i].Qs=Node[i].f*mid1[i]-Node[i].e*mid2[i];

if(Node[i].N>

Node[i+1].N)

te=sqrt(Node[i].e*Node[i].e+Node[i].f*Node[i].f);

tf=atan(Node[i].f/Node[i].e)*180/PI;

Node[i].e=te;

Node[i].f=tf;

×

NTpAmpDltaPdQdPsQsBc\n"

%4d%4d%%%%%%%\n"

Node[i].N,Node[i].Type,Node[i].e,Node[i].f,Node[i].Pd,Node[i].Qd,Node[i].Ps,Node[i].Qs,Node[i].Bc);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1