|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
3 U3 y t3 ]# W+ g8 G1 L3 P, u! G0 e! b* ?! |/ C
- U9 z' R; a* d3 P+ g8 P2 N 因为我不知道问题出在哪里了。。
6 w2 S! B$ s0 edo
) G7 J; h/ K7 X% w {
; f9 y; O3 J7 T2 U$ d //求解不平衡量
. w/ S; I |# x4 h: E for(i=0;i<nB;i++)5 a7 w" e! x$ X1 t
{
/ S3 f. g( y7 L F2 J. G! |. X7 ^$ ? if(sB.Type!=2)//假如不是平衡节点
) @; I, x7 V9 ~7 N { # {; t' m6 u* j x
DP=sB.GenP-sB.LoadP;
3 O1 s+ m8 J' d" X DQ=sB.GenQ-sB.LoadQ;" B7 t9 O0 C6 k9 n/ E
+ T# G+ ^8 Y6 L0 Z for(j=0;j<nB;j++)6 G) e( D1 @( n% z# O
{
: h! v) T9 g) W# a m O3 H$ y' I A=sB.Phase-sB[j].Phase;" P) i9 Y6 s2 W. Y' Z4 ^
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));( v$ L6 G3 v' X# r, n
1 z L# @6 {( z# c, a
if(sB.Type==0)//PQ节点; K1 n `( Q7 V$ x5 a* b3 b2 r
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
% s; s) }' ~7 W7 F* Q- l- \ $ n# w7 C& p3 w0 k# p0 p `3 N
else if(sB.Type==1)//PV节点5 T$ c& O) [# z8 _. y- {* Y
DQ=0;
/ B, N6 q! c b5 W: D1 k }
8 Q& c& \4 s2 |: B- z+ r0 G }* X6 d5 u6 g* ^3 \% N
else if(sB.Type==2)//平衡节点
; R4 V! X& @$ d DP=DQ=0;0 F( c0 v% c$ ?/ Z4 k, m2 y4 z
} ; `5 P V3 a3 J# V& e( }
//for(i=0;i<nB;i++)+ Z: S1 H& Z# R t6 ]5 ?
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);4 U5 R, b2 m6 c8 y8 l1 c
* u: |1 p$ m2 [; V6 b" W
//求解修正方程( i2 P- `5 H) x. v7 ~/ p
for(i=0;i<nB-1;i++)
: B; [% M Y% H& Z AA1=DP[i+1]/sB[i+1].Volt;6 n. X7 [, i1 ], `2 Y* N0 O
for(i=0;i<nB-1-count_PVnode;i++)1 H: H& v2 N6 L
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;/ b: \7 k, i4 a$ r
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
+ R; x. N5 T. _; i$ s3 X0 M calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
6 w1 ^2 v% [$ M) o% Z8 ~4 R* H5 B/ I" X4 D" s! Z
max1=fabs(AA1[0]);4 A# I4 E/ V; `& j" r' P1 d; W
for(i=1;i<nB-1;i++)
) {% j: Q: x& p$ T) z: w if(max1<fabs(AA1))
( \* N; K7 o0 u max1=fabs(AA1);; A j/ }% a* Z3 y1 ?. `! v
max2=fabs(AA2[0]);. d5 a; G/ @! t+ T r$ n Y
for(i=1;i<nB-1-count_PVnode;i++)
1 `+ h1 Y+ c5 z8 \! c+ @4 q if(max2<fabs(AA2)) 4 Q1 d6 O6 @7 H0 X3 i- U8 k
max2=fabs(AA2);
, ?9 v7 J1 P6 t8 F for(i=0;i<nB-1;i++)# N# h; b' B% u/ Y9 {# H
sB[i+1].Phase+=BB1/sB.Volt;
# E. I$ D! ]1 x3 ~0 ~ for(i=0;i<nB-1-count_PVnode;i++)
( R: I" a7 `- V5 r1 C' e sB[i+1+count_PVnode].Volt+=BB2;+ q3 L r* E, F9 n, [; G. E& z; m
for(i=0;i<nB;i++)% g8 C! z6 ~5 J; C
{ $ P+ f5 M8 K" `
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);) p. e: \1 p0 ]
. y5 O: |, D6 x" T( ? }* Z9 j2 T0 M# j: i+ k9 y
printf("\n");. }. S l3 d4 }8 G
ci++;
6 L) } e8 Q Y. d9 b( p }
( S4 D! Q- l7 t8 _- V+ o& ^ while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
2 F+ Y) v& h8 g! e7 i: t, q4 T这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|