|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
& n0 c& a0 g. I! i* z$ ` r! A
% o2 E; \+ b3 h# ]; M) \3 y8 _0 O( h; N1 L' }, n, k1 F- [
因为我不知道问题出在哪里了。。
- J0 l2 C% Z: V) qdo ) e# a2 y8 r1 s" }
{/ Y4 {. L1 P, d8 y2 H: ?; Z: R
//求解不平衡量
- B# Q) i6 q. K! g1 ~6 r for(i=0;i<nB;i++): C* M' l- Y# v4 z0 C
{
& x5 L3 I; ~+ k1 X: Q! w/ ? if(sB.Type!=2)//假如不是平衡节点
( t9 j) G# C3 Z% n { X1 c8 b+ e, {
DP=sB.GenP-sB.LoadP;, C# ` C z! F# r" t/ j% T# S" `
DQ=sB.GenQ-sB.LoadQ;
& C- ]3 v# e9 C / D; R% }3 |& M( u( W7 ^
for(j=0;j<nB;j++)" M4 [1 K0 l0 c3 O4 o+ \( X
{8 h- i6 D9 A* a2 V' n2 U
A=sB.Phase-sB[j].Phase;
% x0 u4 ^* G' c6 D! p9 M4 G DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));) Y1 n! q! B/ I+ @4 Z; m* j
+ z# g3 t; z6 q
if(sB.Type==0)//PQ节点
2 H% G2 [# Q" m4 |; i DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));4 x8 n+ k9 a9 W
4 W( ^3 n: Y* U! R else if(sB.Type==1)//PV节点
3 t" W$ [; Z* Q3 ?! U1 A: d9 s DQ=0;
8 `7 L& `' U4 z2 E5 Q" A3 o }! d G* z- S/ ^# g' i F/ _
}
# g1 T" f, G0 f else if(sB.Type==2)//平衡节点
7 g& y3 u, C8 A DP=DQ=0;4 b$ x# O4 D& H; u" x( F
}
& J& h6 Z$ R9 e! x6 A //for(i=0;i<nB;i++)
7 ^' t/ F; H9 j- J/ v6 \ L // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
3 s8 o5 V6 e1 Z5 k! v# u/ W3 V$ p
//求解修正方程
. t7 z- }3 w; c9 v for(i=0;i<nB-1;i++)
{0 S0 a' A0 M AA1=DP[i+1]/sB[i+1].Volt;
$ Z5 A8 U, |- a+ K m* c for(i=0;i<nB-1-count_PVnode;i++)
+ [3 e2 x( y0 W1 W* J3 G AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;- q7 Q- g0 V8 R% Z/ m
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
0 Z) m9 }* N. x4 k: m calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
) Z3 q" c$ |, d' q5 d
' a7 y$ A6 v& s max1=fabs(AA1[0]);
7 w5 r& c! j5 F v& p for(i=1;i<nB-1;i++)) ? n ?* z. Y3 [/ V! U
if(max1<fabs(AA1)) 9 R/ [( k1 p( l% G
max1=fabs(AA1);
' u! H3 g+ u/ w8 u2 O+ B2 N max2=fabs(AA2[0]);5 Q F) S1 E: {
for(i=1;i<nB-1-count_PVnode;i++)$ \4 Q; D u# r$ m7 e2 m" M% b# E
if(max2<fabs(AA2))
) V( y A0 g) k F& ^ max2=fabs(AA2);4 P9 l" b( Z5 {$ ]& u8 v
for(i=0;i<nB-1;i++)6 _5 w/ ^1 K( N/ i
sB[i+1].Phase+=BB1/sB.Volt;
- [) \" s& F. x7 S4 n6 s for(i=0;i<nB-1-count_PVnode;i++)' `; I* Y0 p. c
sB[i+1+count_PVnode].Volt+=BB2;+ J" V+ D1 a- c3 t$ o" A4 V
for(i=0;i<nB;i++). U* W0 H5 b7 C l# J9 L
{ 2 j/ U- F# ~5 N. f" O* B
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
' l; v; O8 D) ]( Z2 z ) J( h( J3 N8 O( G6 z
}, V: X" C; y8 t, R! Q5 J$ i
printf("\n");4 O' U! ^6 h* P3 V7 W
ci++;* i* Y) L. p" o( ]$ D9 X
}
+ Q" ]( G. h. V& v* Y6 N while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);1 C* Y9 g$ o0 z: r4 D* q
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|