|
|
楼主 |
发表于 2015-6-16 15:02:40
|
显示全部楼层
回复 3# 玉门关山
7 Q% c0 I. J- o% e% b) F+ B0 o% n' {- o- k; t4 F' @
; h/ N+ B4 M% V/ e" c8 F 因为我不知道问题出在哪里了。。
! k' z( o* d. R2 I& kdo ' l4 ]5 H" E$ \$ w
{- d4 v# M7 e3 c% g3 {* F! ]
//求解不平衡量
! E; I+ ] a6 S2 n3 Q @- c9 p for(i=0;i<nB;i++)
& O. W! Z8 z0 a# X {$ m0 Q( n- w) o
if(sB.Type!=2)//假如不是平衡节点1 o0 U+ W. W G! X
{
" r H' C( } K2 e DP=sB.GenP-sB.LoadP;
?! m6 [; U2 A DQ=sB.GenQ-sB.LoadQ;& N3 ]7 g+ u$ I4 L
. M- N, J& K3 q7 R" l, I8 Z. ?
for(j=0;j<nB;j++)
* `1 G) [5 W/ a) D. w {
3 l# S m$ _" t9 u2 s5 ~/ m. p& j A=sB.Phase-sB[j].Phase;
7 H' E0 g: F' \ DP-=sB.Volt*(sB[j].Volt*(g[j]*cos(A)+b[j]*sin(A)));
" C: D. S' \# j# M
- k4 ^: _& }4 N if(sB.Type==0)//PQ节点
& @! k/ o6 C5 o2 B o! o DQ-=sB.Volt*(sB[j].Volt*(g[j]*sin(A)-b[j]*cos(A)));* H# a& D w) @' g+ z* j
: s: r r) T. ^+ W
else if(sB.Type==1)//PV节点
4 @9 c6 Z1 u% j$ D0 C DQ=0;1 W) b2 O2 p: L. p) \' m
}
+ { k8 K( _$ q3 A1 j7 M }
7 v$ s8 m/ m& P6 O: J else if(sB.Type==2)//平衡节点
/ R: J1 F9 r2 P& {. L DP=DQ=0;
( \; I) l k. [8 @6 A } 3 f7 J: M- {4 _/ ~. S+ {
//for(i=0;i<nB;i++)6 \% L, {/ V# z- }3 g0 R3 [5 ^; v- w0 w
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);- r, U8 p# Q: J" c, p
" O H7 y4 e- \; S5 |8 e+ X0 Q
//求解修正方程6 d( R# N/ F) B$ G4 \7 `
for(i=0;i<nB-1;i++)
* v4 B- L4 D0 z3 W6 _ AA1=DP[i+1]/sB[i+1].Volt;
4 Y( v" x8 D p& z for(i=0;i<nB-1-count_PVnode;i++)
+ U% {8 v$ [, v) t AA2=DQ[i+1+count_PVnode]/sB[i+1+count_PVnode].Volt;& S/ d4 M+ w- U9 L
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
, V2 p; i- [5 u% k8 _7 f r calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);/ I3 `$ H: G% D- O
" Y3 g# R8 `+ Q0 W max1=fabs(AA1[0]);
2 e0 `9 |* n+ c; R* t. { for(i=1;i<nB-1;i++)
( {: G' b2 n* c' K* b0 D! k9 k if(max1<fabs(AA1))
) e; e w9 y) }2 ]$ B) I' v/ R8 N max1=fabs(AA1);$ T% z0 g9 s: `( c# J
max2=fabs(AA2[0]);
# g3 w+ M2 D+ L z for(i=1;i<nB-1-count_PVnode;i++)# C: t, b8 J' u, Z& A _. G
if(max2<fabs(AA2)) / ?, i O# g' ?; p
max2=fabs(AA2);
; K; P1 o& e/ m7 w# N3 \. h+ k for(i=0;i<nB-1;i++)
" y) Z- j) ?! A% H7 J) W1 ]* P sB[i+1].Phase+=BB1/sB.Volt;
, s7 J1 ^, V! V$ V% G8 T3 Y5 k for(i=0;i<nB-1-count_PVnode;i++)& h4 L- ~( ?' Z
sB[i+1+count_PVnode].Volt+=BB2;
8 E' f0 F- s+ S for(i=0;i<nB;i++)
. N9 }% k& ]! { { 9 F+ U9 n6 T( N4 {
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
5 t- I- I i4 c3 V' V, \ S* R 2 j' Z! F/ V D2 s! ?
}& T& L& T# w" R3 X4 |
printf("\n");
7 ?9 p S, T0 ` B M$ D R2 O { ci++;
# M% d4 N' I" w6 L+ G. @ }
) V0 W* s7 O& `1 g5 w! @ while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);2 L' \8 V( } p
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 |
|