|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 ! P' t- u& Q% C9 B
3 V$ s2 E* E. V+ z/ n4 I! Q
^& b6 K# y5 O3 g: A7 H9 |8 d 因为我不知道问题出在哪里了。。
( X, I3 M% l6 V+ l1 }do : e4 h/ S3 Z9 b y1 P0 f% O9 Z6 j% E' y
{
$ L3 m! `8 n7 u //求解不平衡量
% l0 C+ q, A' `- \2 c for(i=0;i<nB;i++)
! J$ R3 y9 [5 E! h' m! [" p7 l {2 Z" F( ?' S' l( j. i' F1 d" u
if(sB.Type!=2)//假如不是平衡节点# O' d% s" z$ o: X
{
3 L* C3 L' ?3 P1 R' c DP=sB.GenP-sB.LoadP;* |+ U) {' W# ~
DQ=sB.GenQ-sB.LoadQ;0 B5 F/ V. W* T5 k# B+ e9 C
: g( ? [0 f7 S+ Y- Q
for(j=0;j<nB;j++)
; o2 T+ p. s* i& G {
# u J% B2 Z/ s" {# i9 [ A=sB.Phase-sB[j].Phase;) d5 w1 z8 D/ m( y V6 Q
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
a& r/ ~7 I; Y( F% W
" o& h+ X4 c* @; Y3 h if(sB.Type==0)//PQ节点
g+ g* v* S9 u P0 n- p4 N: K" y4 S DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
7 t/ L* Y1 B( N, c 0 ]) ?: h8 W( Z2 ^ |2 Y
else if(sB.Type==1)//PV节点
6 ]+ W7 ]: A! ~: a! L; o! @ DQ=0;0 ]* O) z6 W/ Z, j
}: u1 H* ?2 X$ g; S! ~! N: M
}' A6 c# _) a; ~8 G% O3 u' [
else if(sB.Type==2)//平衡节点; {! u: y- @$ T
DP=DQ=0;9 J/ _2 O* ^* G5 J7 P2 ]
}
1 i. c: G, r% Z4 Y //for(i=0;i<nB;i++)
) b, Z7 W/ k. ~# z( j // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);# v2 d; D8 i3 m# B
8 N- o: I+ e( i
//求解修正方程
3 I* B& S) g& p F for(i=0;i<nB-1;i++)
, T# o- C2 F' X! e8 O3 a9 i, M AA1=DP[i+1]/sB[i+1].Volt;
1 `& R; a. }5 U* [( g t for(i=0;i<nB-1-count_PVnode;i++); j! k" b* B1 a U$ O" k& D
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;+ U; w( [; T% K1 X+ ~+ }
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
% X' H& g" `4 A: B& P# f @ calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);% @2 R/ z L, |
8 a! C% }, n' A& f, C, t: X max1=fabs(AA1[0]);
: A- Q+ O5 c. a0 |' n, F. d/ v! G& i for(i=1;i<nB-1;i++)7 t0 P7 L- K8 S( D
if(max1<fabs(AA1)) . C! Z- D7 P; f& H
max1=fabs(AA1);0 r' q- F4 _4 N! W6 m# Z
max2=fabs(AA2[0]);
& @/ V( F1 W8 D$ u; X# [8 B for(i=1;i<nB-1-count_PVnode;i++)
3 ^+ z) R( D" p) n0 x& } if(max2<fabs(AA2)) ( C* N! V& D! M- X
max2=fabs(AA2);4 Y4 G2 X7 S/ q
for(i=0;i<nB-1;i++)
4 c% g# _- N; o; |9 } sB[i+1].Phase+=BB1/sB.Volt;
! n& @7 o+ @8 m3 k1 j' ?# y" {" l for(i=0;i<nB-1-count_PVnode;i++)
0 E+ G8 J: k- G& ^+ S) @ sB[i+1+count_PVnode].Volt+=BB2;* i8 y$ t9 I" G( X5 p# N
for(i=0;i<nB;i++)0 C: x* \8 c* x: C' I" |
{ ' n! K8 H8 t& \; u* H+ R. h2 @: u
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
1 `0 K8 Q7 x$ A2 H: E6 {2 Q
1 ?9 @+ G9 j1 b% V9 L+ ? }
" e7 }, D! w7 n, x+ _ printf("\n");4 {. O. ^( M% p$ `9 n# h2 g6 h% q
ci++;0 F7 M/ M- e o9 Q5 a
}8 m7 c8 P. }5 W4 i0 ?6 ~7 n; G
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
: X: q% N( |1 f; I" @2 j$ L这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|