|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 ' x6 S/ u( s, w6 [2 D5 y: N
: W* _, Q, H( J2 T1 E# G, a8 S* j' V* p% _& G0 u6 y/ h
因为我不知道问题出在哪里了。。, ?7 L" ]0 g+ N
do
0 I/ n5 D' L. S# m {4 ~! x/ d! A- v5 [; L7 i0 a% |( b
//求解不平衡量% C: l. G# C& v9 A( Q; z
for(i=0;i<nB;i++)
8 P6 O; Q- G' s5 t( A {
& R2 J( Z- B, e' N3 i; { if(sB.Type!=2)//假如不是平衡节点
$ t: E- d$ Z. J. a9 y" g {
( ^1 p& S F* Q: ?( d6 c$ \4 t DP=sB.GenP-sB.LoadP;
) N8 ?3 I: d3 v DQ=sB.GenQ-sB.LoadQ;
& u: ?: s% j5 o2 q7 J+ @# X! |% V ( F+ K/ o6 \9 R% O4 o
for(j=0;j<nB;j++)( Q& E- s9 @+ f6 q4 i! z
{1 J6 u: q; s( g8 t% e+ T" b! a: h
A=sB.Phase-sB[j].Phase;
, M% ]8 A) T2 s, ^7 O" N DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
8 s1 _6 k! I0 P
- l/ U9 U. R. _; ^* \: I if(sB.Type==0)//PQ节点
, e2 j: h4 O, h1 Q DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));* @# Q" g* S: a1 b, x
3 R G6 z6 v7 Y0 R else if(sB.Type==1)//PV节点
1 B/ V2 N: C9 s6 m V# v DQ=0;
. @& b9 z4 ]7 F' H/ ] }4 h5 I# w5 Y/ N; W+ S/ F
}
/ ^/ _$ F/ K8 U% b8 P else if(sB.Type==2)//平衡节点9 V* f2 C8 \8 f% e
DP=DQ=0;
# f1 R' B% R! _9 O; W( t }
- E4 u! D3 H8 x //for(i=0;i<nB;i++)
3 l. s } h( r8 M% \ // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
+ d* `! S3 {# I4 n3 f- @ x4 W3 l& T, S; ]
//求解修正方程
@( R9 f: ^* n5 T4 { for(i=0;i<nB-1;i++)
3 q- d/ f6 ~6 x; J! [ AA1=DP[i+1]/sB[i+1].Volt;: K$ D7 N4 y$ o1 w# l
for(i=0;i<nB-1-count_PVnode;i++)
0 t- K5 S& S8 @9 ~, a Z AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
: {* k, `# u3 m5 t7 F, l3 q calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量9 d! m3 }9 ~+ ?( G
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);, o; i6 ^' c5 U# ~" e: \" d
1 Z: U* K/ R; u0 |+ d$ Y2 o max1=fabs(AA1[0]);
0 n7 y- L6 v- [ U7 \1 b ]- v6 X for(i=1;i<nB-1;i++)
. |! j! |1 a! W% s1 a if(max1<fabs(AA1))
* m* D" f; ^& [2 D/ c. F max1=fabs(AA1);
5 [4 s V1 x: e- K* \ } max2=fabs(AA2[0]);: z( i3 k/ Y m, N4 L
for(i=1;i<nB-1-count_PVnode;i++)# [' _; k& }+ ~6 i
if(max2<fabs(AA2)) , _3 z! l( h! V8 ~( y" u
max2=fabs(AA2);
; o/ o9 N- t9 \- P/ D* i6 p for(i=0;i<nB-1;i++)
! H+ x. _! F; Q4 e- B0 V4 A0 } sB[i+1].Phase+=BB1/sB.Volt;
" T) T3 U3 h6 F' j4 \ for(i=0;i<nB-1-count_PVnode;i++)
$ V5 b. h7 ^2 l H& c sB[i+1+count_PVnode].Volt+=BB2;7 }1 h' B! ?& K: f; X
for(i=0;i<nB;i++)
Q9 I4 D( u+ z% o2 N' n" g; x f { ) f- T+ E) [) p1 ^2 t. A& X% w
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);9 B/ u O6 n! G9 O
N: H- w& }* U) ]7 q$ a
}
5 l( J" f6 j5 |- W( \6 _8 J# w printf("\n");
7 v: ~7 ^. o& q ci++;2 P2 q7 z6 q0 v1 ] l# d
}8 T+ a/ T9 ~9 ]% E3 F) @
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
: f2 c9 ]# ~7 l. c E这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|