|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
: k& f u6 T6 l. r0 B; w5 K: x W S; A3 g7 B: k
+ ?; X. i% z& S2 F 因为我不知道问题出在哪里了。。
2 Y% q% }7 {7 q% d3 u8 P. E9 {% p, tdo : n+ I3 e S( \
{
) ~8 N2 I# t, H //求解不平衡量$ e- J# l6 t; ^0 H, n
for(i=0;i<nB;i++)
; X& H$ @: O: z$ X" g: G! i7 o- D {
! |# ~& l/ t9 a: ?4 W if(sB.Type!=2)//假如不是平衡节点
3 C2 F, d' x2 i2 \ { , a7 g8 |% w8 H- S) @/ E; X* l" g
DP=sB.GenP-sB.LoadP;
4 N. K9 A5 Z% c" s3 d# W6 n DQ=sB.GenQ-sB.LoadQ;: X' }, L2 x1 R, }/ b
4 z( h; v. {- e6 h M' S5 E' T for(j=0;j<nB;j++)
5 g* u7 j8 k8 U" O- F {5 { b3 P3 o X5 k- X' B
A=sB.Phase-sB[j].Phase;5 [0 n9 n! N# L) h8 g
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));* |0 w# R! d2 `7 Q, T
4 T1 F: p# I# z: V" O: C if(sB.Type==0)//PQ节点
/ F& s. g# N+ D DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
* ~8 q4 C. r. ?2 `5 x! A0 J6 [1 ` ; M, k; e) b- e8 ?. k3 s" x
else if(sB.Type==1)//PV节点
- T% [& J: l) R; D! W DQ=0;
8 q9 e" ~! ?9 d @ }
; O# f+ N# L3 D0 f. ` }: ~' x ^; G! u% ~% {0 W
else if(sB.Type==2)//平衡节点" L: e2 d0 D8 y& j
DP=DQ=0;$ w( s1 b, |( }4 v
} 1 a1 d3 l$ ~) @* T! x
//for(i=0;i<nB;i++)2 l4 J# S+ D9 t8 ?
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);# X/ |2 y* n" O b9 e
* t) x8 M- S8 t& }% E% q //求解修正方程2 Y7 c; B1 U y- `
for(i=0;i<nB-1;i++)0 L( C9 {! z7 ~& k$ k- _5 L
AA1=DP[i+1]/sB[i+1].Volt;7 O+ @5 ^( b# H, \& }9 E- l- v0 Z
for(i=0;i<nB-1-count_PVnode;i++)3 _5 h1 }+ Y( H* Y2 I
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
6 ~0 ]; d3 E2 `* ^3 t calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
) J6 w0 z& x) {0 ~5 ]/ L calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
_% `, w8 Q A0 ^; W0 P# ?' l4 Y; n" ]$ }' a8 g" D
max1=fabs(AA1[0]);
. i' K" s" Q5 S for(i=1;i<nB-1;i++)
5 l1 s$ J0 d' e2 r if(max1<fabs(AA1))
# v# j$ o( |$ l+ N( T' W4 @6 G max1=fabs(AA1);
3 A8 D% R$ p4 f$ t2 N$ h B max2=fabs(AA2[0]);3 S1 _* s: n9 [
for(i=1;i<nB-1-count_PVnode;i++)
8 D* e7 O0 ~; n2 s# ^/ q if(max2<fabs(AA2)) 9 J; z0 b& ~- x& P5 S0 p
max2=fabs(AA2);
/ e, c R5 w0 M$ H" S for(i=0;i<nB-1;i++)$ ]+ D( i. p9 l) i+ ]9 `
sB[i+1].Phase+=BB1/sB.Volt;- _/ l) m# U4 C f
for(i=0;i<nB-1-count_PVnode;i++)
; W" a- i& ~* j3 L! l1 T sB[i+1+count_PVnode].Volt+=BB2;
! d+ i' I- W$ L for(i=0;i<nB;i++)
8 Q8 S9 k, F& x- O, Q" C {
0 C7 A4 C. N3 l printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
! _- s( C# S: `/ G Z3 w
1 b4 |/ m* h: ]$ s+ x) G8 ]8 Z7 s* D }. a+ n* [# Y$ U! R
printf("\n");) ]$ I9 ?3 B* \5 T+ q% Y
ci++;
% C) Q" K4 A' O }
/ Y* a1 h% L3 ~- L: g while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);+ @( r4 ^2 c$ r4 Y
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|