|
软件程序
软件/程序名称: |
牛顿拉夫讯 |
软件/程序大小: |
1k |
软件/程序语言: |
简体中文 |
运行平台: |
Windows XP/2003/Vista |
功能简介: |
牛顿拉夫讯 |
授权方式: |
免费版 |
研究/处理: |
汉化 |
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?8 I J, @& V8 c2 i# p; i. m
牛顿拉夫讯
M6 C9 H! T/ l. X% ? [' kdouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)
. g: @* D: ` G4 \{
7 Z4 J; Y9 R' h \4 i: K int M=2*(iNode-1);
: d- j) [+ H5 ]# _& A* b$ X8 v int flag1[N]; // PV节点标志& t2 D3 J1 l( o
; f7 J @+ ?. R4 P4 R4 T9 S: c double g[N][N]; // 电导7 j( j- t* ]! x4 d
double b[N][N]; // 电纳
' @! B1 _2 E1 U- u+ M7 q3 ?4 j! w' x double dvv[N]; // 电压微分
) K, R3 p. K; e0 j( [( j double angle[N]; // 相角
9 X- v5 O7 D7 i4 {% V: i double p[N],dp[N]; // 有功及其微分! y# S% u7 X+ A& c8 \
double q[N],dq[N]; // 无功及其微分7 v7 ? T! |4 J+ b: s& o
double e[N]; // 节点电压实部1 q5 B. B2 g" [- G4 a' |% A
double f[N]; // 节点电压虚部' |/ s ^, h# A: R: j5 _! c# B
double *jcbb = new double[M];
/ j4 E& G; v* H* V/ F5 {$ i: Z3 H double *jcb = new double [M][M];
5 O% R& P8 w P$ w' `$ I8 z% x$ \: A5 l. `/ q8 s* [$ N* A$ ^
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;* d+ R$ Q# }9 o; N6 C
double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;' t2 I$ o3 g: d. [4 X. Z. m( n5 e
double lossp=0.0, lossq=0.0;: U) y8 b, M% H3 r/ v g
node = iNode; // 节点数- x3 C+ l J% m. Z- I; m5 p7 R2 @
balc = iBalc - 1; // 平衡节点
' h2 m. H( y7 b9 Z; m& { for(i=0;i<node;i++){
) T& O8 T6 d5 a7 U% z flag1[i]=0;+ U! x1 o) ?3 u/ C' h5 Q
dp[i]=0.0;' |4 I! | }4 I3 Q9 f
dq[i]=0.0;
/ j4 a% {1 m5 m dvv[i]=0.0;
" u, _' T' }& q* T) b2 R; l }
( Z" Z- D& O$ \' E* ?$ M: M( h s0 _" C: z0 l/ t$ A5 [ p
for(i=0;i<node;i++) {
) b q8 F) O. w/ @$ j1 w- s+ H for(j=0;j<node;j++){1 Y: {7 X, J* q& @
g[i][j]=0.0; x6 s% o( {/ ^8 C- k$ l* D# Y9 W
b[i][j]=0.0;
4 O0 N5 R/ T! U Z$ R: A }* Q4 W2 ?/ p! N4 Q P
}
8 [7 }: @, O7 S, v; J* } for(n = 0; n < node-1; n++){
- [/ P( X. F! s. A% _5 p, E i = pRoad[n].head;* V- ^6 q1 M0 d1 k$ z* m8 D- q4 q1 K
j = pRoad[n].tail;
% M0 R1 Z' f% l0 r+ A: m, i rr = pRoad[n].r;
' ?! q, a3 U) _5 F7 T; W xx = pRoad[n].x;* i- K: [6 v0 e
// printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);
; T" K5 j$ o3 u! t8 P$ F2 I9 Y# }. x bb = 0;
3 R; I& ?6 i. K* \6 g9 E k = 1;
: B& U1 ~$ j5 b8 L6 H9 K
% ~, N! a. y3 \0 I g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k); b8 ]: E9 J8 X
b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
: Z1 s/ X9 y x4 g& W8 N u g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
7 X5 k3 e7 P, ~5 P, D b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);" b3 P0 `8 c8 s
g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);1 S& h: X* M6 n" N2 Y
g[j-1][j-1]+=rr/(rr*rr+xx*xx);; ^- W$ g" O. s* o3 |+ f
b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));$ w, h* ~% A5 k' w$ O
b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));
- p3 o& Q: L8 A( C7 M }
& \4 Z7 w( Z2 I8 z$ F1 g' ~ for(i=0;i<node;i++){' H0 K( t; a, N
angle[i] = 0;
2 a% A2 T+ h- j6 T2 R) n/ \$ o v[i] = 1;( y9 V& Y: o% f9 _& ?7 F
p[i] = pNodePQ[i].p;; J& A- L3 d4 M9 X1 ?0 E0 c8 a
q[i] = pNodePQ[i].q;
7 w( R4 h T6 X% i9 D% Q; Q/ D// printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);/ X3 O/ U8 W1 K0 M4 b) u1 }
e[i]=v[i]*cos(angle[i]*PI/180);1 Z B* y' c$ P" W% a7 O8 g) _7 }
f[i]=v[i]*sin(angle[i]*PI/180);
" w q$ `6 g0 k: O2 z- P6 Z$ { }$ C8 }& d, k/ j8 J2 u
// flag1[1]=1;
$ ]9 B! x2 H+ q0 `& H7 N+ M( o1 ?, X7 h0 x J3 n) i
// printf("共有n=%d条支路\n",n);
( G, G' u; ?3 G; h2 }7 Y// printf("节点导纳矩阵如下:\n");
N) i1 x/ T R3 S/ s & N6 m9 z( J5 e4 f4 Z8 X
// for(i=0;i<node;i++){6 o; Q# ?) X; s' a. `; k; d
// for(j=0;j<node;j++)
. @3 }. z: z* E( D// printf("%lf+j%lf ", g[i][j],b[i][j]);
( G( s* y/ @4 G t0 N// printf("\n\n");}
& V7 Z4 |2 I- Y//2 f- \2 Y# |) C
// printf("初始值如下:\n");9 f& p% I1 R: F1 l( d+ `, n
// printf("节点号 电压 相角 有功 无功 e f\n");) A G) Y, q3 U6 w/ R* K
// for(i=0;i<node;i++)( `$ v- ~( j0 Y
// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);8 G2 Z) B' e' y3 ]) h( i1 r0 ^
% A _# Y! \6 o6 U5 S( l& E, K for(t=0;t<50;t++){4 k9 Q! R( @/ r/ X3 d
// printf("\n第%d次迭代开始:\n", t);1 w& E0 @ v. V1 b
for(i=0;i<node;i++){
# s; B! @$ V2 U3 Z if(i==balc) /*如果是平衡节点*/
" s, ^5 ?/ Z) ]7 m continue;$ k$ k% W+ J n- W e
else{
+ y' [' \) v, A1 v" Q" a com1=0.0, com2=0.0;
# u |* h: [" }1 ~/ j/ E3 [ for(j=0;j<node;j++){, f7 q& ^3 g F) g V
com1+=g[i][j]*e[j]-b[i][j]*f[j];/ f5 A5 W" c9 K5 g* q
com2+=g[i][j]*f[j]+b[i][j]*e[j];( O5 I P2 U* s6 ?
}
+ K7 S% g' P9 @0 r if(flag1[i]!=1){ /*如果是PQ节点*/% u4 @# X( c; N1 h
dp[i]=p[i]-e[i]*com1-f[i]*com2;
& C7 y0 R- R; _) R" s1 b1 E, v; { dq[i]=q[i]-f[i]*com1+e[i]*com2;1 s5 i% d2 R }
}/ j R2 C# M' l: p T' l! `$ Q. H
else{
! _0 r5 S+ ^' Q6 ~ dp[i]=p[i]-e[i]*com1-f[i]*com2;) b- Z7 M: q# x- I4 h) J4 Z
dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);8 N2 r7 n% Z1 @8 [* T# o2 [
}
! g( I/ m% f3 r' q4 P }
) ]% i q( H4 g' I6 f1 e* D: m }& s) s i! _, r8 a" [: k d" A
- g& u1 C8 Z S# H; E8 U( _# t for(i=0,j=0;i<node;i++){
6 s- |. i/ f! O0 F/ y( B- s if(i==balc) continue;
6 ?( h* f4 W% | else if(flag1[i]!=1){7 L' q1 I. c. p! f. a
jcbb[j++]=dp[i];
7 }; p* \, Y8 \( H jcbb[j++]=dq[i];# \) c/ e; ?# q# ]& X0 B
// printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);
. U& I6 }2 s8 n4 Z; w% f }1 O6 H9 N" b* J% Y+ w. @: { n: J
else{5 ~) X, n: B8 j& o0 y# A
jcbb[j++]=dp[i];
, }5 H% y0 C3 t6 w: b jcbb[j++]=dvv[i];
5 P/ h! ^( r( o. r) S5 [% n// printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
1 M1 A' I# [2 H* Q4 a% Z6 N' k$ @ }* u+ q8 \& g# p
}
& y! w a* W+ d// printf("\n");
/ R# x! B# Z7 s! `
, C- F* ?" J# n Y4 }1 W' Q for(i=0;i<node;i++) {6 |8 ? E/ T$ `3 m; T6 p
if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)
2 u% W6 a( G0 d C V6 l" f; T break;4 }4 Q2 h7 F( w6 i, F8 h }0 V% K
}# c9 A5 o( q; C# w* B+ {0 f4 B
if(i>=node)9 v& `4 @9 X7 l, h; I
break; & j) W% p5 `. y& r2 a9 k+ m2 C1 o
3 Q( V- ?) F& P% C% Z, u
5 }8 |3 D7 d( D @: I for(i=0,i1=0;i<node;i++){8 o6 ?! q" O2 r# x/ x
if(i==balc). I- q3 [) H' R# @9 i* o
continue;4 w) L6 d J; m5 e. q
i1++;
' F$ p+ Q7 g" h- n& T$ t# ^$ _ n=2*i1;9 O; u7 I% _& w% d
for(j=0,j1=0;j<node;j++){# [0 {, A% ]: x7 G) H$ t( P, u
if(j==balc) continue;
, x! a8 D+ ^" z2 J% u j1++;
1 u3 ^4 H m0 q- L! Z+ z m=j1*2;
5 N% F0 \$ u, A if(i!=j){
0 e) c" i( ?$ j jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);5 C) E8 m0 J1 C& ]( E5 c$ L- A
jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];6 V, |% g7 O0 v, x4 p' F0 ~8 O
if(flag1[i]!=1)
3 K! ]% n; m' P5 r: k U* r {1 a7 j$ h0 ^2 {! Q% W
jcb[n-1][m-2]=jcb[n-2][m-1];
8 [6 |$ T3 ~$ n* x( `) q# F+ h# I jcb[n-1][m-1]=-jcb[n-2][m-2];: |0 l7 z$ o4 T: w+ B' Z8 E
}* I+ M% b5 |% f/ G% C
else/ V/ J* }9 u6 X, k
jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;- }9 \' K1 p: x. ^( R8 B
}: u; l- g9 q! q2 u
else{7 \+ ]+ V9 u4 q
com1=0.0, com2=0.0;
! L. L) V+ x0 _# X9 D: g. Q for(k1=0;k1<node;k1++)0 X% Y9 [8 y0 o, J
{3 e$ B' U$ M9 A% H+ C4 x
com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];
% t* l% b* J1 N5 _" O8 Y( U com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
' D" {# d% g# X: d, a0 }' v }
* |$ t, K9 C4 S. R jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
: Y2 H+ A- Z1 T3 d jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];
" n3 ]+ e( k( w f) X if(flag1[i]!=1)
) U& \; {) R0 Y4 D6 Y$ P- K6 g. z" z6 { {
) j/ G4 u* z& c- E jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
9 p/ \: e& W+ s9 b# I jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];) n6 I% e6 l2 B _
}
' V( \, h+ i, ]( I+ B9 H else
3 m6 s: n; v) u {5 d v0 O z, n3 j, U' o% W! k+ R
jcb[n-1][m-2]=-2*e[i];2 U# S4 y; A- Z8 t. l
jcb[n-1][m-1]=-2*f[i];
: s; X# B- N. ]- K6 q- o( q) T }
6 F8 W4 s- s4 m2 d J4 [2 }6 K+ D }! @! ^+ e; V) E, Q8 w- [
}
2 f. K. ?+ I6 S+ ]! y }; m& ?1 H- x% `3 o
. a9 X1 c! g8 Y* y6 X9 R k- w
// printf("\n第%d次输出-J矩阵如下:\n", t);
0 Z K8 C& s; l* [7 Q for(i=0;i<2*(node-1);i++){
8 b7 [# g" k# t+ \0 ~; c& B" z$ I for(j=0;j<2*(node-1);j++){- w. h2 Z" U- \0 K( a( p4 j+ d! g
jcb[i][j]*=-1.0;
1 v# V! W/ u! ^// printf("%lf ", jcb[i*M+j]);
" s' m8 n, d3 p) v3 R9 m }3 P7 c& t- [2 [* e0 U
// printf("\n\n");9 M0 T8 H* N( w
}
2 A z. R* K, h! K
* T5 L3 H* V# p& {* N /*算线形方程组*/
4 j* M1 O0 |8 L; A; ] if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {9 F, X& l% g% p$ ]$ \5 Z% M
for (i=0,j=0;i<2*(node-1);i++) {
. j; n# U4 O" O# U y2 X* } if(j==balc) 7 o! \+ D* x8 t! M9 y6 f
j++;
% p8 m- Y. v9 K$ _/ a
/ x* y& `9 A) j9 Q4 D, |6 b& y- o if(i%2==0){, H7 _7 h; s; {& ~- y. I
e[j]+=jcbb[i];
1 [8 ^+ I5 C) X# f3 `// printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);
! ^7 }5 {" w% E6 ^2 o! R$ B; c }7 P3 q% i! H& ?2 u, P4 ?/ s$ z2 [0 J% \
else{( Z* [, x0 J# S$ G
f[j]+=jcbb[i];
( d r8 N$ ]( W- e7 Q) u/ v// printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);+ O' I7 n, H" v' S& p& ?- o+ @
j++; V/ V t. J C' h
}- V5 k u3 \9 @3 E& R( Y) y$ e4 b
}
: D: C% e, V6 w6 @# ? }
( _0 ]: g( O) R0 g5 A. U }
- }5 g8 N2 t" z) {' R5 d
; ^3 E- m0 \6 E. n l& V// printf("共经过了%d次迭代\n", t);
& P4 f' K, F# p/ @9 D" B / K5 T1 Q1 _- O0 L1 ]( i1 K* q
/*求平衡节点P,Q*/
9 I# B2 ~: u N8 \ i=balc;: Y! a7 F! U5 Z- ?
com1=0.0, com2=0.0;
( h0 U. Z* h! s for(j=0;j<node;j++){( `) y' y1 y, e' N# S. o0 ~3 s$ z
com1+=g[i][j]*e[j]-b[i][j]*f[j];
* k/ \* f# @5 m t1 k com2+=g[i][j]*f[j]+b[i][j]*e[j];' E; ^- H- \+ h1 Y2 L
}- a2 c3 Q, s* {, q( U
p[i]=e[i]*com1+f[i]*com2;8 X$ k( b9 r- d. I
q[i]=f[i]*com1-e[i]*com2;* ^6 `, Q3 x7 d1 R
5 ~8 Q( b8 x9 |2 N0 Q- F: | n /*求其他各节点P,Q*/
: b7 I) I$ Q7 S* F, C for(i=0;i<node;i++){
8 d- q7 W( q% w/ r) H. X" x8 [ if(i==balc) continue;: B$ R% i8 v. `- m
else2 T* |9 I# ~# C# T; J9 U
{, q- E J7 U/ W
com1=0.0, com2=0.0;$ P2 D7 w9 ] N* B1 J" z
for(j=0;j<node;j++)
9 D% O$ X* k+ | ~ r# S {- O/ y" P( c! X2 Q8 E8 G
com1+=g[i][j]*e[j]-b[i][j]*f[j];
+ W! _, G1 [' K4 f- Y8 I% i& A com2+=g[i][j]*f[j]+b[i][j]*e[j];
9 ?; y% b6 O: g3 \ } [! r7 Y4 ]0 w# J% \9 A
p[i]=e[i]*com1+f[i]*com2;1 G8 }( ?) m4 r' ?5 Q* J
q[i]=f[i]*com1-e[i]*com2;. `$ ]: I9 @, Q3 h3 T6 U/ X& I
}
- w( S, O0 u7 Q- V6 r }) v: {6 }% B+ W
) p5 i0 n# N( |$ r2 M, T// printf("最终结果为:\n");" [5 V* n$ e# [6 L" k
// printf("节点号 电压 相角 有功 无功 e f\n");; _9 a# I; G# T5 e% i6 Z7 O7 ~! i
for(i=0;i<node;i++)2 ~' V/ A$ }8 M6 S# f
{
) B1 o) w8 v) \7 |" |7 w; g v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);! i0 O3 w8 r1 B1 u1 Q- Y9 k
angle[i]=atan(f[i]/e[i])*180/PI;
4 U s5 Z$ v# _# m9 K7 W5 }. S+ S sump+=p[i];% J% \, Y; k% O
sumq+=q[i];
( W& h1 j( ^4 f: u- p) K8 P i// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);1 U1 N5 w6 N. f: C# U A* u
} |
|