|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
8 D. @, B1 u: u I6 o
- Y ]" F0 T+ C! s
, F! D: \# n- q0 }0 } 因为我不知道问题出在哪里了。。$ J; X* T" J7 J- t8 E
do $ ]$ i' H4 W; f) E
{9 n$ E2 ]% A+ W/ t n' B4 ?' U
//求解不平衡量$ {& N ?0 ]7 _- U \' e! O
for(i=0;i<nB;i++)
0 F9 y' U0 b8 ]. Z* W: R {0 ^) t# H A, W6 J, d
if(sB.Type!=2)//假如不是平衡节点& n$ R, N" Q2 |# c \+ V w
{
+ U" \2 C4 ~# S8 Q$ { DP=sB.GenP-sB.LoadP;
1 G8 ~3 D* t1 [7 g6 b DQ=sB.GenQ-sB.LoadQ;( A- q: u3 \& a) T0 c3 a
. M0 L8 i& l3 ~( }. Z for(j=0;j<nB;j++)9 @6 w! M/ l- I
{
( R6 i0 k0 O8 x8 S9 o" L1 |% _9 n! v, K A=sB.Phase-sB[j].Phase;
9 _0 I7 f ~, _0 G! ?2 S, {1 ? DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));, r( d9 Z+ z" K1 [" w
( Z L( F/ y9 L) Y$ p
if(sB.Type==0)//PQ节点* S# A: D. k5 K
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
2 x; V) C9 p0 w. S. c; D ' w) h. D9 i$ i! a X
else if(sB.Type==1)//PV节点
7 L+ B3 \ @; z DQ=0;6 b x( K; e% P7 e! [
}
- T; K |4 G# k7 H$ D7 W }
0 j- d/ x7 C; R$ m# _4 S else if(sB.Type==2)//平衡节点6 c B, d! l) j" M# A+ f
DP=DQ=0;7 k% v* V- B1 r. h. D
}
$ f* r0 v! Z! t8 a% W; i) u; V //for(i=0;i<nB;i++)3 O3 m" T0 b5 r
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
$ E% c1 Y& @) D+ f/ }8 d& M( \/ y; R) l7 ]+ s
//求解修正方程
. s" f' V" n% ^7 Q* X" J0 Q for(i=0;i<nB-1;i++)4 Q* Q1 m. j9 M8 d
AA1=DP[i+1]/sB[i+1].Volt;% Q" L. ]5 i' ` F* r1 [" t6 _
for(i=0;i<nB-1-count_PVnode;i++)
7 ]0 Z* o a5 n) Z AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;; U' n R, v$ ^6 o% Z/ D6 L
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量* V0 B6 U* j0 }9 ?3 ^, K
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
* Y2 T* m e7 e8 o6 G' F, B- g, U
# b; l) D) i' e& L/ B* z( l2 Y max1=fabs(AA1[0]);# Y4 b' e3 C$ ~- X- t! u7 a
for(i=1;i<nB-1;i++)0 U5 F- x5 U' m# m
if(max1<fabs(AA1))
- E1 g- ` j* y* m2 u( s1 w% m7 { max1=fabs(AA1);
& ^' r9 M1 F: f9 q7 g5 q max2=fabs(AA2[0]);
2 M6 N* S4 I0 \5 J7 K* q for(i=1;i<nB-1-count_PVnode;i++)9 `' ]$ ^" s9 b, n
if(max2<fabs(AA2))
3 f" W1 k% d7 \3 h; m7 G7 q$ }; U! o% m max2=fabs(AA2);: H9 s; z9 J# o$ ?, @% s
for(i=0;i<nB-1;i++)/ R' F! p6 b" E' C
sB[i+1].Phase+=BB1/sB.Volt;1 O5 [* v- {6 }( l7 G
for(i=0;i<nB-1-count_PVnode;i++)
; b1 T) q" f. r8 M0 Z' E$ g" B! U sB[i+1+count_PVnode].Volt+=BB2;
9 T$ s3 `# A' Z+ X( b for(i=0;i<nB;i++)& Z0 _2 l/ U2 R6 ]7 K
{ r4 X1 B' Z6 a/ H" @
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
0 n6 n: e6 [1 b, F# }4 z% N3 V % f4 p$ O3 u3 N% Z0 J8 X4 n( R
}" N; { E- \- l" U7 J5 m3 M, M: j4 A* K
printf("\n");
; k7 ?$ g8 i+ v) O! H9 W ci++;
2 y$ l+ O7 J8 [7 r3 q, k9 E* m0 } }' R9 {; }. i$ R% P/ ~6 K. G) n
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);& l3 z" {1 f- b+ n1 u
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|