|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
3 o& r5 x1 ~5 J7 P0 u$ [; g; ^* a- z# a. f" V
% A* j) e8 U2 T
因为我不知道问题出在哪里了。。# ?+ Y" {+ B/ o
do & Z1 a+ V* O2 b. i5 X, R, X
{: e# J* v+ e: Y( F: j6 b( {
//求解不平衡量
' p. K% s0 R0 ^) {+ u for(i=0;i<nB;i++)
4 S* b* C/ \ Q: M {7 P! O$ N2 ] b/ T
if(sB.Type!=2)//假如不是平衡节点
/ m- _& w C) }6 k# g { + ?* N& U) X k% b% I ~: W
DP=sB.GenP-sB.LoadP;
. E) p! {: C" N- l a DQ=sB.GenQ-sB.LoadQ;
+ P& }* K9 y* b+ j5 \
$ K6 B. q' ^* h" H/ Q for(j=0;j<nB;j++)2 n- _3 `8 [$ l3 t0 r; D1 u7 h
{4 j8 n \* Z* z4 p+ J# S) Y
A=sB.Phase-sB[j].Phase;5 S6 l- ]$ J9 A% v8 V0 e
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
; A' I2 y2 a& E) |7 o
5 q4 ^& t7 R7 A5 _# W5 `8 ]& A) k if(sB.Type==0)//PQ节点# ?0 A, M1 t7 D' M( p) f
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));, s* @6 E4 f# a- t% g& `; c
$ K" [. D+ H, Y3 ? else if(sB.Type==1)//PV节点
3 ]1 e. U/ V1 T2 ]( ^7 q DQ=0;
! r4 \8 s* Q0 b- T; M }
+ U! u k6 M' a0 o; \9 C: ^ }
- \2 s+ Y4 a0 i else if(sB.Type==2)//平衡节点
; x* ]' \2 N2 H( H/ n. j$ b0 C DP=DQ=0;
2 m# u' d. o1 y% ^ } I1 ]( W: D) b( u3 m
//for(i=0;i<nB;i++)
" i# o$ y+ s- i! j3 k$ d8 i, b6 I7 s* P // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
1 v( ~; _3 b8 ~' e9 E! \# t* _3 K1 d0 I
//求解修正方程* R; E0 [5 j& T$ @
for(i=0;i<nB-1;i++)
" _" E& i6 S% B1 M2 F f; p5 F AA1=DP[i+1]/sB[i+1].Volt;6 C: I0 C8 C" r; T& n% x) d
for(i=0;i<nB-1-count_PVnode;i++)
$ N3 a; s& S& r2 ?. \ AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;, d2 z" O: m8 i0 M V8 }/ {0 w
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
- g& [% C$ D1 T" \/ r calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);/ k* m N- t! y5 h& r! ^9 x, @
]5 f* X) G; c: k& }* L max1=fabs(AA1[0]);* T. I: i, V3 V: b
for(i=1;i<nB-1;i++): q2 P, V8 } P) h3 R
if(max1<fabs(AA1)) ) Z# J% M1 k: d
max1=fabs(AA1);
) {( Z7 b! g* N max2=fabs(AA2[0]);
$ y7 s0 x, q o9 w for(i=1;i<nB-1-count_PVnode;i++)
$ C, h; C$ Z% S+ o, f8 U& M" c if(max2<fabs(AA2))
9 A! M. D0 `% h2 W0 a( y& L max2=fabs(AA2);# Z% B6 r) G: r9 w
for(i=0;i<nB-1;i++). I& D* J6 F" N+ q J' S, p( U
sB[i+1].Phase+=BB1/sB.Volt;5 q9 N( O' B' N0 T
for(i=0;i<nB-1-count_PVnode;i++); ] F* u/ M% Q2 o& j/ Q
sB[i+1+count_PVnode].Volt+=BB2;
1 d. I7 ~' g( Y1 I2 L* j3 g4 L: x( a for(i=0;i<nB;i++)2 ~( r* d! G" s) R
{ : v+ {2 K7 v* t: R
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
: d5 V2 h/ r% m1 L y $ c# V2 w0 N. v, n6 J4 j
}
y: |0 M/ Z% ^/ |9 c" S printf("\n");) z, c. _' l6 v+ Q) V$ S. v L2 ^/ \
ci++;
- N" c. h8 W' F* `* K }
! q4 l% H) }" X while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);9 ]3 O3 P, v. u" W
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|