|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 % r" p5 b! V3 K" A
. j2 S* O+ h# L% D$ q& n+ P/ e2 s1 a. _: W' z
因为我不知道问题出在哪里了。。- K8 ]) t0 u8 }. O
do
9 O' B- R, Z( T* v {1 Z# H* o. e0 L9 J" o
//求解不平衡量+ ~! L/ }/ x8 I E
for(i=0;i<nB;i++)9 K6 {2 j' s0 m; z- d, g
{ e8 }1 b: v0 @
if(sB.Type!=2)//假如不是平衡节点
! i; Z4 ^ l$ I0 M, J5 U { + d8 o, Y) |/ w) |9 e, ?$ U
DP=sB.GenP-sB.LoadP;9 O) h: o7 D% I7 w5 o" X" U+ q$ |
DQ=sB.GenQ-sB.LoadQ;; G. [3 m9 L# w( e4 ]( P
0 Z+ ]2 x/ Z7 z4 D for(j=0;j<nB;j++)) E4 R: C( [# s* C8 E1 N
{% H. c; b7 b. Y! L; y9 X4 p
A=sB.Phase-sB[j].Phase;
], a% Y! \8 q8 w: ]! h DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));' h$ @+ ]6 q5 {, r, W! A
4 G( q9 Y. D" m3 m' R- y" \
if(sB.Type==0)//PQ节点6 ?+ j" @7 A& ~" c
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
1 t# ^' N9 U# ^% D, @4 m 3 K( V3 {) n- N
else if(sB.Type==1)//PV节点
3 K+ z4 p4 T+ Z% P' Z: d2 S5 R DQ=0;
% f2 @- j+ P- F3 E }
6 f* f, k% J& y" }8 d- a% E }
' e$ k6 T* }6 S' {( a9 I else if(sB.Type==2)//平衡节点& n) |/ A y- K- K5 v4 ~/ F
DP=DQ=0;
8 h' N& m1 C1 X+ P- _6 Q: @2 Z, k }
4 |1 x+ K$ ^( x( Z. J' b //for(i=0;i<nB;i++)5 V0 x4 Y: K' d: v" B% b
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
4 t3 M, W j9 ]& y$ f6 U2 D4 J0 z9 ?7 H( y" T* J7 x9 `, @& \; m
//求解修正方程0 S# D8 t' x6 |8 W
for(i=0;i<nB-1;i++) S7 B% ]7 F; R& L+ `$ K
AA1=DP[i+1]/sB[i+1].Volt;
S( f% T" D2 h" L for(i=0;i<nB-1-count_PVnode;i++)! a. E/ s( I% e1 d+ {! v
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;' G+ }2 m, J5 [: J
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量7 \& O9 s3 ~1 g7 u+ _
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
% {6 ?% T! L$ K) A# n* m5 j8 U! }0 n$ l2 x' h: R
max1=fabs(AA1[0]);
5 ^; h& x/ @# w4 a1 L l for(i=1;i<nB-1;i++)
, j) S, a& m# n/ `( D5 Z7 G if(max1<fabs(AA1)) E' S5 F/ N R$ i' ?$ b% Y
max1=fabs(AA1);& K( W: Q9 t. H: |# g8 n! P
max2=fabs(AA2[0]);/ C5 C9 g' t3 j: x5 x2 d% Q
for(i=1;i<nB-1-count_PVnode;i++)2 j7 P- r7 q+ T; N! B
if(max2<fabs(AA2))
% x$ R0 j# E( m max2=fabs(AA2);
( K ]) ~4 A& n6 `% U6 n for(i=0;i<nB-1;i++)
' p; T3 h3 N. ^1 S sB[i+1].Phase+=BB1/sB.Volt;
# z% D8 P; `- N' C- m5 _ for(i=0;i<nB-1-count_PVnode;i++)" v6 o8 Y `, r" w# J
sB[i+1+count_PVnode].Volt+=BB2;
) `, {5 ?: H. N; r6 u% e for(i=0;i<nB;i++)6 P* s3 Y# y! ~! T+ G& l
{
$ `+ g* j% S' B) o- w. s printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
0 y/ G' e1 u( @0 q2 v 5 ^/ M! p4 _% h* \+ E
}
6 N8 o- L: k% {7 Q. p/ Z- e$ X. | printf("\n");
) o: ]& ~. Y( F: [. U" U" \ ci++;1 A4 m, I* O- q% S: l
}) T6 ]6 B4 @" H2 A
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);1 Q8 |# e' |- i7 s) Z
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|