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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

发表于 2011-5-19 14:41:45 | 显示全部楼层 |阅读模式
软件程序
软件/程序名称: 牛顿拉夫讯
软件/程序大小: 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
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2025-5-17 17:31

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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