|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
. K! F& l" H* ]3 e: @/ G; N! M- M$ p# o2 T3 A1 {$ }
. L/ X6 ^4 K3 H5 @, X 因为我不知道问题出在哪里了。。
; e! y& D6 q+ ido ( j* m9 w- {' I! H& O
{
) O+ x: F i8 d, f, F //求解不平衡量7 \* ?4 @, Q7 u) L/ F# P# e4 F
for(i=0;i<nB;i++)5 a% O. ?8 F2 ? A4 w9 D
{
7 @" a0 i g* Q+ c7 w if(sB.Type!=2)//假如不是平衡节点2 V9 H" t, a2 L# ^# Z# H
{
3 l: q( P R% r# s$ q DP=sB.GenP-sB.LoadP;. S; c v# ] U' u
DQ=sB.GenQ-sB.LoadQ;
- g+ D; s" N# f3 h# s- k$ m- \
1 ^9 D3 A; Y x k# |: @$ V for(j=0;j<nB;j++)
* R. \. b- V# b0 a& c {
0 R6 Z$ E: n+ m2 F! j0 J* Y A=sB.Phase-sB[j].Phase;
3 ~% |, m# T/ a. ?/ @ DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
5 C5 N* r P- L, o$ y1 N) m* X$ h
6 N K3 P" M+ o1 n8 |1 d# O if(sB.Type==0)//PQ节点
4 k. V# N) I+ z; k7 ~ DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
( T! [" j6 g M0 {
, U4 l& q/ t6 q7 P else if(sB.Type==1)//PV节点: [% s$ I1 P8 g9 ^( ?
DQ=0;% Q% C# x: W. K4 F% I: V9 x2 E2 N
}4 X/ j8 d) N3 C8 r% ^# v
}
1 O$ k4 \' J5 Z* u7 ^ else if(sB.Type==2)//平衡节点
" t- u" L" K: j3 Y4 } DP=DQ=0;2 T2 H' w" M" h2 i9 B- @) H
}
E( ?6 y' i7 ~9 a" \ //for(i=0;i<nB;i++)
3 g; G( S* Q! N6 ]0 F4 p // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);7 \. L, n) ?: A. A7 l, ]1 g
|3 B* H6 ^/ D7 M) a7 Q6 S
//求解修正方程
0 `- s/ b6 u7 a for(i=0;i<nB-1;i++)
' n# `8 K/ E& h* x* {) ^ AA1=DP[i+1]/sB[i+1].Volt;
^% m3 E, F& z/ e" M for(i=0;i<nB-1-count_PVnode;i++)& Y1 v- F$ _! h5 y: H' }
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
$ Z$ U+ y+ f, }: I: a, Q4 a( w$ k3 g- ] calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量- I# |* q4 g# B; o% t6 T# E
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
; U% {. P$ l2 Y( {4 A$ Z( z. W3 ? ?, I) t5 T; i$ v4 c( R. O
max1=fabs(AA1[0]);" r+ Z3 ^( n5 h# r) [! ~1 x# X
for(i=1;i<nB-1;i++)
' E D$ N, B/ b+ E" r if(max1<fabs(AA1))
: [" }/ L9 l) r. }' w9 S max1=fabs(AA1);
3 C0 Y$ h: ?7 x/ u max2=fabs(AA2[0]);
( z+ E4 b" p+ H h$ u for(i=1;i<nB-1-count_PVnode;i++)6 U; M x2 z. W/ T( y
if(max2<fabs(AA2)) ( M" t6 R! M# I ^3 B; w3 k3 _" m
max2=fabs(AA2);& U& {4 Y q& p' T+ m6 G( _
for(i=0;i<nB-1;i++)5 R. ^7 d! t9 I; u0 O: t* g
sB[i+1].Phase+=BB1/sB.Volt;
1 u6 P: N. e1 H* X' W for(i=0;i<nB-1-count_PVnode;i++)
9 z+ S3 Q" q& E2 E sB[i+1+count_PVnode].Volt+=BB2;/ ] d: K2 p4 n/ f" ^: C
for(i=0;i<nB;i++)
8 u) s& i2 `" d) Z8 Z9 n3 n {
% b7 c2 U* [' N( E9 L* x, X. S& } printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
0 P& Y6 U3 ?& f7 y0 b5 H : n9 k0 E% \* \, N6 x+ n) ?
}. ]- h6 D, Y% ~" G+ Z' E' ?' q
printf("\n");
; m! R0 c2 w& B' y4 n" R' M* K ci++;/ h0 L) M" b# s
}+ o r: d6 T3 Y$ u4 q7 @
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
8 B/ g% O# j @, X4 @这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|