|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 0 a: _! {" |) Y z3 T0 p
& ?$ O4 c/ T) a: \& E4 k: Q; h8 H. D" Y7 f
因为我不知道问题出在哪里了。。4 c+ \ I/ t& c4 V7 j
do O Z7 |8 T, B+ v5 W0 u% h
{* F8 f! l" K% q; R3 p8 H
//求解不平衡量
/ V" a5 s- H5 L' K, I0 H for(i=0;i<nB;i++)
0 {! \2 P& Q* J5 q; K+ s7 P. r {% g1 Y& k4 D( l7 y( A
if(sB.Type!=2)//假如不是平衡节点
: `* H4 s) N" m- Q& a- W { ?' H5 Y5 ^, H8 [0 j
DP=sB.GenP-sB.LoadP;
! j7 g" m: b" p0 b/ ~. s3 ] DQ=sB.GenQ-sB.LoadQ;
8 `* D+ |6 I8 m
6 h. ]+ R) ]- ^6 H for(j=0;j<nB;j++)* D4 f# k- }0 A% W# x2 b
{5 Q- o% c! C3 X0 _2 F- R0 g2 l1 g' E
A=sB.Phase-sB[j].Phase;! H3 i |* H; y b( c( J w
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
+ j P% K" i5 v! x9 c; o4 i9 O 6 u! T7 W0 H+ _: k
if(sB.Type==0)//PQ节点 \5 q/ o% H1 C2 |3 d6 B
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
, `# J. i/ a" c2 D% v/ A" \# p4 A$ Y ( A& l ]) l/ v1 ]( f% m
else if(sB.Type==1)//PV节点/ t. e* E6 h% K9 I5 E
DQ=0;$ D) n! d; a5 s
}" z0 A. [5 p2 q- _1 K9 |1 L7 i
}
! ]1 P' I0 p% k else if(sB.Type==2)//平衡节点
5 U% w) W# j( r: w, R' Y. D DP=DQ=0;" {- Z9 |( E$ U! i, ?4 w
}
, D6 N7 J; {1 Y# W //for(i=0;i<nB;i++)9 k* U8 J* A. X Y, X; ?3 p$ W
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);( N6 {( C+ c; y+ @; {# y
5 z% q3 w8 s/ f M. x //求解修正方程
3 y& K/ v7 Q0 x& I! ?5 k) g( s" J for(i=0;i<nB-1;i++)' S" ? ~# d' w, q8 J
AA1=DP[i+1]/sB[i+1].Volt;
3 A: o K* [3 Q+ B2 X for(i=0;i<nB-1-count_PVnode;i++)( x' J: @3 r# T5 P0 K8 w, E8 Q& I
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;8 B3 V, U! ]2 A: W/ p
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
9 u. K' @/ U8 q( S4 C7 O calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);% ?$ A" R6 | b r1 T; ]& a2 K4 c. B* v) B% C
# d! z W! _& J9 g+ q G
max1=fabs(AA1[0]);
8 f0 g4 {& \! ^. z" o7 ? for(i=1;i<nB-1;i++)2 M- l+ a( m9 a' \
if(max1<fabs(AA1))
0 L4 O" i/ M7 M/ ~, T' [, ` max1=fabs(AA1);6 R. F0 M# e8 e8 V1 e' c7 Y* J
max2=fabs(AA2[0]);
) r. W( A; J- ?" K) n. c; z for(i=1;i<nB-1-count_PVnode;i++)/ \7 [4 L* D( x3 ~
if(max2<fabs(AA2))
+ O/ ] N( O( b+ o) m Y/ U, E/ S max2=fabs(AA2);
& z5 j- ~- s! ~% c for(i=0;i<nB-1;i++)
' `4 S$ }; H1 K; B! ?* Z sB[i+1].Phase+=BB1/sB.Volt;8 o" k* `4 n" j2 v; v6 @# h; s
for(i=0;i<nB-1-count_PVnode;i++)
5 d& G3 t) S( ] sB[i+1+count_PVnode].Volt+=BB2;
1 b% _, M) E* N$ S/ t for(i=0;i<nB;i++)
. v8 V/ l, R& d: g: m* c {
. @% q/ p1 j' o1 }& p( T printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);: J! Y& l3 q3 K8 o0 a
& b3 ?, n, r( c8 [" [ }
) P9 h* l3 c! k) ^ n4 u printf("\n");9 ]# L; Y7 Y5 [% _0 w
ci++;6 H* P. b5 |/ n
}7 w& I& t' g4 M; N) L, B
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);; v. c a% H6 C' q
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|