|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
9 Z/ `6 I; v1 Y/ C3 e; v0 U" E# O9 Q. e* X: H3 j7 g0 [/ V
% ]3 N. c3 O& l' n% B 因为我不知道问题出在哪里了。。- R7 k+ o) M4 c+ G# B+ v5 z0 j6 t1 F
do
! |* n, I z6 l( X0 b( x {
; }" P8 }% i7 ~' L! i //求解不平衡量+ v2 e& y2 O: N4 d% i( _# |. U( ?
for(i=0;i<nB;i++)
0 h: F4 b" C- e* F0 p4 |. s* t {
( l, T" Y! ^4 k' Z if(sB.Type!=2)//假如不是平衡节点
8 \- y$ @! S# n8 Q) Z# a { / ~1 j) s5 I( J8 b3 V
DP=sB.GenP-sB.LoadP;2 _5 n r( k h& r) \' @+ y! B8 V
DQ=sB.GenQ-sB.LoadQ;
" c" |9 t8 L- k' m
' l4 T$ z- B' A3 Z x for(j=0;j<nB;j++)
) i7 h9 B- ?2 s2 ?& j6 h {
5 A% C# h# M& H: ` A=sB.Phase-sB[j].Phase;( C! r# p- s; W; i" V9 _: q, B5 t
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A))); m6 V) K9 K2 Z+ ~' H( j
6 r' c; W/ O: \* z4 [ if(sB.Type==0)//PQ节点
' z# p. @. P9 V6 _0 z- w. P DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
/ l5 K& e2 i& ]- X8 J% A+ {; | N8 z
5 ]1 X4 @- W& ^" e9 Z8 {3 B else if(sB.Type==1)//PV节点
. p) k- N4 X5 E' W/ p/ q$ S: s( [ DQ=0;
% @* d, l, z5 a6 A; C }
5 g5 j6 I& d6 Q }+ i/ F1 U: S/ p
else if(sB.Type==2)//平衡节点% d6 J" F/ K3 y7 ]6 o
DP=DQ=0;
/ N; a4 r6 t: A. c- s9 s } 0 I' m/ ]5 k& ^7 n
//for(i=0;i<nB;i++)% h- N4 \% a3 S; p$ |
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);, A' U/ s+ l) o6 z5 l- T
: W4 F" z9 ?# k0 N* n7 k# o
//求解修正方程
0 | ]# X2 T* }; i: H4 \ for(i=0;i<nB-1;i++)2 O5 A9 |: x% f
AA1=DP[i+1]/sB[i+1].Volt;
5 I- u. J7 |$ f8 u8 u! r. m: J for(i=0;i<nB-1-count_PVnode;i++)
# `( B" O( x1 X% A8 g AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
/ \1 C+ P0 T$ _* d: _! | calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
( P; h3 U/ T5 y2 \% O. d calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);/ B7 r C% z5 N! r- w0 q! \0 W
* }. |: e7 }* z( G0 j
max1=fabs(AA1[0]);
& ]" B) F0 h+ D# P6 ~/ g0 D: h for(i=1;i<nB-1;i++), d: }, }5 a) Z2 ^
if(max1<fabs(AA1))
1 Y) p0 H6 ^- [ max1=fabs(AA1);: ~5 m5 `' q7 h; \+ D
max2=fabs(AA2[0]);. z* ^$ r: U. L, m
for(i=1;i<nB-1-count_PVnode;i++)& n" ~/ u2 }' D- Q
if(max2<fabs(AA2))
% u% y; F3 ]$ E& G3 B9 _: t, `$ A8 ^ max2=fabs(AA2);
{8 ^6 T, F% @! B9 b7 K6 C6 F6 t for(i=0;i<nB-1;i++)/ K( F( ?4 N. t+ D8 `( q U5 q
sB[i+1].Phase+=BB1/sB.Volt;
' p- Q; ~9 f9 b* y8 h' ~/ w; C for(i=0;i<nB-1-count_PVnode;i++)( a/ D) E. D' a5 h; F% z% U+ f
sB[i+1+count_PVnode].Volt+=BB2;
O7 E- Q4 C! v0 } for(i=0;i<nB;i++)
2 D( s! ?$ T9 d5 N {
6 k7 f" v8 j% @& {4 w printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
# `" R9 a3 z a8 m) u
1 f# A; {$ y! N2 h3 Y$ l& B" v }
8 V+ h0 v+ t/ T7 r) }; I+ ~) L, o printf("\n");' j$ b4 s, j# U
ci++;
' m# o. p2 u5 y- Q }
% D5 P5 o4 X+ O' a3 y% a! S6 r# { while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
* b7 R0 C/ V7 ^, F5 d& S" B这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|