|
|
软件程序
| 软件/程序名称: |
牛顿拉夫讯 |
| 软件/程序大小: |
1k |
| 软件/程序语言: |
简体中文 |
| 运行平台: |
Windows XP/2003/Vista |
| 功能简介: |
牛顿拉夫讯 |
| 授权方式: |
免费版 |
| 研究/处理: |
汉化 |
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?7 s% e7 D# R9 c1 v% `/ m7 ?, h+ ?( P
牛顿拉夫讯
$ E+ Q6 s/ y! E, B: ldouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)' y+ V$ o: t3 |9 d# q4 b
{3 o8 w) O% F w
int M=2*(iNode-1);
! v5 M- n |) I int flag1[N]; // PV节点标志1 M( U$ k" r* \9 B6 b6 G
/ L/ @, w$ ], G# u1 n+ S' ]
double g[N][N]; // 电导
1 G1 g/ s( z7 w" C8 D3 B double b[N][N]; // 电纳% K/ V9 C# {5 G$ ?$ r- e
double dvv[N]; // 电压微分* T! @% a& q: v+ _# h
double angle[N]; // 相角
! u: j! i3 t8 c double p[N],dp[N]; // 有功及其微分
# ~% \3 e& h; L8 t* f2 F double q[N],dq[N]; // 无功及其微分, A9 p8 g5 y M. }6 f
double e[N]; // 节点电压实部7 M+ K1 R# @$ y; ?9 N# m
double f[N]; // 节点电压虚部, \% k0 A% p' k5 g4 g( a
double *jcbb = new double[M];
# T, B" N$ \' i0 X L! Z double *jcb = new double [M][M];; O& E# q, R; b2 a
. ]. i5 P2 S' I& f+ @6 J
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;9 m% C2 g& z7 z5 }% i! ~
double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;! ]- f) y3 B4 ]( P6 d3 {: h
double lossp=0.0, lossq=0.0;* W& G4 [9 e W, m. y
node = iNode; // 节点数
3 n; }3 j8 D b9 J! [- Y9 [+ R balc = iBalc - 1; // 平衡节点: V6 y4 K0 {( g( T9 ?
for(i=0;i<node;i++){
" ?( O, w! e; x, F( `! i3 U flag1[i]=0;
9 l% h6 j6 o' @ dp[i]=0.0;
. P' j9 J: k6 q ^% f6 B dq[i]=0.0;$ d% l0 B2 j, M$ N4 C. b+ D5 @ L3 Y
dvv[i]=0.0;# P& p4 k" ~& M- N4 \' [9 Q2 T
}2 ]5 I2 q R) h+ H6 m- J/ Q
2 Y9 Y( h# G: f& e' o
for(i=0;i<node;i++) {
( J$ ]/ C1 k! e$ _7 } for(j=0;j<node;j++){
" V' s* ^) i& V! [& S% _, Y+ S, M g[i][j]=0.0;& R; g9 W/ t. B4 G
b[i][j]=0.0;
# t0 F' \& W+ M) F; E7 o( \ }% L/ R* J' q" T; J4 h1 Z
}+ o% r8 e) c8 I$ o
for(n = 0; n < node-1; n++){
4 o$ l% O- U7 d; T i = pRoad[n].head;
1 [) z. I! D$ N7 G j = pRoad[n].tail;
: c; ?( k; W- ^: y3 \- E! J: ~" J% [ rr = pRoad[n].r;
3 b3 _( k, X8 y! V* u xx = pRoad[n].x;% @, M6 u& C" }5 \2 |
// printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);8 b) s8 J* o k: z
bb = 0;% g5 P0 {" Z& v% {' X
k = 1;
$ |0 y: K1 T0 D" E9 q, l
0 W# a$ l, G6 ~ g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
+ F/ S' V8 ?* u1 D) f$ Z& T b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
- a+ e. b0 e) I g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
5 X8 J( n" }+ v% o b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);/ d w, X/ M! R8 t1 `
g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);
6 t, {2 w4 F9 L- e; T t/ | g[j-1][j-1]+=rr/(rr*rr+xx*xx);5 W6 @: @9 z+ T0 O0 q
b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));; V3 \, }) ?$ ^8 v1 o4 n
b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));
! V+ I! |3 {+ e2 U9 a9 Q1 t# } }9 [: ^7 }) z2 g! H# `; |. g
for(i=0;i<node;i++){; q! N" P4 R! {8 }0 v3 J
angle[i] = 0;
9 k. O! o6 T' n4 H! G$ S a v[i] = 1;7 F7 I7 j( e& w4 l
p[i] = pNodePQ[i].p;
1 v+ w7 a) D; t4 A6 n+ B q[i] = pNodePQ[i].q;$ J' d8 Z1 e! f' g) ] p4 K+ \4 [
// printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);
3 \, [% W2 o* u0 K1 X* A' G e[i]=v[i]*cos(angle[i]*PI/180);/ J8 w0 \% o) k/ f
f[i]=v[i]*sin(angle[i]*PI/180);
/ ~# u& h0 z/ q6 G0 M0 T2 M% J }
4 Q' V$ b9 T6 R// flag1[1]=1;- h0 X7 w4 L1 w# ~% i2 C- |
8 S- P! A. N# t# ]$ t m6 ^
// printf("共有n=%d条支路\n",n);9 M# A0 f7 t8 C- Z _9 F3 b
// printf("节点导纳矩阵如下:\n");
: z$ t9 ?9 @3 y9 A* K! Y( H
3 T3 R9 x; n& w! K// for(i=0;i<node;i++){! N6 J5 d4 }2 A8 E+ k0 H6 s# F0 G
// for(j=0;j<node;j++)0 G+ o% y9 a7 u& r3 P
// printf("%lf+j%lf ", g[i][j],b[i][j]);
/ i" |8 j' g8 M0 w6 q2 t// printf("\n\n");}* h0 l v; Y2 t. @
//- e2 h1 G/ Z* P
// printf("初始值如下:\n");
" V; a# ~1 p- `' ^+ ^( |// printf("节点号 电压 相角 有功 无功 e f\n");7 A4 r+ k5 {4 @: H, Z; z4 m% q9 U
// for(i=0;i<node;i++)1 i3 v: \% C" W4 O, y
// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
5 w, `* I2 U! Z7 u4 c 7 E" R8 \ e+ c) g) z
for(t=0;t<50;t++){; H. j5 h6 v% ?" _
// printf("\n第%d次迭代开始:\n", t);
4 V5 l% ?9 B, \: ?& y! E for(i=0;i<node;i++){) O: e8 u/ g# w% d3 _& E
if(i==balc) /*如果是平衡节点*/
9 [1 Z. i6 S) S x2 ^ continue;
: g% m m; l% T, n! R/ l9 s else{
1 C' M/ \1 b6 o: `$ G7 i: i* D com1=0.0, com2=0.0;
, ?0 p8 S% l3 y6 U2 K for(j=0;j<node;j++){3 |& u) y1 ?: A7 a, j0 B
com1+=g[i][j]*e[j]-b[i][j]*f[j];
* [! N$ \. I) v% d% ?' h7 n, \ com2+=g[i][j]*f[j]+b[i][j]*e[j];& U0 T/ ^8 x3 z, N/ u
}% c z9 d4 `3 {' d' r
if(flag1[i]!=1){ /*如果是PQ节点*/
$ _, e% J) P, R1 O, r dp[i]=p[i]-e[i]*com1-f[i]*com2;' D% A, @ y [/ U m; ^/ i$ i. A
dq[i]=q[i]-f[i]*com1+e[i]*com2;7 ~- n; ]' {& E# L" {% l- x
}
7 r" w8 ~7 D' R6 i9 b1 y else{
$ B- {4 P& Z2 B) r% Q dp[i]=p[i]-e[i]*com1-f[i]*com2;
1 n9 ^5 j$ ?+ C6 ~( a- O dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);! L* q# J1 }9 X- W( `0 E) r7 x
}( m1 u- e" M3 k. ~( k
}/ Y3 P* y. q- D: |' {5 w- D
}$ |! H5 m! o) z0 W7 _
# M3 Y. Y0 v. h* h' |( z6 R
for(i=0,j=0;i<node;i++){ - @( z* C" W, P# e- k
if(i==balc) continue;6 Z8 w0 f: z" r
else if(flag1[i]!=1){
! S4 ~% G" P& `1 ~3 l, s jcbb[j++]=dp[i];
7 w4 f0 e+ i) L" y; h& E jcbb[j++]=dq[i];4 Y- ?) ^* D: |% j0 v$ p( v
// printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);
% Y4 V' q# a. ~- Y }% V- f+ i# w0 E1 `( ], e
else{
# y6 Y3 V0 ~/ M- h jcbb[j++]=dp[i];
$ y2 Y3 \; r( Q' r5 s+ P jcbb[j++]=dvv[i];
. ^5 B/ P3 z& e' W, {( Q% Q// printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
% d5 I1 N3 M+ j }
, G% ~) A; H* q3 o; c1 P2 {8 V }
/ ^1 Z# r& Q1 \( M// printf("\n");
0 p: L+ C+ Q3 a, }: O( F
, u! k2 p# ^' t for(i=0;i<node;i++) {0 v; R* i$ M4 ~
if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)
% B# b# }- R8 \/ t; x break;7 P8 G* H- H' d8 H
}& R9 ^; e6 z9 K: W: Z0 ^5 X
if(i>=node)
0 R- p& D+ a! b% j break;
7 K6 g0 Y- Z+ w( ?5 Y* R
. a2 L/ J3 B6 ?/ J , C1 M9 S- p9 l; E) N
for(i=0,i1=0;i<node;i++){% O1 ~4 P' @: ^7 W$ Q8 I$ w p
if(i==balc)* I( c3 \4 r7 T6 u% h
continue;6 L% m' J/ x/ W8 W
i1++;% c/ V0 i7 }9 H& M6 w+ M7 E( W
n=2*i1;
6 | x" N. H" d$ G# W- g for(j=0,j1=0;j<node;j++){2 {0 l1 Q8 a8 }& V: Y, d
if(j==balc) continue;
) t7 E4 P( L4 u1 R0 Y j1++;
8 K/ n& \ G+ N/ f7 o2 w) F m=j1*2;- u) S ^7 }1 y7 ?3 ]3 c6 I
if(i!=j){ . q f0 i! j9 t' w: s/ Z; f
jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);
; N/ t1 j& O+ N jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
9 i0 N) l" P$ x4 W7 t) R8 H% p. t if(flag1[i]!=1)7 A: G: i) ^9 d/ x
{' W. j- z/ A: R
jcb[n-1][m-2]=jcb[n-2][m-1];
) b J6 }8 @. H' l* ?- [ jcb[n-1][m-1]=-jcb[n-2][m-2];! Y! [0 ^1 r1 n4 R
}/ G; h+ s* `% ?
else# b6 r% I& e' C5 O3 z. @+ q: j- p
jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
1 s. X: F% P4 Q; Q/ x# R }
. v3 E ~0 P4 f" h3 Y2 l* L+ w! F else{
5 v4 }; g i* O/ ?: p, I com1=0.0, com2=0.0;
7 G) W4 i6 _) F g8 \ for(k1=0;k1<node;k1++)
+ Q, c4 M2 G" T5 Y* M9 F {
) v5 t2 M3 @$ f2 R2 a com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];7 n% a7 {. b8 W5 g5 i/ ]6 q1 z+ U
com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
5 `* i* F [2 h2 |1 R$ K) Y } f) g) E' F8 ]! ~& ~5 p
jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];- C# m2 Q0 ~0 |4 z
jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];
( M8 l0 ` \& Q* j if(flag1[i]!=1)
- b* U% k+ v! m' r/ V5 e {" i9 _2 D" E2 e' Q$ g
jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
: x8 i7 a9 O' Z; ^( v/ B- k( s* y jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
3 H, U. g0 M" A+ s }
: N) y8 [8 w% G9 k* \+ r& y( C! b else
/ ~* z o7 `$ z& h' J& t {
7 b9 g) z) @5 g6 g; q- I" v jcb[n-1][m-2]=-2*e[i];4 ]$ p9 `! h3 x3 V6 P+ m
jcb[n-1][m-1]=-2*f[i];
& F( e1 x9 l7 @( ]; M5 A }
+ f/ L4 Y( e. ], [8 Y( \ R }! x& p8 a4 t3 Y& K3 c: M+ J( n
}
' M$ U: o1 K/ o5 {6 U) O+ b }
$ r2 m+ ^. x% w
$ Q2 g; X+ d4 g3 {; n/ M. H// printf("\n第%d次输出-J矩阵如下:\n", t);- ~1 C: ^) P0 Q2 v( ^" \0 r, q
for(i=0;i<2*(node-1);i++){5 ], R/ T; q/ {1 ^" b3 k
for(j=0;j<2*(node-1);j++){5 C9 e; s9 e# t/ [& u# d( U" g) F* T/ j2 q
jcb[i][j]*=-1.0;
; q& s g+ O' f* q9 W) Z& z// printf("%lf ", jcb[i*M+j]);
2 ]- H/ J. S) W }
7 F2 ]! J* C3 @5 q% V) b. d// printf("\n\n");1 v- m! P6 J0 W6 z3 y3 a
}
$ {: e8 x+ r5 L& e) M( z( w7 ]( u) ~: Z
; J1 a1 r, |7 G /*算线形方程组*/! E" O. V- `" N8 x: c1 q5 p+ V
if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {0 y, D2 O% n# g8 |3 I$ i
for (i=0,j=0;i<2*(node-1);i++) {; b+ C: q- J7 X0 ] A8 g! x' }
if(j==balc)
+ ~+ v( f) k8 C/ d7 n) [ j++;' H% n# Z/ K. ~: ?3 d
H8 m: _$ U- V% Y: _: A
if(i%2==0){
! |$ j! `1 N5 C7 |, {9 @# `8 F e[j]+=jcbb[i];1 h/ v/ B; ~, Q: ]1 {
// printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);
. G6 G5 t C; h4 P7 r% |' Q }( }+ R6 l6 p6 P6 J& h1 H1 G/ \- Y
else{
; a/ m( g8 T, ~" \8 p* M' v; Q& Z f[j]+=jcbb[i];( E5 L* t/ m0 ^1 B# m: v) t9 L3 w
// printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
4 D% c. ^( |0 h9 o j++;, r3 k8 S# x' W( V4 M6 N1 M
}
5 F2 k% c8 G: E8 g9 ~! w8 h }
' }5 Q' t6 ~1 K- {1 r6 R% R }
4 e) O4 h3 x$ S0 j }
# }) l' N" W. v0 O& o3 A. }
! p& ~6 Q) n& y; F+ Y1 E// printf("共经过了%d次迭代\n", t);
% @- y" b" F* i) j- k+ x6 J
8 x6 H( ^& r3 N, i /*求平衡节点P,Q*/
7 i9 t/ P+ g$ r i=balc;& v: C( X4 k- w2 r& A6 Q
com1=0.0, com2=0.0; i- a# B2 F( E+ o8 B6 F6 [# b; J/ x
for(j=0;j<node;j++){0 l+ t3 r8 Q( Y8 J, M/ N# B- t
com1+=g[i][j]*e[j]-b[i][j]*f[j];
/ G5 w e7 H \" U5 i( ` com2+=g[i][j]*f[j]+b[i][j]*e[j];% n# L! v% W* v7 t
}& [. X; W3 n3 L
p[i]=e[i]*com1+f[i]*com2;
/ P v2 Y y$ L+ V$ n q[i]=f[i]*com1-e[i]*com2;
* f1 b' I4 \2 g
4 r0 k5 _4 o3 {4 X /*求其他各节点P,Q*/$ C! s! z7 P4 Z( ~6 ~7 k. |5 D
for(i=0;i<node;i++){+ s3 f. m9 U, c6 S" X7 G. G" m
if(i==balc) continue;
& F9 @2 W* j1 o' P. c else2 W, m+ Z% B. p- z7 l U
{
' v2 v. @3 }1 Q* j com1=0.0, com2=0.0;
$ I' j* V, E: C9 S5 C* s, \ for(j=0;j<node;j++)
- m6 }+ G' v% }) u' z: L4 n {5 e3 D8 F3 m3 j8 V2 N
com1+=g[i][j]*e[j]-b[i][j]*f[j];4 R; B) }+ f: X' i5 o
com2+=g[i][j]*f[j]+b[i][j]*e[j];7 D$ k: t1 C, K% b1 Q: d
}6 a( }; [' A( k
p[i]=e[i]*com1+f[i]*com2;
+ R0 w2 A9 R# A# H, ] q[i]=f[i]*com1-e[i]*com2;6 ?" K8 l$ F+ m0 k3 W$ S
}. J, ~2 o# m2 v3 J% J" w3 S
}# K# J/ C7 V7 H7 i
7 Q. D" a! O; Y( O( \5 `2 i// printf("最终结果为:\n");$ ]# ]- I4 z) q4 N
// printf("节点号 电压 相角 有功 无功 e f\n");
6 g9 y# M4 ^5 E. E5 y1 Q for(i=0;i<node;i++) z# E& a% l- e( \: C- B) L- S- n
{6 \3 A9 n: U7 M4 S; H7 D# k# t* S; c
v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
- p+ t4 r5 n3 C# u2 @ angle[i]=atan(f[i]/e[i])*180/PI;3 w8 A$ K1 b: g O9 M
sump+=p[i];& H5 O3 r% I1 R4 K) F. R& I, s) R
sumq+=q[i];5 {+ v/ Q) D( r. R, k2 q
// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
+ M F! N( }! R; `, ^+ N( l& p0 B } |
|