设为首页收藏本站|繁體中文 快速切换版块

 找回密码
 立即加入
搜索
查看: 907|回复: 0

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

发表于 2011-5-19 14:41:45 | 显示全部楼层 |阅读模式
软件程序
软件/程序名称: 牛顿拉夫讯
软件/程序大小: 1k
软件/程序语言: 简体中文
运行平台: Windows XP/2003/Vista 
功能简介: 牛顿拉夫讯
授权方式: 免费版
研究/处理: 汉化

马上加入,结交更多好友,共享更多资料,让你轻松玩转电力研学社区!

您需要 登录 才可以下载或查看,没有账号?立即加入

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?
; ~  _% X' T( M牛顿拉夫讯
- g3 v1 k" p1 B' ]$ |double PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)
7 _  e* V; J4 L) m* J. `2 w{
7 A% K( K+ v; ~* g; e3 ~! g int M=2*(iNode-1);, I+ F2 ]1 u6 @2 @8 [2 g+ H
int flag1[N]; // PV节点标志2 M3 [1 U8 i( [3 {
( t0 C1 c3 c+ {0 r  I
double g[N][N]; // 电导
# Y: M; e( W# b. J+ F- v double b[N][N]; // 电纳. b9 m  V, K3 k' ]! x
double dvv[N]; // 电压微分
) B! y( Q+ e, V2 U. A/ I. _9 g double angle[N]; // 相角6 [( u/ ^9 j: x  ?/ _" J; {
double p[N],dp[N]; // 有功及其微分7 q2 E7 g9 F( U1 M6 L
double q[N],dq[N]; // 无功及其微分; j2 `! [! H0 e5 T: o
double e[N]; // 节点电压实部% S1 N- Z6 b3 b, b
double f[N]; // 节点电压虚部# J/ f/ c9 g. N9 k
double *jcbb = new double[M];1 L5 I% \/ f0 y+ D; k/ Z
double *jcb = new double  [M][M];6 n2 w' ?6 ^! t/ C
; h9 x5 L0 K: V% e0 Y  Y
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;
; r" d0 @0 A$ m& R0 Y double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;
' m) O- o- ~7 P% F) K7 Q; ~& Q double lossp=0.0, lossq=0.0;
4 R# U! I3 z# @ node = iNode; // 节点数+ s) Q3 O8 r1 u; g
balc = iBalc - 1; // 平衡节点
4 y$ q1 K; ~* j1 ~; g7 Y# h for(i=0;i<node;i++){
2 E6 F3 M/ }: A  flag1[i]=0;7 `& a; }3 Y9 b% I  N
  dp[i]=0.0;( u; S$ x2 Y7 P* @  W$ W& ?
  dq[i]=0.0;. p  |) H, |' w
  dvv[i]=0.0;
. b# f' R$ o# i8 k& \7 k* \ }
- D+ ?5 {- l, Q/ i ! X1 N3 s2 D3 d" g: k, D$ w
for(i=0;i<node;i++) {
( M  I- X) ]& t; A" A& u2 ?  for(j=0;j<node;j++){# j( t1 W& G3 ]3 i! [
   g[i][j]=0.0;$ J* G: o7 {% u7 ^" _" k* h) ~0 Q8 {
   b[i][j]=0.0; ( ]5 }: V0 Q9 ^$ L2 s
  }4 [0 L+ d+ H7 K8 _6 G5 V& m
}( H$ `/ v) H+ V, B3 r' ]* ~, l( m
for(n = 0; n < node-1; n++){  
( S: k: N( _8 G+ o) h/ H  i = pRoad[n].head;( ?! G/ n; c. c
  j = pRoad[n].tail;7 P: a9 n7 a! I! S: I* @
  rr = pRoad[n].r;
) |5 j5 L! Y- ~  xx = pRoad[n].x;
7 d! C) r0 T% O( g& Q/ P6 P//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);" g" i9 u1 ^  z* R* P0 `
  bb = 0;
" A' J" V+ ?3 u5 G* v* Q  k = 1;
& b: x1 |, o, m9 x  ) V' F- m7 [+ j$ W2 c' s" M
  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
; j% d4 T, \- M" i  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
4 l' ^; ?" ?6 A, s1 y/ v; X  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
! Z# f! t+ V) Y3 C; R. M2 u( k2 N  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
. v. ?; O" d; u9 ?6 y' u  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);
2 u& U) B/ v0 b" O  g[j-1][j-1]+=rr/(rr*rr+xx*xx);5 p% B* Q. e; {' t
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
* O0 l* \) n2 B( P' c  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));* Z! u+ Q& |1 G. g) m# r1 y& v
}
9 `4 X3 O* R4 s, ]# @5 t for(i=0;i<node;i++){
9 J9 c' R4 T: n5 U  angle[i] = 0;
( e2 K$ Q2 s. l9 |  v[i] = 1;
5 `" }% e: c0 X; A* r# Y1 j4 b  p[i] = pNodePQ[i].p;8 M3 ]( C" ?0 y2 d0 O
  q[i] = pNodePQ[i].q;
* [8 ^: d; ~1 b+ y, w3 a//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);
) O$ M9 n( u4 G  f3 S/ ]1 b% P, U% U  e[i]=v[i]*cos(angle[i]*PI/180);
: O) x1 J5 D1 n  M% @7 r' f  f[i]=v[i]*sin(angle[i]*PI/180);
; x# }! q/ S% K }
' J3 C4 H4 u7 g// flag1[1]=1;
2 ~' x; I" ?( B
# Z/ a  C' Q; c" |0 |/ s2 v// printf("共有n=%d条支路\n",n);
: B, \% p$ @2 g& R// printf("节点导纳矩阵如下:\n");
2 i7 ^' x* k7 Y  L: T  G
1 L$ r3 Y: H, ~5 _2 d1 P% f// for(i=0;i<node;i++){- ^0 @+ m2 _& {8 Z; y4 k
//  for(j=0;j<node;j++)
5 F- P# G; Q9 k5 ?" A//   printf("%lf+j%lf   ", g[i][j],b[i][j]);
8 o9 r  ^4 E: b" B1 X# U//  printf("\n\n");}
% x9 l7 _4 q' ?# N) ?5 c5 [//) @+ {% k4 n5 k$ {1 f4 Q8 E
// printf("初始值如下:\n");. V+ g, f  {. l6 o
// printf("节点号 电压     相角      有功       无功        e         f\n");2 P+ @, s. ^9 ]  H! `6 h7 S
// for(i=0;i<node;i++)
$ }, J0 W6 [  v% w! M//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
' x6 e9 b; i1 }
5 q# a2 _/ z( U for(t=0;t<50;t++){
* k7 L) w& S4 t$ o7 E# H' e//  printf("\n第%d次迭代开始:\n", t);, N4 y7 V  S- }$ |$ d
  for(i=0;i<node;i++){( r* Z3 w* g$ X' J3 x
   if(i==balc)    /*如果是平衡节点*/: W2 ?& O/ o  z1 M
    continue;( h" L+ F* I- j; |  A
   else{                                    
9 ?/ T4 J8 F1 J1 ^* X1 L    com1=0.0, com2=0.0;$ g. P$ {7 S; f2 C7 Y/ T" e
    for(j=0;j<node;j++){
0 }0 _* ~0 s( X# [: Y2 A  D     com1+=g[i][j]*e[j]-b[i][j]*f[j];7 O5 _( Y& F' `- j# S0 H
     com2+=g[i][j]*f[j]+b[i][j]*e[j];- I" w( h( [- d
    }3 P  g! N0 i) O9 O0 |/ v  Y7 _9 `
    if(flag1[i]!=1){                         /*如果是PQ节点*/
6 H; f/ W; k3 n3 s     dp[i]=p[i]-e[i]*com1-f[i]*com2;% N2 q0 c2 L) j% L% f( w
     dq[i]=q[i]-f[i]*com1+e[i]*com2;. B" N1 [, j4 s
    }
& t$ W2 k! U5 M" R" l0 F  `    else{
* H2 o( Q* |" ?2 _     dp[i]=p[i]-e[i]*com1-f[i]*com2;
  G4 |0 L4 f1 U- V8 W) z7 m     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
4 o! `/ N, y8 g6 a: J0 t6 _/ T    }
3 M: r5 ]0 I! \7 A+ Z' F% p3 k$ e   }& z2 H, ^: H3 _9 u/ Z
  }
) W0 E. L( A6 Q# g5 X/ R) z  
9 }5 d5 R1 L+ `( \  for(i=0,j=0;i<node;i++){                    
1 H9 o! ^0 P* V3 u   if(i==balc) continue;! m/ |5 a' }4 @' K0 E8 o- u! _
   else if(flag1[i]!=1){+ S" L; r% H* g$ G
    jcbb[j++]=dp[i];
6 |# L* `" y# M7 p) h7 C- Q* m9 }    jcbb[j++]=dq[i];9 J6 n& v' Z& F4 s& W
//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);
  ?7 D6 u  q" g   }
# e" K; a" Z& _3 ]# P1 A   else{; ?) b! l7 W! Y3 a( b6 ^
    jcbb[j++]=dp[i];
! j" T9 M. @1 k7 J/ X8 h! \    jcbb[j++]=dvv[i];
7 r% i1 p( g% u% D4 D4 Y5 \9 M- A//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
# c  |/ U3 w$ U1 p& B1 z) |6 p' |   }
. z: q" g& W2 S  }# P4 S5 w/ n1 G( u" q' ]$ D. f
//  printf("\n");
% \4 c9 S4 s: A2 a+ s  9 ?" F. R& N3 j1 Z# B
  for(i=0;i<node;i++) {
( z, C( Q1 h. ^4 a# m" V   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)6 p( y( i9 g8 r# L5 L$ w) k
    break;
- }7 v( o" t6 v! d  }
; q+ Q8 w  e3 ^8 S  if(i>=node)
: t6 f% _  f( Z   break;  / I/ V, C2 w7 ?6 u3 u# o
  
0 j4 Z. }  X* \! s) o9 J. F8 p  
0 J. s6 N* e& G$ R! I" m2 V. g( G5 k  for(i=0,i1=0;i<node;i++){& e6 i# \# t( p4 p- y
   if(i==balc)! r0 o2 r0 g2 z) J( L4 n
    continue;
$ O3 o9 B1 t+ l" _: C8 x   i1++;, ~: d9 H$ k! o6 }% l1 d5 j
   n=2*i1;
! G6 Z% s6 X7 a3 F* t% _; h$ y5 _   for(j=0,j1=0;j<node;j++){& u# x6 d% g7 U! `
    if(j==balc) continue;
! q6 m" N9 v& y9 ~& ^    j1++;
1 |( Q$ T. e. r$ M6 Y8 H0 v5 x    m=j1*2;# e- M8 U' t! q
    if(i!=j){     
2 D. @  L" o; |& q# K' ^     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);
# I6 r+ D6 s2 w9 L( H4 y: J- y  o     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
/ m5 Y; F1 B7 F9 T7 w' W     if(flag1[i]!=1)
  R1 U4 I9 A" y3 U- \     {. J% v8 \, A. Y7 D
      jcb[n-1][m-2]=jcb[n-2][m-1];
9 z1 `* h/ ^3 [4 f      jcb[n-1][m-1]=-jcb[n-2][m-2];( v5 J) G2 q* b  w( r
     }
: c9 W. u, j3 i2 u+ n9 h2 r: {7 _0 D     else3 D% x3 c: \4 O
      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;. O( m) H/ M3 ?! O# R2 R5 |& ?
    }
3 J& p6 G' P; I8 f& L  y    else{" [6 L9 s; W- P& T/ d
     com1=0.0, com2=0.0;' {' Q' e- }6 C# y5 W( X& ?
     for(k1=0;k1<node;k1++)
! [( s4 b4 L& Z9 {/ N3 V  q. C' G     {
: _7 E3 O0 X5 s      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];
7 n& A8 W6 M9 S$ I. e) _- }      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
9 }5 Y6 j' r, c3 ~6 H$ I+ u( ~) i( \     }1 Q5 {& o" O- |  a+ v3 r" y# f. L
     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
/ U" L2 o& _$ r' b/ d) R     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];! P1 n! Z3 N  F2 ^1 N: ^
     if(flag1[i]!=1)
: O& @6 I4 ?) y6 p     {2 v5 L* @( m  }- [# q& U4 \
      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];" i$ D0 ~/ G- b% g
      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
" V8 p9 b2 F3 Y- u. P& j     }8 s* Z% K  C- ^2 u" ^' q8 N" [* F
     else
, w2 ?! m+ b$ A; e6 A$ ^     {- [# ^% ?2 K% A* _! ]$ s
      jcb[n-1][m-2]=-2*e[i];  X1 m3 A+ T" I5 [- j2 O% c
      jcb[n-1][m-1]=-2*f[i];/ V/ z  `# I' G$ t: j, Y" Y( d
     }
! Y2 \; r6 A& ~8 f' G    }  N% w$ E4 H1 D
   }, _0 X; c( Q' g. F
  }$ ^/ x; d5 H1 p- ], J
   ! Z. s! |! L4 V) W& \3 T3 |
//  printf("\n第%d次输出-J矩阵如下:\n", t);
* m4 I5 n; o8 E) y  for(i=0;i<2*(node-1);i++){) o; |8 M: T; T9 }
   for(j=0;j<2*(node-1);j++){
2 s- ~) X$ L3 \. X9 K0 c    jcb[i][j]*=-1.0;
+ a5 X- j' ]' F$ w+ j//    printf("%lf   ", jcb[i*M+j]);
) L3 g2 E2 U* C* r8 _! w   }
3 ^1 F9 `7 G1 W//   printf("\n\n");
$ f) e: r- c8 S4 W: I, u( @/ y  }2 H/ |7 ]& O4 h, R0 m" i
   
0 E) G# ?7 K0 e# F+ n! v% ?: g  /*算线形方程组*/
2 k2 @  Y# `; q4 f- j, u  J  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {
7 L6 c$ r  G. f1 t   for (i=0,j=0;i<2*(node-1);i++) {) P4 r( f5 t" l
    if(j==balc) 8 B( F2 O3 E  B
     j++;5 L7 J$ P1 F3 L; V; p' R1 L% [# b9 \  C
   
, ^) S7 ^* i  V' }: h" o. r8 l    if(i%2==0){1 I5 }6 h$ I* Q" r) ]6 I
     e[j]+=jcbb[i];+ ]- L" a- O7 @7 f0 V
//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);
6 ?1 y& F+ q' b! S  P8 @    }
* m7 e) p: [! x. F( X1 h  ]; h" X    else{7 U# T3 I  c" r: q! D2 X! I
     f[j]+=jcbb[i];6 o9 }4 W' D6 d4 d" e7 V( V. Z" G3 h
//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
, |5 v# M7 X5 I+ M1 w* e6 @     j++;5 p1 P& r6 d" Y" |( C! ]
    }$ V3 h* ~& {- R7 e6 A
   }
- [; A/ f3 H" a0 k8 Z  }
7 H  d+ t0 U! Y$ ^/ z. a4 D }
+ k/ p% G# Z" ^8 S 5 b! h- m" q  D: t9 J
// printf("共经过了%d次迭代\n", t);6 b) U$ }5 \! ^/ d' P% U
6 ~7 u4 I: j" T% J: a& ?- J, B5 u) f
/*求平衡节点P,Q*/
; u$ \4 k" Y- ?0 ?, L i=balc;' a( m& K2 g3 F
com1=0.0, com2=0.0;" e+ \; I( B6 g6 B# e
for(j=0;j<node;j++){# z+ ]  O" o2 |4 I, ?  G! u" Q1 [
  com1+=g[i][j]*e[j]-b[i][j]*f[j];; b. G+ ^5 T8 `# v) J6 D# V1 l
  com2+=g[i][j]*f[j]+b[i][j]*e[j];1 i7 o1 S1 c2 n; i$ y
}
7 l% h4 J" S5 T p[i]=e[i]*com1+f[i]*com2;
5 P( `; F: I# B0 U% | q[i]=f[i]*com1-e[i]*com2;. [2 O8 b( M: D; t% `+ i

* P7 L! ]: ]. o8 V7 d; ` /*求其他各节点P,Q*/
+ e; `8 ^! @9 Y' Q5 n. J# f* T for(i=0;i<node;i++){
2 L0 n" s0 y7 [2 y  if(i==balc) continue;+ z1 {3 _% f5 }: u
  else: P) W5 Q0 ?7 t, ]" ?6 Y% r
  {
5 \# d. C, f, [1 W* E- Y0 }: @! e   com1=0.0, com2=0.0;
$ Z- S9 |! _5 T, F   for(j=0;j<node;j++)9 N# X5 }  n3 V+ F/ U5 t# X
   {: i- O. @. A- \
    com1+=g[i][j]*e[j]-b[i][j]*f[j];
& x3 M1 P6 R4 `' o% {; t2 j! W    com2+=g[i][j]*f[j]+b[i][j]*e[j];: W+ S) |5 V" @3 M5 q% e
   }$ r$ _4 n& D8 B4 o6 e9 }
   p[i]=e[i]*com1+f[i]*com2;
4 n; v9 V3 S8 ?- M   q[i]=f[i]*com1-e[i]*com2;
5 d) l$ D9 o2 v! p" P  }
# |9 n7 n" m8 ] }
9 o) I( j1 e0 [$ ]3 h) W' b* \2 v
* y' `: H& Q2 K% F$ ?// printf("最终结果为:\n");. _' n2 s0 s1 c9 w
// printf("节点号 电压     相角      有功       无功        e         f\n");3 u5 E' x2 h" U+ f" O7 g
for(i=0;i<node;i++)
1 {: U5 [* r# E0 ]; n( w/ D {
4 l) |: Y5 P# R0 f2 u$ w% l. V  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);% u9 Z5 S* _8 `1 @' J+ t
  angle[i]=atan(f[i]/e[i])*180/PI;
' k0 J' j4 f; M! W  sump+=p[i];/ U) E- l. u$ I# ?& `
  sumq+=q[i];
1 {6 P5 I% A: f, k8 a- m! k//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);( U+ X% X* j* v
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

小黑屋|手机版|APP下载(beta)|Archiver|电力研学网 ( 赣ICP备12000811号-1|赣公网安备36040302000210号 )|网站地图

GMT+8, 2026-3-16 10:59

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表