|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
5 h8 o2 y3 Y$ _4 O8 z9 e
6 q; Q! U; c3 b0 o4 I+ t
) p9 B u) p2 U; [& b- k 因为我不知道问题出在哪里了。。9 ?8 S' A, ~ X# i
do / L! z! ^; `) u+ L
{) w+ h5 ]4 [& W- e! ] d
//求解不平衡量( O4 x1 O$ M# z- s0 S2 j3 d1 b
for(i=0;i<nB;i++)9 H* _' ~+ u' d! ?
{
9 z" f$ e: a& G. m2 U# ? if(sB.Type!=2)//假如不是平衡节点 B7 C! t) q5 Y) b1 F( s# K
{ 2 V# I' n8 f# b7 \0 a4 Z/ u
DP=sB.GenP-sB.LoadP;
9 u7 K/ ^) n1 T9 G: ^( K B. ~ DQ=sB.GenQ-sB.LoadQ;- W) l, L6 c1 e8 C* i
- }! o) H" r3 ]
for(j=0;j<nB;j++)' g+ x- j/ `$ `8 H; M
{% z4 h( [, l# a2 Q
A=sB.Phase-sB[j].Phase;
; w* p& y/ w" X( }1 J DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));7 T3 l; `- F3 M) B3 W
7 [+ T. S8 r0 Y( u/ F4 l _/ n if(sB.Type==0)//PQ节点
' t- {& v7 E( V$ C5 s DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
' W; y1 K# }' m/ R- H 9 k* t# R+ R& R9 e2 K- n7 }
else if(sB.Type==1)//PV节点 {+ c" D% T1 S+ ^: W1 u! u
DQ=0;
6 _5 b! k/ p8 ^( k u6 o }% M u3 Q8 U3 a
}, J; i! M' ]0 m& s
else if(sB.Type==2)//平衡节点: M, S! c. N/ |
DP=DQ=0;$ J i$ M3 t4 ~9 Q5 R
} / Z3 b; G9 T1 H; I! C/ }% F n
//for(i=0;i<nB;i++)7 ?/ @; l+ Y( m: \- z. o
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
" c9 Y6 c* i3 i# h! ]; L0 d& E
3 j9 Q3 i$ m1 \& J% i9 x6 h+ v( y //求解修正方程: L: _! ^# X3 h) B9 v9 o
for(i=0;i<nB-1;i++)0 Z. ?3 j+ v5 u8 |
AA1=DP[i+1]/sB[i+1].Volt;) q5 T: K( ]0 y- y% t
for(i=0;i<nB-1-count_PVnode;i++)
3 F5 z/ d% f% j: e AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
5 j! ]- r0 a0 Y: [ calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
; `# }3 y5 J! j. Z. H$ g& {& D# w( g calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);4 S a' W3 j {& I: F5 N9 O g# M
. y A6 S* b9 t: u6 T
max1=fabs(AA1[0]);
0 N# t+ h: K6 ?) v1 Q0 N" d' b for(i=1;i<nB-1;i++)
! g. V9 J1 G0 ?/ j8 ~ if(max1<fabs(AA1))
# A0 C9 K6 R4 Y1 I$ O max1=fabs(AA1);2 O! J! v7 X& O% W
max2=fabs(AA2[0]);+ G$ b3 Q. \1 ?
for(i=1;i<nB-1-count_PVnode;i++)" [2 C. u! g& B$ C: |' `
if(max2<fabs(AA2)) + c. C2 [6 u0 ~7 S
max2=fabs(AA2);
9 s" O% N+ ~- L for(i=0;i<nB-1;i++)' o- Z# h9 W" R, g
sB[i+1].Phase+=BB1/sB.Volt;
- R/ J% E5 |& w" H for(i=0;i<nB-1-count_PVnode;i++)
! E1 k l5 b) v5 n sB[i+1+count_PVnode].Volt+=BB2;
* W, z. H+ e4 J$ u, [ for(i=0;i<nB;i++)- x9 E3 S. z. q# F6 }: N; {
{
* ~4 N2 K) k# t2 V0 o& W" L printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
- |2 l# [4 X) W) L" z1 y: Y0 P, @1 |, p
6 |) T. F. [# I }4 b( \% D2 V7 p8 F8 A
printf("\n");. q" n% X% I8 [" O8 l
ci++;% g. d9 [, f# ?+ \
}
0 D& g+ ~+ z$ h while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
1 N, `# H6 r6 D; p9 `. F& O$ q这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|