|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
6 P: j) U7 C% N- y
6 R+ y7 Q# U5 C
( M: n- V$ L3 ?7 `/ P4 L 因为我不知道问题出在哪里了。。
2 U: r5 S' {' t4 t! N. `+ D1 u) ado
n9 z( |" X6 m" e0 o/ O7 A {" P& D, _3 o+ O; m2 h0 y
//求解不平衡量! r/ T: G b2 {, a# c& Z, u
for(i=0;i<nB;i++)
8 ^' e% B" g% e" B, \' ~$ M9 W: n {% T/ B3 y. f0 P# @& p2 y" A' [
if(sB.Type!=2)//假如不是平衡节点
$ r$ o4 w \$ _! [ { * c! T) r0 G( x# b& w
DP=sB.GenP-sB.LoadP;0 X! N) A6 \: F$ ~. w0 |. P7 L+ Y- H
DQ=sB.GenQ-sB.LoadQ;
7 e4 h- p. ?; f# i! \/ I( v 6 i! i8 P! a& a( Q% S3 j
for(j=0;j<nB;j++)1 e; k$ n" }- v4 V
{: e. B0 P/ D, g* v5 C3 e2 U
A=sB.Phase-sB[j].Phase;
4 O: _$ C1 M6 ~* r DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));1 @" c# b$ z; [8 K V* `
, z3 ^2 l4 F& P( n% N& ^ if(sB.Type==0)//PQ节点
, |" q: l7 k: ~6 N5 F6 ~ DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
. m9 O0 N R, {' i" O/ M' K% \ # L2 z E% E8 `2 H
else if(sB.Type==1)//PV节点
( _! K) c2 a6 H1 h1 j DQ=0;5 T* L! F( Q: M: e
}! o5 r- I3 w1 b/ ?! l
} ?$ L. {! M* L4 w1 t# R
else if(sB.Type==2)//平衡节点
) b0 l3 V K0 F DP=DQ=0;
# [, n! R& i+ D5 z) ]: n } 3 C4 I. j# ?; B. X, \* p
//for(i=0;i<nB;i++)
5 `6 N5 n7 M3 {( x- Z0 |+ C // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
1 T- K$ x' j; ]( O( w' d+ `% _* R
//求解修正方程
T/ H& t9 y6 H* C- R for(i=0;i<nB-1;i++)
2 H* d9 P9 o8 g. K& E) x AA1=DP[i+1]/sB[i+1].Volt;
8 e- }% s; M7 b for(i=0;i<nB-1-count_PVnode;i++)
- m+ I# X( W7 f r1 R AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
9 i) H0 X; c4 {" S# _. D calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
0 V) H4 I! s1 G2 J/ U calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);0 Q) _9 f+ I. H7 d9 d
) q0 t4 b, b' q" q, m* J F. u max1=fabs(AA1[0]);, W- c2 Q8 G% `8 J a
for(i=1;i<nB-1;i++)
" s6 n+ C% Y6 Y if(max1<fabs(AA1)) 1 `' t' i- T& p
max1=fabs(AA1);
% | z% Q# H c+ q; O# K2 K$ y4 S max2=fabs(AA2[0]);! k9 N: @4 t; d2 o# o
for(i=1;i<nB-1-count_PVnode;i++)
/ _5 c: ~/ |' a# Y if(max2<fabs(AA2))
/ r, h* w/ N- |6 e max2=fabs(AA2);! f7 W0 N- h7 m; ]* c0 x
for(i=0;i<nB-1;i++)
0 }! w, L9 J% P& P4 M sB[i+1].Phase+=BB1/sB.Volt;
* v3 G" T! K7 @% u* ?6 {7 x for(i=0;i<nB-1-count_PVnode;i++)
% h, I+ }. o! p2 E sB[i+1+count_PVnode].Volt+=BB2;
3 _* P* G, V' o& M for(i=0;i<nB;i++)
' q d: k6 l/ Q { + m5 I4 s) k( N7 w5 Q/ H4 K+ J
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);$ z e5 `$ Z- L: @
; j3 a" k/ L0 p- V+ e# D6 P/ k
}2 y" \8 M9 E/ Y, P) [
printf("\n");
6 A- P/ x% l# K. r4 q ci++;4 a/ s5 G2 \: e& w3 @4 A3 R I2 x
}
+ b! u( }0 z" G9 k' \ while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);1 r4 G8 a. }: k* e% y
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|