|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
; `- A9 @& M( ?8 ` X5 J2 {$ N5 r0 S# E
, A. K! [/ x! p" l _7 J
因为我不知道问题出在哪里了。。
! C% G6 Y# y! ?, ~: Odo 0 n6 a( M8 n: r/ v& `/ U
{5 |' k1 H8 }8 h) m% L
//求解不平衡量' ` M/ j: i' ?5 v
for(i=0;i<nB;i++); n5 o1 b7 L3 B. m1 u- h1 R; Y& d5 |2 N
{, g. |& Q8 ]( ?1 ^5 |
if(sB.Type!=2)//假如不是平衡节点
3 A$ U& e% w) V+ M2 u {
. p9 c; k+ W* ~ DP=sB.GenP-sB.LoadP;
g) N8 s% l1 D" U) P DQ=sB.GenQ-sB.LoadQ;+ r0 B4 A+ B P7 {9 p; a. \
0 c' X: i: I; N |/ g/ k. G, I for(j=0;j<nB;j++)
) x! {- I `4 T1 C3 f1 z% l {
/ d. y# o& ?7 H, Q1 a; U A=sB.Phase-sB[j].Phase;* k' D# A1 H) p+ b% J
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));5 ~& G& m- n5 j& {/ @: v# V
$ b& S! g; l% r# m: }% @8 p* [( A if(sB.Type==0)//PQ节点# f3 M. o/ G, o" }! h a" q% F6 w
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
5 i( G) b, d6 o# Y6 e' F1 f
) n# D2 q9 H. f- h else if(sB.Type==1)//PV节点
4 ^6 i0 {' g3 _7 Z9 L DQ=0;
( y9 C+ B }0 h2 @' K }
6 Y5 S1 T' a0 m! e8 s3 m( ~ }5 Z" j) i+ X6 K+ z; B4 | m9 \
else if(sB.Type==2)//平衡节点
% D+ n# V- {' a0 ` DP=DQ=0;
! z- ?/ n' a$ r1 X$ s* E8 Z } $ g5 W( z3 S! C! U! Q8 ]
//for(i=0;i<nB;i++); a( I ]4 a0 Z% H% f/ e7 _
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);0 ?% q( |- Q1 x A1 w7 W0 t5 u% E6 l
3 | k% u% V- g/ U$ `1 K7 Q: U9 z
//求解修正方程
& L% l ]- X% u for(i=0;i<nB-1;i++)) V# g& c: O: d: k
AA1=DP[i+1]/sB[i+1].Volt;2 V. f) [+ v" N5 c3 T2 F
for(i=0;i<nB-1-count_PVnode;i++). v* L/ K! X5 t$ o9 b
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
, ^1 H! q0 J7 q9 i/ C6 E calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量% _4 ~8 H; p, b1 m- n
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
. m0 C2 |/ B* L% X+ ~/ @3 P% Q% H) E5 U Q: w) `- X( [
max1=fabs(AA1[0]);! e9 K/ ~, M! u6 R* b2 W$ y( R& V
for(i=1;i<nB-1;i++)
8 u8 H. Z4 B6 x) w/ ~ if(max1<fabs(AA1)) ' w5 m3 J1 F; G* _
max1=fabs(AA1);" y. b- J- l1 [2 b* s3 `! S
max2=fabs(AA2[0]);
1 x3 B" U& _" H: X for(i=1;i<nB-1-count_PVnode;i++)
9 \$ R- A! ^6 O/ d; a! V if(max2<fabs(AA2))
p+ `! ` M) X' ]3 f' y# L6 ^ max2=fabs(AA2);5 r. p9 |2 ^2 d- R
for(i=0;i<nB-1;i++)* Z1 L$ g( {- x7 [ h
sB[i+1].Phase+=BB1/sB.Volt;
5 v, Z# M& @4 O& M for(i=0;i<nB-1-count_PVnode;i++)9 X8 n% c( B% c' y; @
sB[i+1+count_PVnode].Volt+=BB2;# T8 o: A# U6 T6 p0 ]& j
for(i=0;i<nB;i++)
- M+ L1 Z0 P- A! J' r& {& } { ! z- m. f5 w8 _- D8 k* U4 ^3 r
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
- e+ U( k C0 B ]0 \# h
8 N8 _& z& t7 b5 j* ] }' C/ w: Z/ g8 o- X$ P- e
printf("\n");: Z; k0 O- @( G& ^8 j1 l
ci++;: B. W( g, {8 R# I3 e& K
}4 _* }* D" R- O7 e0 K
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
7 b1 r# ^: P3 s2 M; y; W1 l3 B4 g这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|