|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 3 a( d8 x& ?# x* V/ V% O
& @% P) q0 s* m/ `9 b
}! M$ j& ^, t: w7 k 因为我不知道问题出在哪里了。。
9 b' L% E7 u, o0 W9 A: J0 ~! sdo . }$ v3 z/ m% l& K) x1 X4 ?0 A
{- P! w. p$ W$ [% a h
//求解不平衡量' q% y ^/ ?. C: n
for(i=0;i<nB;i++)& s- D; b( x; v5 }( Y
{
) l) v4 p/ {1 Q# B if(sB.Type!=2)//假如不是平衡节点/ P% K6 L1 K) m
{ d9 T+ @% ~8 i9 j+ a4 s/ v
DP=sB.GenP-sB.LoadP;
/ h5 x3 s' [4 {" I% M DQ=sB.GenQ-sB.LoadQ;
0 l$ y: f+ ]' _" R* U: N g$ l
8 R) i: n. ?1 f! q0 H for(j=0;j<nB;j++)1 a- c/ S7 f6 M7 X
{
) [/ t( j: W7 O6 C2 T3 o A=sB.Phase-sB[j].Phase;( C/ b* [* j! j: f, o2 T
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));7 G3 P4 N% B4 P- _( d' d% e
6 e/ |! q, j% P* Q
if(sB.Type==0)//PQ节点+ l( Q& [, u) M
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));) D. j* f4 E4 ^
2 N0 N: v" c6 {1 ~* X- @' c
else if(sB.Type==1)//PV节点
3 J" D/ q% Q9 Z) w- g' W, E DQ=0;: _8 w9 b8 D( k6 A1 O- `; Q
}
7 ~2 {+ a$ N( N9 [, H }6 `$ I% t8 D( }7 w$ v7 U
else if(sB.Type==2)//平衡节点
' l5 X7 f2 Y u' U) i! l. G$ o DP=DQ=0;/ y+ k i1 d" J7 Z$ h# U$ b: \2 b
}
' v( i h( ]! F0 g //for(i=0;i<nB;i++)2 s O" e3 y0 D; J
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);+ a1 Y& W9 K8 \+ z* ]
7 u/ B, q/ h4 a6 z
//求解修正方程
- \0 k' D' h# [' P& j7 k! T& E for(i=0;i<nB-1;i++)
% W9 K X' X% C7 Y; B& k- E AA1=DP[i+1]/sB[i+1].Volt;5 e6 |- y9 y; m, i1 b- E' `/ i
for(i=0;i<nB-1-count_PVnode;i++)5 Z2 \- S/ {2 d) t
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;+ k1 ]: [0 s2 F+ X ^1 @
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量3 t6 @. e" Y q" c0 S1 \* S1 ~, D
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
/ v5 ]' ?7 Y1 b, u: M, |! w5 h, F; t; g8 u
max1=fabs(AA1[0]);' {/ e# ?% g4 X' Q9 | R5 B
for(i=1;i<nB-1;i++)
1 \& ]: u W. ^$ t- _ if(max1<fabs(AA1)) 4 v4 P( |4 e( [
max1=fabs(AA1);
3 v; \4 h' I9 { max2=fabs(AA2[0]);
4 i4 S$ V0 i" K/ Z" z for(i=1;i<nB-1-count_PVnode;i++), |" x! P! U/ ?$ G O2 u% N8 h: `5 W- e
if(max2<fabs(AA2)) 6 C9 V' H# e, p& P
max2=fabs(AA2);0 C: t" ^# x5 O3 I |
for(i=0;i<nB-1;i++)
9 o, b' h \! D sB[i+1].Phase+=BB1/sB.Volt;
" f$ U7 S# {' P/ U% b! T for(i=0;i<nB-1-count_PVnode;i++)
! F( r, u& Q& [. x$ s! s9 H! W sB[i+1+count_PVnode].Volt+=BB2;
9 K% b7 Y' D3 `0 U' s1 j/ { for(i=0;i<nB;i++)* m+ P8 v' Y9 N) O8 W
{
% }% }% q! @1 r# h2 K printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);1 T4 N1 `/ ~0 S. Y$ I6 M
9 L) l$ y0 Y, U }, k& K+ M' v w5 F% u/ S9 r
printf("\n");
7 y. L! b8 v3 v. c8 D ci++;
. @0 g! `# J! `, T }" m% I5 A! D. a
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);+ E$ K4 H% L1 j) E+ I
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|