|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 % P) m1 c) `& i
- ^' l! m* K9 Y I! f6 V
+ A0 P5 M/ [4 y3 z- D6 i 因为我不知道问题出在哪里了。。
0 [; s. s7 \3 Q* t. Qdo
7 d4 N @$ Z# L; d. Q7 @9 H {
( E: W% V& ?% W8 v8 E0 @3 l7 h //求解不平衡量/ `5 ~1 B' n6 G9 C) ?! X7 R
for(i=0;i<nB;i++)
: u7 h+ v( l' H. b6 l: Q {! ^ U4 T) u! C
if(sB.Type!=2)//假如不是平衡节点
, w5 ` v5 Z- Z/ ] {
' p# H2 K9 Z' q2 i" u DP=sB.GenP-sB.LoadP;
6 |- }+ P: I2 ^ DQ=sB.GenQ-sB.LoadQ;% ^% p( x+ `! D/ u' {2 m
, d& D1 l% j; _! y' w% d4 e6 b
for(j=0;j<nB;j++)
) X O7 d2 f5 K/ v {3 R v& S9 ^/ ]8 E
A=sB.Phase-sB[j].Phase;4 u; _& Z0 T M& Y/ O1 |
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
H" ?7 h# e. K) M5 y . a6 `4 @6 O* s& |! U
if(sB.Type==0)//PQ节点
6 R4 c) F/ ]. K! \( L4 T+ F) W9 \ DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
& k- ~* G8 ~0 Y' t5 i
" p( d3 Y- u! C else if(sB.Type==1)//PV节点
% F2 v$ Z/ I8 g% ^$ y o# a' r DQ=0;
_) [2 U( c6 N7 x9 a6 [+ c }
( N7 J3 E" O& l; A3 t/ p$ c* y }
: ?0 O, @' {1 H' x5 b& |7 b6 }& B( f else if(sB.Type==2)//平衡节点
. e# f$ ]8 h" m( U! F, [: p) m* Q6 N DP=DQ=0;
8 n5 Q7 k9 v0 S, W, I2 e# ]- O, W; ^ }
% s8 {8 z# n0 r, }" J //for(i=0;i<nB;i++)$ i, v/ x6 [' W- e
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ); O* Q$ k8 D8 ^1 W1 y( i9 Y
}9 \8 h+ w4 s! n* M/ [+ C //求解修正方程) e5 @* ]& }/ K. b2 h( u V
for(i=0;i<nB-1;i++)9 Y" k& H" B8 }9 u1 x
AA1=DP[i+1]/sB[i+1].Volt;
) n+ A: D8 {# ~# K# r for(i=0;i<nB-1-count_PVnode;i++)3 T4 A) g0 P1 i8 @
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;" \. {5 L3 U- T2 o! U2 L1 G
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
: K5 v0 z; o9 i2 l calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);7 }/ H7 o B- Q
! } @, C0 B. a3 ]. G) k" R6 w, b max1=fabs(AA1[0]);
1 n4 E- C: |2 Z! A4 S: V for(i=1;i<nB-1;i++)- w/ T+ S" j9 H/ [2 z' x) w
if(max1<fabs(AA1))
/ w- g$ ?$ l6 ]1 _ max1=fabs(AA1);/ s. g4 G F9 b+ z4 |$ t
max2=fabs(AA2[0]);+ `$ Y7 a7 }' M" O9 s4 W- c
for(i=1;i<nB-1-count_PVnode;i++)
: t7 ?; c; s6 E" B+ q% i: K if(max2<fabs(AA2))
1 b5 y# {' h1 h# o6 \ max2=fabs(AA2);% G, m$ `; @4 ]5 i
for(i=0;i<nB-1;i++)
4 `: | W. S* r" S+ T4 t, ? sB[i+1].Phase+=BB1/sB.Volt;
3 U1 q" K4 q S1 S6 B4 T. A for(i=0;i<nB-1-count_PVnode;i++)+ j" V0 D! z: D2 q9 P
sB[i+1+count_PVnode].Volt+=BB2;5 O- V$ U$ h% A
for(i=0;i<nB;i++)
1 {( k# O& T* H, B/ Z+ @ {
& h- Q% u! K! E0 s' A4 `+ V printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
9 X q" o" \1 |8 G4 Q
# r7 A0 N, V2 I& D }
! q2 k% F1 h5 s printf("\n");: [8 A$ r8 G7 {7 W
ci++;# `, |. `9 n( `) Z, l
}- |3 W% c* @; L* M$ t% G
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
7 P2 B. K" B& V. @- L8 W这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|