|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山 ( d' p5 ]9 i7 |% [( ^& q6 v! ^
: m/ x( x8 p4 H. F3 y4 B& s8 a8 I, Z% |' x: F. _; m* \9 Z4 a
因为我不知道问题出在哪里了。。8 z, m9 b8 _4 B! V7 B) T
do
3 b3 q1 Z( R9 c. Q {
# s/ @ _% y6 y //求解不平衡量
& y& u$ t, o9 s# I2 ^ R u for(i=0;i<nB;i++)& m) T4 |( L! Z7 ?( `) d- p
{
& k ?4 ]) V4 ~/ |- k# m1 R if(sB.Type!=2)//假如不是平衡节点4 N/ l% r( V+ Q$ K
{ 1 u n, A7 J- l. q. d" i
DP=sB.GenP-sB.LoadP;
9 H5 o8 i! Z* V DQ=sB.GenQ-sB.LoadQ;8 s( ?3 n" Q. c g1 l
2 R, ~$ X% Z, H! Y: s
for(j=0;j<nB;j++)
( x$ w# B/ E* X) U1 q5 ]8 I {
t0 y( h0 |- | A=sB.Phase-sB[j].Phase;4 G! m5 `: h Z/ q' i2 _9 S& H+ z" `
DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));* b3 j$ w% \6 w. W: j
9 ]% t1 T B2 P! X8 S% D if(sB.Type==0)//PQ节点% e) y; Y) V+ S( Y( t6 Y" `
DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));
" l! c8 c5 W6 x7 ?
5 d" q# j4 l" ^3 f# L6 m" ~ else if(sB.Type==1)//PV节点8 |" a# U# s4 u
DQ=0;9 r: K9 |) J6 h9 K, {- v, A
}& W$ L! w( I: U
}
$ d3 ]* B, D. ?2 @, E else if(sB.Type==2)//平衡节点
) \( P" ]4 _& u: Z8 b2 A$ H0 E# ` DP=DQ=0;
: a$ c# \% \$ Z( B. ], @. a }
% u; @' m" K4 E& X# R //for(i=0;i<nB;i++) Q7 r( K+ v- {5 E. J$ S
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);9 U/ w4 l1 h$ |* k
6 }5 k% L# }7 K
//求解修正方程
7 y" P! D/ ^) [% A5 c0 o' z9 [/ _/ L for(i=0;i<nB-1;i++)
6 c' K; T% { q AA1=DP[i+1]/sB[i+1].Volt;2 V E$ ~& ~2 U) I
for(i=0;i<nB-1-count_PVnode;i++), C7 J+ M" I4 d% X& t e8 s( r9 |
AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;
$ b7 V8 S) S% {: o) C! B calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量% G D9 V! P8 f% D" u4 H
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
8 i# J0 T3 K' a+ Y) n' j
3 h% A2 W' d/ p0 h( R max1=fabs(AA1[0]);; u7 m3 }5 Z% c. d7 S: X
for(i=1;i<nB-1;i++)
/ w$ A7 l& {5 K/ p3 T/ {% T5 i5 \ if(max1<fabs(AA1))
0 M' P* G( G, n2 r$ H max1=fabs(AA1);3 `( m( {" Z9 d7 B
max2=fabs(AA2[0]);
* Y0 @$ p, ~/ A, ^; K for(i=1;i<nB-1-count_PVnode;i++)
5 m) s# J* [, W/ l# K" X& { if(max2<fabs(AA2))
! V/ H" ~: X5 E9 o3 t, B max2=fabs(AA2);& f7 D& o2 w( a7 s
for(i=0;i<nB-1;i++)8 r% {# s; W3 e7 y! t
sB[i+1].Phase+=BB1/sB.Volt; }' u; f$ I2 M% W1 @- [. @. h
for(i=0;i<nB-1-count_PVnode;i++)
; K% m9 F) U5 K8 @ sB[i+1+count_PVnode].Volt+=BB2;$ p8 s- f7 R# a% A8 g8 Q2 h
for(i=0;i<nB;i++)8 }9 i, J2 q3 _- `4 P4 `+ N
{ 7 a/ K3 q, e) V. y2 g$ {" ]/ X z
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
4 X" R* ~( m/ ]! s1 g 1 S/ m# S4 a6 w
}
: _" ~4 t, X! V# F printf("\n");* N, t( ? Y: Y: i! L# [
ci++;
# x3 z+ p O1 w; [ \6 t J- _ }6 w+ Q6 \ R3 N) e5 }
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
9 N o: T& I- b& W这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|