|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 - v2 h) G7 E8 v+ z* o
' I) s, f0 ], T3 N. f
$ [. j: C7 D& F4 }* I# K 因为我不知道问题出在哪里了。。+ t! p; A& I3 i, q6 O3 u- S7 T& e/ {$ p
do 8 m3 y, `$ S4 e3 h$ [+ s4 B
{
7 P+ \* j9 ?; J4 t: i& S1 U //求解不平衡量9 k1 j9 H1 D! N C4 c, P- A* Y
for(i=0;i<nB;i++)
4 ^! V8 Z3 e' [5 I7 \5 [; b {) q# R, `/ H4 a1 b: j* H
if(sB.Type!=2)//假如不是平衡节点$ i( c! ?% s% b% U
{
/ L, K" x( K( n7 T6 @" i7 s1 F2 l DP=sB.GenP-sB.LoadP;0 Q0 a7 z& u+ T
DQ=sB.GenQ-sB.LoadQ;
7 s. D2 k2 D8 L; ~! R+ H5 p $ b }4 P* d: {
for(j=0;j<nB;j++)8 r0 f# e( l) k- `
{- Z5 m* R& Y, U& b( a3 Q
A=sB.Phase-sB[j].Phase;7 s/ }8 p3 i4 v2 M9 u
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));) |1 f& C# p* F @
) Z8 w* `0 q7 P
if(sB.Type==0)//PQ节点
$ ~- a/ A% D1 L1 K DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));" ^6 r9 N6 q c( I
$ ?7 K+ H2 M1 W2 ]% w8 ?8 g1 P
else if(sB.Type==1)//PV节点5 E! V) @% E" i# p% G+ G0 v
DQ=0;2 C* W; Z! S5 O0 `" h, ?' _
}
- z9 J; o! u) M8 M( q }3 ~, r c. ?4 [% Q* l. p/ n S6 x
else if(sB.Type==2)//平衡节点
. s; a& w6 {$ |3 u* a" { DP=DQ=0;$ n3 p1 Q9 a+ n7 R* q- j" E% _3 N
} : }, h5 Y3 o7 Z3 B% V% @/ H: l3 h
//for(i=0;i<nB;i++)' T3 z- o" R6 @) C q" y3 ]* x
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
1 [7 ~+ i& m. P* `1 h; }* I1 }- U& e9 S! P, {: {
//求解修正方程9 N/ |7 r$ f" }7 T! {5 d! h1 c
for(i=0;i<nB-1;i++)3 T( |; ~# x3 t9 g
AA1=DP[i+1]/sB[i+1].Volt;
/ K. _5 W: ~! G- t, X) u" U; n* J. S for(i=0;i<nB-1-count_PVnode;i++)
/ A, g8 b2 h' n! O) f AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;/ S- C9 ]8 A5 n& k8 _
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
. N1 j& V! P2 s; f5 N/ y calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);! w% p* @* R" ]0 K p+ f$ Z
. Y1 r2 O/ _7 O7 I% R max1=fabs(AA1[0]);
& t2 X: n: @7 G1 }! F$ t8 T' s for(i=1;i<nB-1;i++)$ a e: Q# e+ ]) [4 N1 d
if(max1<fabs(AA1))
7 E" P, c! U+ f max1=fabs(AA1);
" L* e/ C1 m4 S9 _8 T max2=fabs(AA2[0]);
% Z3 O/ N1 }8 d; V* t for(i=1;i<nB-1-count_PVnode;i++)
% v' `( I. B2 y5 K* X if(max2<fabs(AA2)) 9 o d! ^) F" M) `
max2=fabs(AA2);
: k; Q% [" U# o8 _0 A( x# P for(i=0;i<nB-1;i++)
; N* B$ N. {# T/ i. @ T& O sB[i+1].Phase+=BB1/sB.Volt;2 g+ q5 q# P/ c( G& Z0 t8 S0 r
for(i=0;i<nB-1-count_PVnode;i++)' q. w' [" u; {" ~. G; ^
sB[i+1+count_PVnode].Volt+=BB2;
r6 B, f2 K1 O* h for(i=0;i<nB;i++)
# _: b" T, n3 g; P8 | { / _8 R) K; z( _
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);. q: J- ^7 o; d3 }8 ~
, N7 z/ t. o( H
}
5 b/ a" n& O, R( m" E) U2 D u# O printf("\n");
* ?/ T2 M6 h* K* y( ? ci++;$ h! t+ N; N: s, {! q7 z0 `+ d
}
, I, ]$ X+ q! w while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
% G& ~3 U+ J5 q4 z# p4 M: Z这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|