|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 3 \% c) d0 [. l9 f3 d
+ ^ X: k) O# g2 c$ Q; L Y
0 w! H( x2 m% {; i7 Q5 Q 因为我不知道问题出在哪里了。。9 ^. b% P, D& d/ _
do 4 a [# ?- B, F
{
- P/ C% E( ~# \4 P" R //求解不平衡量
* F9 b7 u5 I- b3 l; W% | for(i=0;i<nB;i++)
( W, \- M% Q. s/ V- V4 x& z3 ~ {, z- Y, @; q1 V' v+ u& W: X* g; V
if(sB.Type!=2)//假如不是平衡节点1 B: y4 w5 X9 d( @, O& S# b( r
{ - O9 ?6 `- Q0 e
DP=sB.GenP-sB.LoadP;7 P2 V$ @- [/ M' t) N
DQ=sB.GenQ-sB.LoadQ;
8 V+ N* f4 X/ f
1 M3 S$ u T) C$ o( L for(j=0;j<nB;j++)6 J) S" ]8 ^/ p T! L
{
3 b) f8 X- v$ E# p5 G; d" V9 C6 D A=sB.Phase-sB[j].Phase;
2 e$ I- }- L& {( a, M DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));/ J! C$ W/ |, i$ @3 y
. K' V# t, n: c% q; n- B4 C if(sB.Type==0)//PQ节点
+ l0 y+ C! y6 C; f( {& q# }. ~ q DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));' M* A( l. Q0 c" y6 p
4 C- _" M) b; n: {. C
else if(sB.Type==1)//PV节点/ F9 L$ b( J0 ~' b) P( N
DQ=0;9 {3 ~! u+ [" M
}
; @* Y- Q( b# ]+ b& _/ w }
$ ?6 u" E ~# U2 f0 H/ p5 R else if(sB.Type==2)//平衡节点
1 E% ]. o6 q$ [+ w$ b9 A% q4 X- O DP=DQ=0;
0 L& T: \& N0 C8 D9 J/ | }
# d; L! u5 T: d! ^+ w //for(i=0;i<nB;i++)
, y! I: F" |- S+ I // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);# O( J9 b+ R* h/ C* j9 m' X
9 b5 B$ @( K @5 s- F //求解修正方程
0 K8 Z3 [ t& r- n* l for(i=0;i<nB-1;i++)- N E" F6 c& @. Y
AA1=DP[i+1]/sB[i+1].Volt;
7 b3 _( H4 p( j8 V2 A for(i=0;i<nB-1-count_PVnode;i++): Q6 g0 ^# A3 o2 c% l0 j* T
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
5 ^7 j* _4 M: V calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量8 F+ T* n9 T) ~& ? P- z
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);3 \0 R# p# f3 f& r- Y4 N
# H2 m0 p9 T6 S* t4 j/ D) t; ]5 A
max1=fabs(AA1[0]);
$ ^: I) o% K% q; c! }# R2 t0 c3 K for(i=1;i<nB-1;i++), U' m# x- w' K! {5 l
if(max1<fabs(AA1)) r0 |3 d w% D( C' ^9 L/ T
max1=fabs(AA1);
$ s" B/ h( s0 x5 \4 Q* m3 \ max2=fabs(AA2[0]);2 c! A! q+ }; I' x* N7 A
for(i=1;i<nB-1-count_PVnode;i++)- g/ x& C8 F; `, w: y8 O
if(max2<fabs(AA2)) 0 |- |4 z+ w2 F2 d1 A/ V( F2 R5 R
max2=fabs(AA2);
; N2 `! m2 f2 ~- x; Q6 p for(i=0;i<nB-1;i++)- l" A8 N6 ]( x i
sB[i+1].Phase+=BB1/sB.Volt;
7 ~" M; X0 S9 N9 G for(i=0;i<nB-1-count_PVnode;i++)
. G7 U1 N. v" L/ q sB[i+1+count_PVnode].Volt+=BB2;
# ^* V% `$ f# _$ s for(i=0;i<nB;i++). i! Q& [9 H" t2 g! ?
{
' A+ E3 T! p+ r printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
- }4 r" z m i4 v + W. ?: V ~% R- B, `' \2 q
}
" q9 X, }& K; Z( g! ~+ n3 [$ t; B printf("\n");
9 N7 _! v( a8 v. C) L- d ci++;6 E" u( j5 w# q! Q- F; |
}
! n0 i$ l* i1 ^: u while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
: }9 D* V# N! m# C这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|