|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 - R, O# j) o; M* D6 G
$ w; u3 |. M$ Q( ~8 t8 ^# ~& O! o
2 @$ B9 q2 n6 H( c8 Y 因为我不知道问题出在哪里了。。
, z4 q; {' J3 F, odo
$ J( ?* p, }2 Q7 y {
% G m. Y- h, n; x" O6 ` //求解不平衡量! w: W: t. u9 w9 d5 t+ f1 {' O
for(i=0;i<nB;i++)
+ b3 P. E' L( W5 w) ]7 g/ r, { {
9 c S, z9 Y; f; N) j+ c if(sB.Type!=2)//假如不是平衡节点" d2 s# h: e# @0 S. J. o1 K' W
{
b/ I9 K; U, R3 B$ J/ p DP=sB.GenP-sB.LoadP;
4 t" `4 M5 D* r/ V: ?' R DQ=sB.GenQ-sB.LoadQ;" }* S. ^' O3 E; _6 O$ }
; R- l8 p4 v- C+ g+ v I for(j=0;j<nB;j++)
* U. l5 P! r% ~' v4 Y/ b) d; t {& Y" k5 H6 Y; I* p7 g5 }
A=sB.Phase-sB[j].Phase;
: e+ F7 D( T2 t; m: K% Z& g DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
, W2 t3 N9 b' O$ v) w
, w& O9 V# J3 {! Y if(sB.Type==0)//PQ节点0 Z. }1 A6 p2 r: E) B& P
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
7 j j' e1 l. M; o! s: n# `2 w * n* X2 [% s4 X8 ?4 N
else if(sB.Type==1)//PV节点
4 w# ]: N/ Y( K' I s5 u DQ=0;. \& `) X/ t9 c: M$ ~8 D3 w3 @, g6 A
}
6 A9 f) e, S& N% }& {/ Z# { }0 h& k5 r" L4 t$ q$ v* P& h
else if(sB.Type==2)//平衡节点
& X3 L- K ~9 y; | DP=DQ=0;
7 Q8 b. |6 T( k7 ^" _( d }
' p1 b; B" ?! C //for(i=0;i<nB;i++)
4 [. E" E3 N$ Y8 d4 D# r, U // printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
6 F% u1 u6 g; b2 \, l' d7 J9 F3 P5 f) u
//求解修正方程
: x) J& w m _) z9 S4 N for(i=0;i<nB-1;i++)
3 O8 d2 X/ V7 y AA1=DP[i+1]/sB[i+1].Volt;! `& h; H. Y# v: G8 |' ~8 [: m
for(i=0;i<nB-1-count_PVnode;i++). l5 q5 G }7 D3 G
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
; X5 \ Y1 S: q calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量1 V' I& r) I5 ]4 N& j* v) B
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);" }1 T# `6 J2 N; w! D, d: `) w
, u# O6 t% v7 p1 z! n
max1=fabs(AA1[0]);2 z5 g2 P0 C$ E) Z$ @& J) y5 S
for(i=1;i<nB-1;i++)8 c, M- c4 e; w, o$ _: Z
if(max1<fabs(AA1)) ( U/ N+ H! L: `3 c2 d
max1=fabs(AA1);0 J" W! k# ~3 a% W$ C
max2=fabs(AA2[0]);
3 S. [) b8 ~: {& G* |: ^ for(i=1;i<nB-1-count_PVnode;i++)+ {0 x3 E& s: g& B
if(max2<fabs(AA2)) ( q" l, ?5 Y6 m' ~9 \# c8 l
max2=fabs(AA2);' T+ I }( T/ t* N$ Z8 t# b
for(i=0;i<nB-1;i++)& g9 [- t. E' \7 u. i
sB[i+1].Phase+=BB1/sB.Volt;, ?: y | R+ I9 }2 u! ^# S
for(i=0;i<nB-1-count_PVnode;i++)2 m$ z# s0 C2 L1 W! q2 R
sB[i+1+count_PVnode].Volt+=BB2;, I; _$ Z# k* }1 C- A/ `
for(i=0;i<nB;i++)0 J ~& c& j$ d- W- j! v6 ~( k {6 ^
{
# f& ~9 o4 ~6 l0 x printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
* a F- O7 { L4 V2 a1 C }
* r8 v; w: {3 D8 O; N }
+ m" E1 g9 O* ^" d' {! O printf("\n");+ K1 D2 N |) g' f4 w2 Y: `
ci++;
1 B- }$ @* v3 u9 y. B& y) i }" Q. Y; L$ b% y9 d, m5 E+ e; z
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
& P! B5 R8 v" k这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|