|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
+ `" R* L0 Z" G6 R2 k q+ E, d( p& n- z% ^6 a. h* \
0 o4 D Q- E/ I, L0 ~2 s1 q 因为我不知道问题出在哪里了。。
( g# v5 ?& z6 j/ N& Ddo
$ B( a6 f% c2 D% f1 w; O {! N# F- U- p7 @1 Z
//求解不平衡量 S( B4 w! L" a* N$ k
for(i=0;i<nB;i++)
8 ]. b0 j& q9 i" b( E5 Z {$ I- a4 ^6 Y- g J B* N
if(sB.Type!=2)//假如不是平衡节点7 i W [, h) q! C J
{ 2 N' U- i' y" Y R/ X' V( ^4 C# n
DP=sB.GenP-sB.LoadP;
) A" @2 F, `" O4 O5 O1 e8 n" T DQ=sB.GenQ-sB.LoadQ;$ o. k5 G7 k. {$ I( D2 `
; |6 I3 t* \$ {, z' v8 p for(j=0;j<nB;j++)
7 X) I& ]9 Q& O6 S! k4 d! l! P {% i7 w9 d6 [& w7 P
A=sB.Phase-sB[j].Phase;- _5 u2 D. ^; T) k! l( g' Y
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
7 J- S$ e% x( C) ^, j $ }' I5 x! j5 G' h. Y& j
if(sB.Type==0)//PQ节点3 c% ^6 ^* }7 C5 `
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
# I& C @; Y, t! S : d. O7 \$ T i" `9 S9 ~
else if(sB.Type==1)//PV节点
1 x8 N3 i3 }( d5 l DQ=0;
0 [! m0 @9 {8 d/ f; e5 [8 a! t }
$ l; g. Z, U$ n+ }( B3 ^ }
" a9 R7 p% w9 r" ^4 k" b else if(sB.Type==2)//平衡节点6 d; k3 |7 H* o+ u
DP=DQ=0;1 |; p: [, B9 k$ T3 u8 C
}
! e, d; O. A# }- e! T //for(i=0;i<nB;i++)
- I# q; B( J3 R L: @% L // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);" t# @; M0 j, q! W2 \, T
" `1 O8 s% I/ T8 {- e9 @* o
//求解修正方程
1 i8 g4 ~) r$ A( _, r. Q& P' Z for(i=0;i<nB-1;i++)
# K+ Q2 M; l+ _6 R AA1=DP[i+1]/sB[i+1].Volt;; N5 H. w2 ]- B
for(i=0;i<nB-1-count_PVnode;i++)
0 U2 e9 s! w, {0 n1 a2 i+ h AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
$ ~7 e+ Z, J2 C! K& z7 w, l calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量% G% u0 {: @7 ]& ^+ Q: K
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
" k0 H/ ?% @( i5 _3 k' O& \. w9 x" j' \; v2 A/ }
max1=fabs(AA1[0]);0 m# g8 X) _1 T* w3 [( |. T# @
for(i=1;i<nB-1;i++)/ k! ]+ q0 I7 K6 q7 f; I a1 h9 {" B
if(max1<fabs(AA1))
* U( ]: H, [" \* q max1=fabs(AA1);( ^2 P" I( B. c/ i# @. h7 K
max2=fabs(AA2[0]);
8 t& ?% v6 D3 W6 H3 p for(i=1;i<nB-1-count_PVnode;i++); p3 m) G' g1 z2 |( d
if(max2<fabs(AA2))
5 M3 c- r: c& W4 y+ \ max2=fabs(AA2);/ B1 ]- B2 l4 U- t7 v
for(i=0;i<nB-1;i++)1 K3 p( I+ g' a% x
sB[i+1].Phase+=BB1/sB.Volt;
; _3 y2 U6 v# @ for(i=0;i<nB-1-count_PVnode;i++); k4 A3 D% s0 y; R0 b4 n
sB[i+1+count_PVnode].Volt+=BB2;
8 L/ F& O% |+ p, {2 ] for(i=0;i<nB;i++)
) }# ?5 ?' U; U% N {
m8 I( b. w9 |) L+ n: x: g, V printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);& H& S _7 F7 k8 u& x# p e% B
6 ?8 _% {3 b) p9 E, x. e, f# d# l }6 `, e0 U7 s4 M2 N6 b
printf("\n");
2 ?! z9 Z+ ~: Q) [8 r. R ci++;: d6 `3 L+ x: L1 [5 }0 X9 C
}1 D0 H) C% X, e7 _: }
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);1 p1 l) N" G1 B. }; g
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|