|
|
软件程序
| 软件/程序名称: |
牛顿拉夫讯 |
| 软件/程序大小: |
1k |
| 软件/程序语言: |
简体中文 |
| 运行平台: |
Windows XP/2003/Vista |
| 功能简介: |
牛顿拉夫讯 |
| 授权方式: |
免费版 |
| 研究/处理: |
汉化 |
|
马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!
您需要 登录 才可以下载或查看,没有账号?立即加入
×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?; W% ]8 ?, ~% Q t* \- T
牛顿拉夫讯
6 C- T. K/ K4 D3 P9 edouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)) ^3 C0 }9 p P) D$ H* M
{
/ I( R. \7 c# |9 l0 m int M=2*(iNode-1);
$ w2 a# v5 x/ \6 x$ c3 y int flag1[N]; // PV节点标志
1 ^( w% V# s% S3 P& u8 x! g# o ' b3 p* r6 S. m* s- J1 E% x
double g[N][N]; // 电导9 s0 N$ K7 y& R. d$ `! V$ i/ U
double b[N][N]; // 电纳
: @: a4 `' P, {: h9 f. W double dvv[N]; // 电压微分
$ ?: k0 f8 L+ x# Y, X/ _% Z9 K( } double angle[N]; // 相角
# `8 u0 V% a' G" E n7 `- p( x double p[N],dp[N]; // 有功及其微分+ c8 t1 c. @+ t9 V$ V" X( N
double q[N],dq[N]; // 无功及其微分% q( q, n( T0 I$ `: e3 _
double e[N]; // 节点电压实部" C' r+ F! T+ f# @1 B
double f[N]; // 节点电压虚部
# z, g0 v1 N% d% ]5 ] double *jcbb = new double[M];
2 V8 K; V6 t! @ y" m( E# u! a0 b double *jcb = new double [M][M];
' p% n0 }- p/ m2 F& U8 X: r; x* E3 x7 k; K* ^
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;
: H9 ~1 Q/ E& |3 c+ N e5 o6 b double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;, a7 N" h, m1 H- c! Q0 y
double lossp=0.0, lossq=0.0;
5 r; C4 X. `/ G% S I# ]! y: Q- r node = iNode; // 节点数2 a- f/ A' g/ L$ W
balc = iBalc - 1; // 平衡节点
! B5 H" M/ X& v: f, T7 W- z, A for(i=0;i<node;i++){; n+ s7 E. h# S; t
flag1[i]=0;/ r8 O* o8 t6 L( m2 \% ]
dp[i]=0.0;
1 q7 y8 {% v) O& w4 R/ J7 l9 T( t dq[i]=0.0;% A! n1 g8 c! D5 g$ k
dvv[i]=0.0;4 J8 K Q5 _) e; e% u3 @% |
}
; W3 ?: o/ i% V9 U9 k3 ]( b7 g3 K
5 x( E7 H3 K7 X0 z$ D A# c! j for(i=0;i<node;i++) {
1 X2 |6 Q) V: L% q- |( b( ~- R2 S for(j=0;j<node;j++){7 s: e. ?+ a& p
g[i][j]=0.0;) g& U$ k* v: `, g2 S6 z" P3 i
b[i][j]=0.0;
$ ^# a6 D# t! o" X' x; ^/ Y }. Z; I' }1 N* j7 q$ J1 j( G4 @
}
# U: ?" O8 z/ k- L( \) q0 o for(n = 0; n < node-1; n++){
0 j. |; X# r3 B$ x. |' ? i = pRoad[n].head;8 h* s# @+ @: Z Y6 i% G9 N
j = pRoad[n].tail;( o' d' ?: v4 E7 [/ b8 i
rr = pRoad[n].r;
; x. o `& x& _6 X h xx = pRoad[n].x;/ X) R3 }( M7 {7 E A* N
// printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);5 s2 x" g4 X. }6 M+ q
bb = 0;. E) z, v0 n$ j E' [, c9 g1 F% W
k = 1;
+ t3 w* f: J- K: i- H
5 W, G. P$ m: l. @7 R g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);& Y3 w/ J! n# t' h) @! e
b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
/ [0 {& g7 ~# i5 X7 [: _( B/ Q g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
% Z# H% L: E9 K# o! Z' ^ b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
# y! Z) [8 k- e2 Q+ ? g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);! e$ Y( Z3 O: u0 V; ^9 e
g[j-1][j-1]+=rr/(rr*rr+xx*xx);! I1 |6 l" b3 o/ r6 B
b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
- A1 t# x1 e! J+ z b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));
9 L/ v6 j/ Z7 c$ R } }$ O* Z& G5 t* w3 _% V2 F' y
for(i=0;i<node;i++){
/ x; H" d9 O, B1 V8 p0 W' U U angle[i] = 0;
6 V- Q y6 c% V x v[i] = 1;
* B. R- k$ @- ~# g4 n7 _8 O3 ~4 h/ A+ B p[i] = pNodePQ[i].p;
& ^# g& F& z. ` q[i] = pNodePQ[i].q;
( q8 Z& V/ `2 s// printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);
! c' z' d0 Y0 ]+ ?! F6 Z. n e[i]=v[i]*cos(angle[i]*PI/180);
, r8 [' E9 W* z1 F f[i]=v[i]*sin(angle[i]*PI/180);
2 G4 a. g1 ]- }' ?1 t! O, f8 [ }- ^7 ]# v1 P0 |1 S3 b9 `
// flag1[1]=1;
* y u, w7 y' u% y- Z; r9 Y0 m
3 s3 ^/ v- |: Z' S/ \" D// printf("共有n=%d条支路\n",n);
4 G- D- M8 E0 s, z// printf("节点导纳矩阵如下:\n");
7 h/ V1 k( j5 X: U+ D2 T
: T3 i' p9 k" Y' A7 o7 f// for(i=0;i<node;i++){& l+ @7 Y' Z/ g( S/ b+ B D6 J2 {# U
// for(j=0;j<node;j++)
! U: n# G3 ?* @4 ?- W* Z$ m// printf("%lf+j%lf ", g[i][j],b[i][j]);- _9 X9 s' k9 Y
// printf("\n\n");}9 O+ t, f% Z7 v* f
//
( L3 u) ^7 I% p6 n6 W, a/ w// printf("初始值如下:\n");
9 Y; [1 n, G" R$ P a) m" a// printf("节点号 电压 相角 有功 无功 e f\n");
9 x- O0 A+ @! F" S% t// for(i=0;i<node;i++)7 o$ D- g9 o3 l5 ~$ `% x6 Q. B
// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
& N; z: K4 |: C4 }* B# r0 X/ `+ S
/ E% |0 Z& e4 k. Z, s for(t=0;t<50;t++){6 b# @7 W( `# P& ^5 E* G
// printf("\n第%d次迭代开始:\n", t);* D: U" @2 q' x( Y/ h7 r* c! q$ S
for(i=0;i<node;i++){
. s: d1 _7 a2 c! L: }' A0 X4 S if(i==balc) /*如果是平衡节点*/
, S. {3 i/ {7 U continue;* v E# l1 }, S( W* e
else{ 2 A; ^7 T* H, F- @
com1=0.0, com2=0.0;
! N* Z5 Z) t. n% ?/ h) a4 \ for(j=0;j<node;j++){+ s6 o* z4 a" g* @
com1+=g[i][j]*e[j]-b[i][j]*f[j];3 z/ p3 }8 L' t# Z& ~# f) w8 K
com2+=g[i][j]*f[j]+b[i][j]*e[j];6 J4 S4 C5 h, F) g0 ~
}
" \5 T2 \" c: U v" V, i# n) e if(flag1[i]!=1){ /*如果是PQ节点*/
' L6 m* E8 K s9 y9 k6 n/ s dp[i]=p[i]-e[i]*com1-f[i]*com2;
@' v7 M4 U* c0 o/ ? dq[i]=q[i]-f[i]*com1+e[i]*com2;2 K( K; Q$ O' Q5 Z
}
+ {+ ]- i& J I else{: ]1 _4 `2 _: L6 T- j! K% f7 f
dp[i]=p[i]-e[i]*com1-f[i]*com2;
. ?& o- _ H, Z dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
, ] |0 E8 f9 k$ U) l }9 l7 @; D/ D5 x$ S+ G
}
9 Q9 C2 x" K& Z' \& l2 } }: n" E! I! o- _# a
8 T; U" `" i' f' X
for(i=0,j=0;i<node;i++){
7 ~) h% h. k$ x% A3 Y4 p, o( g if(i==balc) continue;
& G4 g: t- t" ~6 |9 g, ^& F else if(flag1[i]!=1){
) k4 O! m: E# i: v Z jcbb[j++]=dp[i];$ O/ ? x% c0 B
jcbb[j++]=dq[i];
% S/ [1 J4 h2 z/ l# q+ \0 _4 G2 ~// printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);# t, R5 d! T) y
}5 s( w( ?, x" ~2 F) w5 G& R( T* i
else{
4 ^3 Z0 X& `7 _& s5 V- N) H( k jcbb[j++]=dp[i];8 Y, r& D/ b2 Z: C# Y& Z
jcbb[j++]=dvv[i];
' |8 E6 b' c* w+ H4 d7 U& U8 w// printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
0 r3 {+ D! h7 a2 f9 X }
( q+ T, c$ }9 X" l4 b }# D3 g. e, X" a9 k) g& \2 A% e
// printf("\n");( I( ^2 @! I# G7 K @) C( V
5 @$ A2 ^' a9 q for(i=0;i<node;i++) {
8 x; g! W) j ]4 K5 X; B# |: J8 z if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)5 ^2 C! q r' }) W
break;; ^6 Z- e0 Y7 [# l, A2 g+ Y
}5 e7 \3 P9 T7 n9 I8 N8 @
if(i>=node)
" |8 H* Y" @# C3 Z& C- \9 K break;
) F a9 r' f; R6 E( v: k) a
" K" q' H7 M, Z
! x0 _, c" G* D4 u U$ | for(i=0,i1=0;i<node;i++){0 t8 M* w# ~0 l5 j. `# m: B
if(i==balc)" B4 W, O& w M' f( N
continue;9 }% r! R3 S& F& m" W, a
i1++;
0 D! u' S5 W' P& a M& E n=2*i1;
" B- R9 |5 i1 W# Q- ` for(j=0,j1=0;j<node;j++){
' X( F# {* g0 [ if(j==balc) continue;
* u) O6 n* T7 x) {: y- T7 B j1++;
& V! q0 ^% _& U/ Z; s. y/ s m=j1*2;4 l5 i- g2 B) O0 ]
if(i!=j){ / A& r+ \) G" M; d8 |) ^. A
jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);
; u3 Z7 O5 N, [8 Z* S jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
8 M1 d7 `( G3 F; R if(flag1[i]!=1)
7 y6 l) T" U, g y& ~ {( X5 U( w2 T! u2 N, \
jcb[n-1][m-2]=jcb[n-2][m-1];
" q, M1 G; e" t# O% v jcb[n-1][m-1]=-jcb[n-2][m-2];
3 V+ H: {9 d5 u }3 C; U/ F- E; B2 o2 ^0 {3 Q4 Z K. F& b
else$ n$ H( t N6 z. V2 V! v& T
jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
/ N0 B+ T& C% U" N4 ?% Z/ [) d F3 c" i }
2 R3 ^: Y' z @& k else{
: N i& Z4 T$ G- n, A com1=0.0, com2=0.0;
! }, {3 g5 | x for(k1=0;k1<node;k1++)8 r$ K- \) i$ }. N, O/ `% T
{/ ~0 b6 u( _$ G( M6 @/ C8 k
com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];
& n$ w }4 y f com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
/ e9 \) t* t+ Q8 S2 i% b0 p; n9 f }
. b7 ~. K2 d# d1 b& w+ E- G. f, Y jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
. d- ~0 T! [4 X0 `- U8 T$ r jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];
1 R6 |# i: u& ~ L% m1 O if(flag1[i]!=1)# @ p( u V0 g, F8 `
{
' h% T/ o3 F0 X$ K jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];$ H# b6 C3 l+ x. }# b, R
jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
! F9 G$ o# p* H( [2 i d* i }
& S2 N3 P4 x1 ~ v K else$ O; ~' t' t, G+ t+ O; Q. f
{
# v8 `! J( \. \ jcb[n-1][m-2]=-2*e[i];- X! r% M) o2 u
jcb[n-1][m-1]=-2*f[i];
q' r8 b$ s: N+ ?# k3 D8 a }
2 i+ X* l5 N8 X }
s, z0 I0 i( k# [& j' v3 X: U9 E( c }% z7 V# h$ l. K4 |& p, G
}
4 n$ }7 s1 o8 b
1 m! X2 o# n/ P3 y5 W// printf("\n第%d次输出-J矩阵如下:\n", t);
; z$ h0 X5 n" c; h for(i=0;i<2*(node-1);i++){
) c: e- U6 e5 h. P2 c* H2 r5 |" Y9 f for(j=0;j<2*(node-1);j++){' q% K# V! ~& ^+ Z+ F( y
jcb[i][j]*=-1.0;
) k- v( s8 F# \// printf("%lf ", jcb[i*M+j]);
& j+ p9 I' K/ c+ \9 u }
. C ~/ D% Y5 Q# T// printf("\n\n");
; s4 L( v+ T' Z& h3 P }
! p [# M9 \0 Z! \! q4 E p4 j' c9 s 9 A* p( B: e4 b+ i3 o
/*算线形方程组*/6 {6 m; O8 i+ C6 D6 a) t# l
if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {+ g1 M8 w4 O7 `! e
for (i=0,j=0;i<2*(node-1);i++) {, I4 a `# v' A; z, E- Z
if(j==balc)
5 D3 Q' s, f8 Q D# M1 s6 b/ g! Q j++;7 }1 b- c$ R1 |, Q, a" E4 ]
3 |. }% k& R- ^
if(i%2==0){; O. t7 A, k a
e[j]+=jcbb[i];
. Z2 m# z8 f# I; p! x! ?% y// printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);& s3 M; y C! n1 B$ h1 i
}- L7 z2 _% B' ]( y; P+ M, x/ K+ p
else{
x" A! {, [& u6 H& p1 _ A f[j]+=jcbb[i];; L+ B5 U: B2 U( D5 l5 ?
// printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
3 n! Z* W, ~6 i: S2 ^- f4 l8 m j++;( }/ w+ k; e" o, |; E0 O1 a
}
0 t+ ]: A# w+ {/ Y! u }8 Z$ }' ?9 l, Y
}3 w( C9 l \+ E2 S+ C# E1 ]9 P
}% ^/ S" ]2 U$ q- l6 z+ M
, \+ x3 o7 ?: B/ A% r- H
// printf("共经过了%d次迭代\n", t);# V, W, k6 W0 y6 e
% U& V& k& @: s9 G, p& N" i /*求平衡节点P,Q*/
1 y( I' G9 \+ q: C1 ?1 r8 n i=balc;
7 y# S: z3 o1 { F7 e. h; g0 R2 ^ com1=0.0, com2=0.0;. P7 a4 K4 ^" }' V8 `
for(j=0;j<node;j++){
8 S. h) U4 e; |5 P% _ com1+=g[i][j]*e[j]-b[i][j]*f[j];" J( M7 s, P8 I) {. \! N
com2+=g[i][j]*f[j]+b[i][j]*e[j];
; i, e$ ^3 H p" {+ q6 } }
0 |: S7 n7 d6 b6 z% U% z! h* m p[i]=e[i]*com1+f[i]*com2;
% n4 Y" s( y0 [5 n) n, R q[i]=f[i]*com1-e[i]*com2;: P) y/ @# V( C1 H2 D( X( B
8 k$ p% v. f. Q1 x+ w1 Z4 @ /*求其他各节点P,Q*/: Q1 R0 n+ S5 o6 D
for(i=0;i<node;i++){) V/ e7 @# Q4 `8 Z; _+ o
if(i==balc) continue;, I3 d8 d: V; U. t: }6 N, W m
else
/ T7 I& c. I, g, D N j' ]: V8 U8 d {4 X; u& p1 d1 S5 m8 B2 f) B3 a
com1=0.0, com2=0.0;3 M2 _4 u. a( Q1 A# \# ~
for(j=0;j<node;j++)1 g* o8 R! k j/ n' ?1 n; y) v
{
! p9 V; \+ \( ? l) p# R com1+=g[i][j]*e[j]-b[i][j]*f[j]; w. o4 c8 D5 {# |
com2+=g[i][j]*f[j]+b[i][j]*e[j];
0 f% D) ~/ w: p/ d }( k: a8 E7 t, a/ i: y+ D
p[i]=e[i]*com1+f[i]*com2;
, W" H8 k, W# Q$ x q[i]=f[i]*com1-e[i]*com2;
+ {& t1 N S" k+ ` }. n5 C" R/ [( s" H
} ]: t6 E4 ~7 u( r
1 B" ^% W a+ {& h$ d# B// printf("最终结果为:\n");
) r8 w. ~9 n3 x+ x7 p, W2 I// printf("节点号 电压 相角 有功 无功 e f\n");
4 o, o( k* b. K" D" q2 T for(i=0;i<node;i++)
9 z4 X9 q0 N7 P* a {; p Y. D1 L5 p+ E8 n S$ p! Q
v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
: n) J. E0 o$ y5 z angle[i]=atan(f[i]/e[i])*180/PI;1 R2 B! P; I" G6 }$ Q
sump+=p[i];5 J- v5 B8 c7 o/ M% Z, P
sumq+=q[i];2 T- Z( u% a7 X/ j
// printf("%d %lf %lf %lf %lf %lf %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);# Z+ E9 M- n& \2 `) |5 ^9 d
} |
|