|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
- b+ h+ {4 y/ H% J; p5 n$ ^ a4 L+ R' V+ O6 e# u( G- c: T! h
& F7 \% G, E8 H; } 因为我不知道问题出在哪里了。。3 D' S" {& s3 q! Y5 _6 v
do
: B1 \% \/ V5 Y6 e3 ? {
* @0 v: L* v% g) `& i' F //求解不平衡量& z5 m% u, F9 q+ e. n9 P. |
for(i=0;i<nB;i++)
! h6 Z$ ?( i, C {& p+ ^; ?$ B) k$ U! x0 l3 c7 n
if(sB.Type!=2)//假如不是平衡节点: L+ s5 [* F# Y3 i- F$ `
{ 7 N. J0 y3 L/ Y% t, B
DP=sB.GenP-sB.LoadP;
1 @( t$ L: k* ]- [ DQ=sB.GenQ-sB.LoadQ;& a* N( e6 s# X1 g# q; _' C* G& k
' k+ L: P8 `! G% P6 A- ^' `
for(j=0;j<nB;j++)$ @& O" y, K# j% o1 l$ v3 x5 w9 [- |
{! S' F* W* `( b# ]" m
A=sB.Phase-sB[j].Phase;- N$ z+ S8 G! I
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
0 o( k6 { H- `' c% N" Y. G 4 [6 Z- d6 E9 u
if(sB.Type==0)//PQ节点& {+ q9 f; `9 d
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
1 k* o# c( Y, p 2 b. I6 Z( Z5 ~0 X# F& B) ~6 D
else if(sB.Type==1)//PV节点5 @" l& F, v" R) F/ I, B8 O
DQ=0;
2 ]! U& c8 l" d4 K" C% Q }) }; o1 y- B3 a* p! j
}! ?% ?& q- c' c* `: f
else if(sB.Type==2)//平衡节点) _! O: C; Z' @8 R6 \: H
DP=DQ=0;
. f: _$ O- x4 } k5 ?+ h; f+ e }
/ q5 S' B' G( t7 N* b$ e8 S //for(i=0;i<nB;i++)
$ M3 J# P+ X; H1 F% L% b3 g // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
! V- ?2 C7 h* t+ u7 v% j) |! `
& t8 L" }$ r; e) W& s9 D: y //求解修正方程) J9 S( B5 o- ?: \8 w# h1 n3 B
for(i=0;i<nB-1;i++)+ m0 {9 {9 [9 h% b# `
AA1=DP[i+1]/sB[i+1].Volt;
, H/ q# _+ ^- s* v for(i=0;i<nB-1-count_PVnode;i++)8 L. o" o% N$ d* V4 U" @+ M
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
; F9 D9 H' `- j. }& C calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量2 g& n o( v; ?, c
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
& U) |3 E5 ^4 W- ?. { _0 _$ [
3 x. g% `) o- h& f* S9 t max1=fabs(AA1[0]);
9 F' g9 i4 U- r% H for(i=1;i<nB-1;i++)4 u" X$ [+ u2 X5 M
if(max1<fabs(AA1))
( ?# w' s6 h4 Q) [ max1=fabs(AA1);. z& _( j x$ ^6 ] f, B0 H9 N
max2=fabs(AA2[0]);1 s1 t. X" t" K7 v: {$ C
for(i=1;i<nB-1-count_PVnode;i++)+ a Z( A7 S. ~6 X" @4 e3 p
if(max2<fabs(AA2))
8 T2 H* A Q; U* v D9 L5 Z2 Z max2=fabs(AA2);# U5 |. Q# s$ ~) ?3 e1 b7 A
for(i=0;i<nB-1;i++)% D4 f" Q! S; {2 K! `" J
sB[i+1].Phase+=BB1/sB.Volt;0 a) K6 |- [$ h
for(i=0;i<nB-1-count_PVnode;i++)
+ w1 l1 }% B# E sB[i+1+count_PVnode].Volt+=BB2;7 j$ F# S5 B, a8 V$ w2 U: A$ L
for(i=0;i<nB;i++) c# m6 g- J6 Y* T% r8 F
{
9 ^" [/ k& k: j* ]- x2 U% G printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
; ]! o5 u- ^3 M( [' B1 U
9 h, w3 t/ L! P: l }2 G* A: ?% x$ |! V* v& s
printf("\n");
: z1 D" S, Z- J" g- m ci++; i! P I3 I' h3 R2 _
}
) A) X0 K1 |# W. c) R4 K$ i& P while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);8 h/ P+ N0 x- N9 s' w
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|