|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 ( M" e1 q/ V `4 F9 |; I" O
# ^9 k+ [, d6 g& I7 J; s9 r
$ H6 z" Q. a! f! a: r3 d3 K 因为我不知道问题出在哪里了。。
4 A( l& a/ g$ a+ y7 |do ' J+ O6 R" \. a6 t- R! g
{% p4 Q4 r; w7 m& Y. l5 t
//求解不平衡量
6 H, j6 j1 w% ]* W for(i=0;i<nB;i++)$ _7 ^7 {4 x0 y6 x) y; i
{
# T! l7 x/ N# D7 {1 [ ~( b, [ if(sB.Type!=2)//假如不是平衡节点 Z4 |: Q3 B t7 S' x5 h2 e& w0 E
{ $ v3 ^1 }& s1 B+ V' V3 ]' s
DP=sB.GenP-sB.LoadP;& K4 D& M3 M! `3 L4 `/ i+ K" F
DQ=sB.GenQ-sB.LoadQ;
- v" {! O0 S; V% ]& U7 i% I- T
/ f4 x8 S4 g9 i) s% o- l for(j=0;j<nB;j++)
" G: T0 u- H. ^ {
/ V# T- }8 ?* O, K- k A=sB.Phase-sB[j].Phase;2 _: i4 p+ O. R0 p' C
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));! \) i$ b7 A9 M" K& b m# u( b- o
" C/ n( [) `; D( k: I$ g, ^' Z, @& ] if(sB.Type==0)//PQ节点' a. v9 P% u. v- r& W
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
) Y; O, X [- _! j* [' V, X8 z: n
8 Z, l* U1 O) I/ V else if(sB.Type==1)//PV节点# I% R8 Z( _! G3 t2 B) {
DQ=0;7 {/ b3 v% s" M% p& l
}
+ `" B" X: F( g& V! i }
/ s5 _, U. I$ K( F6 i Z0 b; V else if(sB.Type==2)//平衡节点 K0 @5 w7 [1 u! _) S
DP=DQ=0;
8 Q6 U9 q" m, c w0 c [ } # D% m- R* U0 C0 h$ ?& j
//for(i=0;i<nB;i++). Y6 H/ J5 [( h! v% a8 N0 m
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);3 ?6 Z' B1 A' j- B
/ |& h* [# B6 u+ s$ s //求解修正方程! u. P2 [( a; @' D
for(i=0;i<nB-1;i++)
4 [ m2 p7 p' p; d% @( z! R E# } AA1=DP[i+1]/sB[i+1].Volt;
/ ?2 B( j) @& O' A7 |% q/ F for(i=0;i<nB-1-count_PVnode;i++)6 ?' R; N$ _$ j8 A
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
& M# K: j+ q) }% E calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量4 W3 }) ~0 x. Q% ^5 F$ O. N; }6 \
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);5 {4 F3 o4 H# C$ E( y( S/ s4 w
, ~: k; `( L* @8 V max1=fabs(AA1[0]);
2 ? t; O* L4 @4 U3 | for(i=1;i<nB-1;i++)
! y" g4 {7 Q* p if(max1<fabs(AA1))
& t) U* C$ @6 A6 k( @& M6 N( K& i max1=fabs(AA1);
2 V9 `* P: _9 U9 D* ?* @3 l/ N max2=fabs(AA2[0]);, W6 R9 T4 @+ f* [
for(i=1;i<nB-1-count_PVnode;i++)* n g) H: U6 x
if(max2<fabs(AA2))
+ H$ Q5 P; }, z max2=fabs(AA2);2 |: T8 R+ e% I' t" b' M4 h
for(i=0;i<nB-1;i++)
9 U8 R) Z' R" b$ S sB[i+1].Phase+=BB1/sB.Volt;+ R( Y" Q! c& E9 B0 E$ w1 s
for(i=0;i<nB-1-count_PVnode;i++)9 l' R! R' [+ H' x2 c! H
sB[i+1+count_PVnode].Volt+=BB2;
$ V8 y- s' a z+ [- \! l for(i=0;i<nB;i++)
- L- E2 a2 K, Y8 i7 U. D { 7 H/ t3 ~$ O+ m Q7 Q0 e
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);& Y6 N, ?4 |6 b
6 ]6 r5 A+ V' \# s q }
Y# m, |- Q/ \. } printf("\n");
i6 w7 q x2 x. e3 P/ H7 U ci++;
) ^" y# x/ l- ` }
! H. N. A4 u E @1 A$ H' n while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);% ]" Y* R' n' C( ~
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|