|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 / ^2 O5 @5 E; }: X+ I$ D" R2 P
7 ^/ t* Q5 B8 S# _0 Z: S" K( c
% j# |* J0 W( y: w/ h$ R2 u 因为我不知道问题出在哪里了。。
$ }6 L$ ^6 G% x P% v- K/ \7 m0 Mdo , J0 G9 f% C: O% W( z! ^' Z6 G$ ]
{4 e5 ^& o& P% M8 ?: a1 O
//求解不平衡量
$ v& W1 G( e' @5 D; l for(i=0;i<nB;i++)
6 v F h# m5 w6 q0 G, Y {4 z/ b* s) G& X* ~
if(sB.Type!=2)//假如不是平衡节点! k B& a7 \' b1 P5 k6 `5 H9 {: A
{
, p2 b- O% c/ y+ ^. n+ w& G8 m DP=sB.GenP-sB.LoadP;
, [$ P9 U2 A$ t. I1 Q) K. z DQ=sB.GenQ-sB.LoadQ;
. n( L$ _- i( V
) _9 @- E3 h# f! R! \ for(j=0;j<nB;j++)
; q8 k4 d# ~5 N* q) g' K# E5 r& h {
$ _3 |! x5 z. y' y2 @. n A=sB.Phase-sB[j].Phase;1 G0 j0 F2 d- z# o+ G! |
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
' E# V8 x* j$ n. ], Q$ S: j* q
" i0 y9 p. J, H& @. o3 w if(sB.Type==0)//PQ节点1 C) j X/ T0 V3 z
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A))); c- s1 W i! N7 R
4 n2 H5 F$ J O
else if(sB.Type==1)//PV节点& D* e, Y% E# E+ k0 R
DQ=0;
( Y2 J1 m6 X- C5 T+ ? }
1 j& K8 g' l2 C- x, y }
% F) Z7 N6 O) |# H% f else if(sB.Type==2)//平衡节点
# E" `. I1 X7 v2 { e! B DP=DQ=0;. |1 I% _5 D. a+ P# T$ y
}
3 U! }6 t. K: l: W //for(i=0;i<nB;i++)
) }8 r8 b+ O1 k! G ^( @ _. O // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);* e! k! ]9 L- i4 d& N/ ?2 b
. @9 s. W+ M! A3 H
//求解修正方程
1 }! @* h6 a2 c) X- Q. I6 o. B for(i=0;i<nB-1;i++)
' { _& ]2 {9 @. H2 t AA1=DP[i+1]/sB[i+1].Volt;
V$ f8 G# h" j+ ^; B1 f# A for(i=0;i<nB-1-count_PVnode;i++); S- Q9 z' L- _4 y
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;$ D3 F& D. ]" Z' Z, x, g" m7 s2 ?- R
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量9 j V8 O' d6 h( c T T( C% |" C/ n
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
. ~! E( o- p# A3 e1 O+ r! I; `2 } I. f7 l
max1=fabs(AA1[0]);3 V s8 d. [3 T S' z+ r0 ?0 G
for(i=1;i<nB-1;i++)
- {, L: W7 `: z; W9 _! c if(max1<fabs(AA1))
1 x3 N+ V8 \: V) E- X max1=fabs(AA1);! ^' A; w, c7 u7 T+ U* n( S, `
max2=fabs(AA2[0]);4 B" \8 i$ ^; {) c
for(i=1;i<nB-1-count_PVnode;i++)
. @. Q; r5 C2 N2 f if(max2<fabs(AA2))
* D8 h/ g6 Q( j; N max2=fabs(AA2);
# F, b' P( u% }; i% \; l for(i=0;i<nB-1;i++)! h# E3 C5 P# x9 y$ |/ U8 d: W" W
sB[i+1].Phase+=BB1/sB.Volt;& V, Q$ c+ }" U' {1 k+ A* I
for(i=0;i<nB-1-count_PVnode;i++)
- F0 b' ^4 w) C8 e' q, @& ^ sB[i+1+count_PVnode].Volt+=BB2;9 i# _/ A& C3 v, L
for(i=0;i<nB;i++)
- L# O; Q7 R/ H- o) r" l0 j+ _" L {
! J# l: i Q% l6 a) n printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
6 }% H- F3 B5 F; q " S$ H) U+ v. c/ U2 \5 m( z+ V
}4 l+ O& g: r: X. i: C1 d9 O8 ]; |
printf("\n");+ w9 D8 M7 ]2 Y O: k! y* u# k; ^! o8 W; L
ci++;
, v/ _" y3 t# K t* g3 ^ }
$ e: D( @9 N; ]2 p" Q while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);' F0 |3 }( Z) C2 x- t0 X$ w
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|