|
软件程序
软件/程序名称: |
牛顿拉夫讯 |
软件/程序大小: |
1k |
软件/程序语言: |
简体中文 |
运行平台: |
Windows XP/2003/Vista |
功能简介: |
牛顿拉夫讯 |
授权方式: |
免费版 |
研究/处理: |
汉化 |
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?3 t1 U+ J/ B k
牛顿拉夫讯
) ^2 b% U a$ C* q/ Ddouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)- b+ e5 p2 [ ]( h
{
! W# [/ j7 [2 e& S/ ?# a int M=2*(iNode-1);
8 Q/ [( V- _% y$ e2 n# d0 P0 i5 g6 K6 X int flag1[N]; // PV节点标志9 H4 J) T8 T2 P {/ H
5 L! }! I- k) L4 p- I. E
double g[N][N]; // 电导
" Y5 h* |2 f/ S" a double b[N][N]; // 电纳8 n" l; j( ^1 ?7 g: D3 j
double dvv[N]; // 电压微分
; _3 D- W9 ?8 q& p G$ a, Y2 I double angle[N]; // 相角
/ i& |; T, I& Y4 [6 c5 q4 { double p[N],dp[N]; // 有功及其微分! q' b' {, w) f( ~5 G( m; D
double q[N],dq[N]; // 无功及其微分
$ Z) I; p0 ^1 b. \ }# h a6 F0 O double e[N]; // 节点电压实部
. [; F- ?" ~0 P- X+ O double f[N]; // 节点电压虚部- n; l2 f) X) e9 g9 q
double *jcbb = new double[M];
( N; g; U& t6 [3 Q double *jcb = new double [M][M];5 _4 W6 M1 S, F1 z2 t" t) }. X( B
/ J, B+ m( R$ D/ w- u int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;
x/ T- r; v' z* _ double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;
0 ~+ j; D8 H5 F$ O$ R double lossp=0.0, lossq=0.0; R( ?9 Y6 _6 ^9 e* T
node = iNode; // 节点数
- Z' i2 q' F/ V; t: F- E* n, y* @ balc = iBalc - 1; // 平衡节点& P9 j [! J" ~: q" `% w
for(i=0;i<node;i++){
z1 j& w3 D& n8 B% ^5 ~0 o' W* h$ z flag1[i]=0;
+ E) o+ m/ p. b( { dp[i]=0.0;1 l3 Y( G% ^6 z- u5 D& l
dq[i]=0.0;8 U8 p! H1 J3 |: z! R7 L
dvv[i]=0.0;
- V! H6 [$ K3 H }
7 G2 n( Z% o1 F1 P; Q . J3 Q& q% Q9 v
for(i=0;i<node;i++) {. U, Y8 k/ e6 g s
for(j=0;j<node;j++){% B3 d" |* J0 f7 u5 B0 L" P
g[i][j]=0.0;, L8 O3 J/ x/ q5 O
b[i][j]=0.0; 0 m& v* E' \0 u- Y. S2 ?
}
8 |: A+ w2 X1 Y. X9 s }
( Q8 o) j. ?- B6 ` for(n = 0; n < node-1; n++){ ' y1 @- v4 s- q
i = pRoad[n].head;
* A! Q" m3 U) T2 o5 g! N) U5 ` j = pRoad[n].tail;' x' b, t* W+ P
rr = pRoad[n].r;
& @ |% ^' }) S L" [$ q" E xx = pRoad[n].x;6 n8 p1 g3 g& q, z
// printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);" `) g5 P4 T! f' `6 ?$ e, f
bb = 0;: ?) p$ u1 a4 G6 l1 m' a! z
k = 1;6 }1 y; U2 A' h
% y; f7 J% X9 y4 H( h8 l
g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
; e; d9 b% D* [! K b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);: p. F' s/ I5 i/ T1 [7 n* q
g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k); y, _6 K4 E9 }/ ?: Q3 I- y; a: H8 w
b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
) V1 P+ W; o" t2 t3 z g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);
$ H9 B# A8 V( S3 Q- l g[j-1][j-1]+=rr/(rr*rr+xx*xx);0 t+ X) A7 u7 j. s% M
b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
8 }( ]4 n v& g* E b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));: [& ^5 @) V9 r- [. C) c
}7 i5 p3 E, N8 o W! Q% M. Z9 U8 R& S
for(i=0;i<node;i++){/ u; }8 A$ u8 J! |2 r7 l- Y( a+ j
angle[i] = 0;
$ O( |. \# C. f$ y v[i] = 1;
1 Q7 L& Z( r6 I2 T5 U; h$ f p[i] = pNodePQ[i].p;$ C+ J" K9 ^3 }% I# P# J) f7 Q+ ?
q[i] = pNodePQ[i].q;
- Z0 P7 [& U- O* I% M1 B// printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);, Z9 B( V2 r1 Y% x/ m; z! u
e[i]=v[i]*cos(angle[i]*PI/180);
6 J7 g; P9 ^' ^; u9 q/ x f[i]=v[i]*sin(angle[i]*PI/180);: Y {6 D' C8 N8 l. X5 O( y
}
- N7 @# t9 C$ z- t" |- N+ U& j// flag1[1]=1;
- M) ?7 t0 f+ K; ~6 D+ A1 ]# g2 G
// printf("共有n=%d条支路\n",n);$ z# @) J; h, j6 ?6 @/ P
// printf("节点导纳矩阵如下:\n");
' F' X& s2 k- ~# ^
1 H8 r7 q0 b) O, p- o+ X5 {0 R; A1 H// for(i=0;i<node;i++){
* u% u! B! p. R" S// for(j=0;j<node;j++)6 O+ R3 B$ p- w* |. |
// printf("%lf+j%lf ", g[i][j],b[i][j]);
. o" g- h% Q) V$ @( ]// printf("\n\n");}
% M, d1 ?; H) i" l# v i//, Z$ F. o2 E! ~& H0 g" D
// printf("初始值如下:\n");
+ J. m! C7 M! K s4 V! r// printf("节点号 电压 相角 有功 无功 e f\n");
$ u g+ P4 x% i9 z% I5 n// for(i=0;i<node;i++)
- F& W: y; U) N# ]* @8 ?// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
* O }: i2 j' a* z9 _( y( W; m/ f
8 a7 E- Z; r8 J! n) }/ J1 a for(t=0;t<50;t++){# W+ W5 M& M6 k0 i
// printf("\n第%d次迭代开始:\n", t);
% ?7 q& Q$ H9 `/ h* R W" I Y for(i=0;i<node;i++){' o/ f/ D6 y# l* b
if(i==balc) /*如果是平衡节点*/
' ^7 S4 h$ E# f# S continue;( ~9 \; J+ T @! v
else{ % ?: U- I" j" E
com1=0.0, com2=0.0;
( v8 l( j: N C for(j=0;j<node;j++){/ Z9 m3 y" Q; p5 ]; O( t
com1+=g[i][j]*e[j]-b[i][j]*f[j];
7 \( ]$ D9 m9 t8 [9 E com2+=g[i][j]*f[j]+b[i][j]*e[j];! q. n- L2 X/ u# ]% H0 A: e7 o
}) N3 H7 L; h" s3 {# G" b* z0 o
if(flag1[i]!=1){ /*如果是PQ节点*/9 `& h; f* ^+ b' d+ y
dp[i]=p[i]-e[i]*com1-f[i]*com2;0 @" i$ H0 A% X6 O, \
dq[i]=q[i]-f[i]*com1+e[i]*com2;
/ a% u- I0 J m }
" H; y; Z& y% S( B& ]" q; F% Q else{
1 p2 w- u5 A5 l* d' R2 H+ v3 ?% A dp[i]=p[i]-e[i]*com1-f[i]*com2;6 Z5 G6 Z: a- _* p
dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
% w# ]5 R! b- L$ ]) B; D }
' J% I0 c0 Y. r) a4 P }
) l$ f6 ^0 H# b* l& y }( L! [9 [0 m; Q: `. O, f( ]* h4 B6 V
4 }( e% h. d" z# C for(i=0,j=0;i<node;i++){
0 E' ^4 P+ l9 j/ a3 v, n% { if(i==balc) continue;* {( d, r# T2 ^8 x; o
else if(flag1[i]!=1){
% @! ?* Y) P2 W jcbb[j++]=dp[i];
$ m/ {4 v( F. c5 E. C jcbb[j++]=dq[i];' c8 n, n( } s2 X& R3 r
// printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);1 |) P$ @/ ~) N4 B# o
}: K+ [/ X) N! Q6 \
else{
) w8 |! r3 z7 l+ D4 I jcbb[j++]=dp[i];0 e) Z/ g5 G% a; W
jcbb[j++]=dvv[i];) i3 @7 x8 p8 l. |
// printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
2 u( j5 v9 H: G' v2 W {$ k }
5 c i- r- H& J' N# W3 } }: `+ J( W) a' K9 C, ]+ J5 }" j5 p
// printf("\n");
# C. h8 ?, \2 z# i' b' ?+ G
& x/ d: }4 `* a% {! t+ Z% k for(i=0;i<node;i++) {
! k. C* ?; e; [- d: M$ }) x if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)4 y0 c' V- M) t% s* x
break;8 F7 ^. c4 P% A, q. l
}6 c' M5 _2 b2 x$ f) f/ Z
if(i>=node)
- M ~6 M$ h, `9 d1 M* f. Z2 O break; & B0 o3 t! }1 B8 `
' J7 ^% ^2 O; D$ @% X5 b
0 C- i2 i, `; |5 J- R+ ` for(i=0,i1=0;i<node;i++){
; B- o' ]! ?5 |2 [ if(i==balc)6 V9 N5 _; I f2 L
continue;, S# V$ b" T' R/ k4 K
i1++;% _5 o% |+ A: ~; r" Z8 Z9 A$ K
n=2*i1;7 y: ]6 ^0 g' G) Q$ b
for(j=0,j1=0;j<node;j++){
# L& q4 n( \8 G; [& Q1 B3 X) X if(j==balc) continue;: C/ y r8 h2 b; \( M
j1++;6 b6 x5 \/ P# `8 S6 [, c. f* {
m=j1*2;
( i4 ?# g) [- v! j4 z" E5 s+ { if(i!=j){ 3 l, S- H9 R/ m! L! j0 `$ I
jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);; M3 a0 [5 W& o& P& O$ \8 t1 }
jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
' d e6 C& j: M1 b' m if(flag1[i]!=1)
; I: i3 \4 c5 j& ^& V! ^ {
: T) ~7 ~8 w" W; j* G jcb[n-1][m-2]=jcb[n-2][m-1];
. M: ?% N1 _0 ]- D' t jcb[n-1][m-1]=-jcb[n-2][m-2];
( E# I/ A. D6 m }, u9 ~8 R5 @- h/ U. [" S
else; s% T9 z& j6 Y6 a' O) Z+ m9 p
jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;3 P! X" {3 {) J& Y7 s7 n( y
}
3 U& P# g6 k3 d# f j/ o5 K( b else{
_& _ Z8 y# i2 ~( c5 r% w8 k com1=0.0, com2=0.0;$ B; L3 |' X8 k9 i
for(k1=0;k1<node;k1++) D3 L' |# T( M4 y5 K) U
{( U0 u( y! U5 ^1 S6 l# m
com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];5 W* h# u. J1 b8 u1 O
com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
/ x5 ^& \/ v. Y }
7 ]& h6 `6 e6 Q2 d jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];+ d6 k1 w% z( T5 p" {, d2 z
jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];4 J2 ?- E# p" }6 ^0 V; @ Q+ T: G ~ U
if(flag1[i]!=1): o* s/ S. i, v/ n4 \
{& {/ w& T. G5 ~+ h
jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
' r) [8 f. b1 ]& d8 ]7 T jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];" l' u/ z: ~. \; q7 U
}3 I [' k) V# o9 a+ B; q* I
else
, ]; }. K# M: k `2 w9 h% h' ^ {; J% P% V0 a5 J4 \9 q
jcb[n-1][m-2]=-2*e[i];
2 t& A/ k ^+ M& g jcb[n-1][m-1]=-2*f[i];2 ?* V3 j0 g1 i
}7 g+ C8 l4 B) r3 f: ?) ^$ t
}
* }+ ~3 H* n m4 h R. s }; G0 l* J2 }6 D6 l( D" h6 @
}& u% A: D) e! C: |
7 l0 f; z8 x& K. h. e) n// printf("\n第%d次输出-J矩阵如下:\n", t);
/ f+ ]; x& L y' C- N, \: u3 ~) E for(i=0;i<2*(node-1);i++){5 l) Q3 `" o" A3 n. n8 a& ^! N
for(j=0;j<2*(node-1);j++){
- `; Q( \+ l# w6 J; Y- A jcb[i][j]*=-1.0;
7 J. f7 D( i3 N4 C/ E- q// printf("%lf ", jcb[i*M+j]);
3 x4 J6 a: H/ G3 j6 _) S }
5 e# A1 Q# | F8 E7 ?' l// printf("\n\n");
0 w: @: d- i+ ~3 i a4 Z } Q! k* W: k$ n
8 R7 V# q/ M8 P% {6 h /*算线形方程组*/
" `. R7 q- b& p6 v: r if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {
% ` _5 j; x/ \5 n" O$ E for (i=0,j=0;i<2*(node-1);i++) { C+ X; [& B% f9 C8 x
if(j==balc) . I* c2 T8 [$ t2 h% c: c+ B9 A; f( I
j++;
0 h7 H- L" B0 }. w8 _+ u 7 S7 [. Q/ D/ Y
if(i%2==0){
, V, q3 S2 g) W e[j]+=jcbb[i];& F/ j' u$ ?) U. C- d2 l
// printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);& Q$ n. P5 f3 O5 G8 b
}: G' K1 Z6 B% r( m& ?
else{" D A3 A* O$ j! A1 b
f[j]+=jcbb[i];. a8 n: b% |" W9 i( I
// printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);2 z& ^2 A8 q+ P5 D' e) u" R, c
j++;
( u- a% P5 w7 c }
2 U4 m; @5 l* c+ y; M4 g+ D, u4 P }
+ m( ^8 K/ B& q$ F5 D }
4 N- n) o3 e9 Q. { }
& ~6 a9 O0 C& W* E0 `0 B" r9 J( Y4 W 5 J& `! z% B3 e& t$ F0 y9 `) N! _
// printf("共经过了%d次迭代\n", t);
' o) d$ z0 ~* J2 B. T ~. ?6 Q( I( [4 R3 a
/*求平衡节点P,Q*/
: |" {' \4 @7 v/ `! y i=balc;1 J; S% p; ]# `) l
com1=0.0, com2=0.0;
: k* C- I$ d& ^( M+ X ~! K for(j=0;j<node;j++){$ i# H& \. y3 u6 D) J) l
com1+=g[i][j]*e[j]-b[i][j]*f[j];% o: `: u6 s! z4 S: S% }
com2+=g[i][j]*f[j]+b[i][j]*e[j];0 ?# u; R2 I( J% j8 j1 R
}
4 S1 D9 s8 W" h' `2 k) @7 j; C9 ^- i p[i]=e[i]*com1+f[i]*com2;
5 z/ S: j$ t; o9 u6 S' t7 s& o! R q[i]=f[i]*com1-e[i]*com2;8 u( s: [7 a* w8 G+ N4 x" F; O0 X
t' m6 ~6 y5 J* x$ @2 T /*求其他各节点P,Q*/
, ]8 J! [) ^- f- p for(i=0;i<node;i++){4 f# V, O- A) ?4 ?0 w
if(i==balc) continue;
2 Y: G$ @9 G: w6 R' Q; P else, ~# U/ `( ^+ Q# f1 c, t' p G
{
$ q1 }$ V- c( W. s6 c/ F5 X6 c com1=0.0, com2=0.0;
. O3 A" |: q" X: d3 F. B, g% x$ I. x& E for(j=0;j<node;j++)
7 d) Z9 V8 n9 P9 O9 H9 _. z% j; Z {
3 f# \! e1 |7 d* M/ V. F com1+=g[i][j]*e[j]-b[i][j]*f[j];! U$ d8 G0 K& ?. Z* J" k" i
com2+=g[i][j]*f[j]+b[i][j]*e[j];
+ d7 L4 I, W; i: B/ M5 m$ `, \( s }5 U+ H9 H, f9 V0 d5 z+ c' ]
p[i]=e[i]*com1+f[i]*com2;
* W! X% H1 U. e c, _' h1 r0 c q[i]=f[i]*com1-e[i]*com2;! E9 O) W. G7 Q) e8 i) U0 y
} d/ c4 ~3 F0 a6 ^) `, T, T
}
8 u9 |7 R0 Q; P1 I
6 n+ t W8 X2 x* T// printf("最终结果为:\n");+ i& {! e% V" G( q c! G& Y
// printf("节点号 电压 相角 有功 无功 e f\n");
* Q8 y1 y* i8 J for(i=0;i<node;i++)# T1 C$ m7 \4 r; c4 B! o( G2 ^* o$ L
{/ u6 T3 c4 [4 i
v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);* C8 J2 }( \. x4 K
angle[i]=atan(f[i]/e[i])*180/PI;
% k: D' n' p7 D! b' v/ Q7 B) X sump+=p[i];8 }( ^& b& u. k8 C# [ x' P
sumq+=q[i];
/ ~& u2 T5 M( }7 X6 B// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
$ o3 H5 U4 g3 X2 S } |
|