|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 # ?* I3 q5 U1 n) K9 Z
# i8 T) j+ S' R% d7 w( K0 W5 I& F/ @! e# P! l9 N4 z
因为我不知道问题出在哪里了。。
$ w/ ], j. q, \7 y% bdo : H) {5 Y4 X( j# E+ h
{
( v8 R4 \( b2 r //求解不平衡量4 d# H9 D- x$ n- k; q
for(i=0;i<nB;i++)% R# X. k5 O2 p% u" Z, M
{' R8 E& b8 Y( N3 @9 @
if(sB.Type!=2)//假如不是平衡节点0 R4 @7 S4 d- P# ^
{ 1 i$ L" C: _, H. ?4 a
DP=sB.GenP-sB.LoadP;% }5 o1 O! s& j6 G9 {8 J
DQ=sB.GenQ-sB.LoadQ;
" [) j# J+ Y: g+ m! Z5 E
% J* u% Z1 F8 A" y for(j=0;j<nB;j++). Q V& |% G' _+ {7 Y
{
' F# m5 }: P; ?* u! R& } A=sB.Phase-sB[j].Phase;+ j u- b$ H! s2 H! e
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));4 ~- Q* f* B* S) H8 |6 b
$ R/ g/ }" ]0 b, N3 u' h2 L
if(sB.Type==0)//PQ节点
# n3 f- K7 `0 N DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));3 ?) J# C/ X, ]$ o' j' f5 ^- D
" r( J/ V) a- E& e8 A- i# q
else if(sB.Type==1)//PV节点
& L& a+ w% n5 [7 a+ N% I0 O* G) N DQ=0;
) V8 A }; O* w! C3 o: @6 I }
/ ]1 D8 e. K# x1 H) r }0 e- `; j9 l }0 r
else if(sB.Type==2)//平衡节点$ K1 H$ [5 m0 v2 T* W' u
DP=DQ=0;2 E0 V/ e9 j& _& @$ C9 F( H3 G
} ( N3 h# a% i! X1 [: x, a. ~
//for(i=0;i<nB;i++)
- z. h* z. {- d! [; q // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
+ X3 M& _( ~7 R* j) i: M' \% J' \# j
//求解修正方程0 d& m( {5 K; e
for(i=0;i<nB-1;i++)# \% b0 ~, k" ^. |3 N b
AA1=DP[i+1]/sB[i+1].Volt;, U+ ^+ x* D. M, y) j
for(i=0;i<nB-1-count_PVnode;i++)( I1 o9 u" y, y
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;/ g8 z: q. ]- B" T7 w' g% g
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量% b. h( R* j4 P7 z: N
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
; [ a/ `3 g' d; q. b
9 r; a* v b$ o; _, \% [, k max1=fabs(AA1[0]);
! r0 G( P: a" g% {& w5 T for(i=1;i<nB-1;i++)+ {: t, G* d1 t4 t- U# b
if(max1<fabs(AA1)) . h8 O" a! S1 r$ b: j
max1=fabs(AA1);
* H1 H1 Z8 e4 u9 x* X7 C. `4 v ] max2=fabs(AA2[0]);
" M6 H( Y# L y7 u: H" I. q for(i=1;i<nB-1-count_PVnode;i++)$ ]/ d% }9 S; ]7 X
if(max2<fabs(AA2)) 9 v4 o; Q! M7 D+ x \( e
max2=fabs(AA2);( C" G% a1 W( i) k p/ B
for(i=0;i<nB-1;i++)( p5 y& V7 F' N: t. a" R% H
sB[i+1].Phase+=BB1/sB.Volt;
: o1 p3 m" C' f' k for(i=0;i<nB-1-count_PVnode;i++)
h' k5 E+ ?" U sB[i+1+count_PVnode].Volt+=BB2;
- U5 ]/ t& Y6 D. U2 W; G4 ~: R for(i=0;i<nB;i++)& F& a# c. Q o; e+ w
{
9 E) h8 H, y9 P6 V printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);" @! `, M; i+ s. n& m/ G
/ f- {- n3 r5 E; q6 d D/ ~2 r7 D }
+ O1 T/ c8 H" U# T2 ]9 Q Y printf("\n");% ^; }3 B, ~3 A: h9 ?% P; d& W4 c
ci++;3 Y- L) q( ]' J0 _1 o9 w# W# n2 ]
}' _. ? e) r, y5 |, k$ q. D! {
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);2 j) u/ G! S: ]6 x
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|