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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?' R; N! P- I! P( |4 H0 m$ X$ o( s8 J
牛顿拉夫讯$ F8 @- [. Z. j0 \
double PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)4 I6 r! ~: o, Z
{
/ z" J9 D3 c1 F0 M- c2 f  m: z4 H: E int M=2*(iNode-1);, \8 H* e9 O% T  K
int flag1[N]; // PV节点标志
/ H$ m- d9 c- a" k1 h7 g+ ~ # b% U! l5 Y$ r; G, \6 T- W$ ]1 i
double g[N][N]; // 电导
5 Y5 Y: [+ a; v% A double b[N][N]; // 电纳
/ k# ^! I1 o. ~1 D% o& ]7 } double dvv[N]; // 电压微分
+ k7 U/ r5 ^% f0 @, D8 b% w double angle[N]; // 相角( \8 @, F5 X8 @3 m3 f
double p[N],dp[N]; // 有功及其微分
9 I- {. J. w8 b, z. x double q[N],dq[N]; // 无功及其微分
& p+ m. M. _. [8 m, M+ P double e[N]; // 节点电压实部0 J; Z% z  B9 ~, ?* M' t# M+ x
double f[N]; // 节点电压虚部, b9 [( [, `8 G1 L) f3 W
double *jcbb = new double[M];
8 m: p1 X. B3 ]$ g- ` double *jcb = new double  [M][M];% t& A# h: p3 V; u

9 g: K% \. u. F: g& r5 C int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;9 e! q5 X' c: w$ f  s! v
double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;
( t/ [# i! r: B: ^ double lossp=0.0, lossq=0.0;$ S6 }5 m' m% C6 a1 d
node = iNode; // 节点数9 u- R( r% Z+ u7 r2 \' R
balc = iBalc - 1; // 平衡节点5 {" w0 N2 D/ `0 Y3 B1 [
for(i=0;i<node;i++){9 h2 ?# G/ \. N) V+ o
  flag1[i]=0;  N6 `: A, C4 }, X7 H+ T
  dp[i]=0.0;
! [/ a0 t2 ~8 c, E  dq[i]=0.0;! z2 b1 P: N+ g2 m1 H7 N
  dvv[i]=0.0;
" N# x& P  }/ P( j- z) s; s }# R$ W6 X/ V# i" |

7 y9 A$ d6 w* n4 K  n+ [ for(i=0;i<node;i++) {+ ^6 ~  _; L; B7 w$ |
  for(j=0;j<node;j++){
/ |  m6 N  b; N  U4 c. Z* @   g[i][j]=0.0;% `  H) R4 X4 ^
   b[i][j]=0.0;
( ^; v& }1 N! P; l) V4 |& P/ q  }
6 }) _1 p$ r9 m6 D }! t) H; k( C$ u% E
for(n = 0; n < node-1; n++){  
0 f" Q0 |4 W4 |  i = pRoad[n].head;
- P/ _6 T- T! Q  j = pRoad[n].tail;
0 c& U; [4 q* k+ D* P- v6 ~' C  rr = pRoad[n].r;
* |' H! R) M  k- V) j3 Q! l/ h  xx = pRoad[n].x;
* }- i4 p: [4 a1 ~) T//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);  \# y9 C  V& X& g; [8 D. Q
  bb = 0;! y4 i8 h6 d1 d7 ]: {' y
  k = 1;
1 V5 R3 Q8 r9 h/ ^  
& v$ \' t+ B( ?  F  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
( `: c- z/ ~5 W2 @4 t  }  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);; |! M8 ]* u- `% _/ c
  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);; M/ y$ q6 z, W/ t
  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
' F* z4 x, q# n4 [  h) m1 \6 V9 ~  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);
, Z1 Q* P! |& s  g[j-1][j-1]+=rr/(rr*rr+xx*xx);' t  h7 M% \4 I6 K
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
  P$ A" K% W  X  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));
. m. q7 n% {  v6 L+ A8 C1 O4 w: H" g }, S  Q) [+ m! M. b& V6 f& T
for(i=0;i<node;i++){
4 F/ e, J) j, m8 ?$ p$ w  angle[i] = 0;
8 w  a& N7 _& K3 M  v[i] = 1;$ i- ]9 _1 V/ Y
  p[i] = pNodePQ[i].p;5 K# u( K' P8 g* n9 U6 I$ x- [
  q[i] = pNodePQ[i].q;! X: ?" A* Z8 @+ j" R5 U
//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);; t3 T% h5 ^/ b4 T/ _, A, ]
  e[i]=v[i]*cos(angle[i]*PI/180);
2 W) h3 Q; Z  t4 c  f[i]=v[i]*sin(angle[i]*PI/180);# d8 r. `3 y" k! p' ]/ L
}( u. d, e/ C# O: V; _6 L
// flag1[1]=1;
3 n; U7 |0 l/ k# u6 t7 n, ?* V1 ?. |( R
// printf("共有n=%d条支路\n",n);1 ], O1 L9 {0 u) E  v5 ], ^
// printf("节点导纳矩阵如下:\n");6 H  K# i3 _4 [

0 {9 T  x' J9 {& l+ m// for(i=0;i<node;i++){+ W, j# e# e+ w5 {! Q
//  for(j=0;j<node;j++)
: S/ u0 W* O/ r3 r% [- R% \: B+ j//   printf("%lf+j%lf   ", g[i][j],b[i][j]);
/ }) o0 V" \* b' m0 j' G4 _//  printf("\n\n");}
5 E& v3 e  Q: k+ c) g6 \//6 z( Y' V8 C6 u9 }
// printf("初始值如下:\n");# u# {: [2 q) ~2 m# L( _
// printf("节点号 电压     相角      有功       无功        e         f\n");  m# ?" V$ s  W& G: @# F/ g5 A
// for(i=0;i<node;i++)! y3 r) d  F% I$ X, p
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
: v( |  P+ c0 W- a# r' q6 b , m) o& [& B- I  n8 d
for(t=0;t<50;t++){( K: V6 t& J5 Z( {
//  printf("\n第%d次迭代开始:\n", t);; W. ]1 E/ {6 f3 u1 V
  for(i=0;i<node;i++){6 v9 ~! b1 y- O9 Y
   if(i==balc)    /*如果是平衡节点*/3 P6 k2 J) D8 {/ @: e0 K+ ?3 L
    continue;: @9 _! d( F0 D7 I' e
   else{                                    9 L3 U/ j5 k+ W0 s+ ?5 a! M# o3 I
    com1=0.0, com2=0.0;
& O; M# d; V/ ^# Y    for(j=0;j<node;j++){
  L. q. y4 h- u& I) Y8 M" c" S     com1+=g[i][j]*e[j]-b[i][j]*f[j];& C' V- o& x& \
     com2+=g[i][j]*f[j]+b[i][j]*e[j];# F3 |: J/ ]6 G) f, t0 X
    }$ ~- l: a+ K# v
    if(flag1[i]!=1){                         /*如果是PQ节点*/
. A7 n% P  m# B* \9 f     dp[i]=p[i]-e[i]*com1-f[i]*com2;
8 N5 V# R9 w/ C     dq[i]=q[i]-f[i]*com1+e[i]*com2;4 o8 d1 Q2 c% d2 m
    }2 Z! R! l7 l1 U* z; [( L
    else{) o& l& P; L& i' H
     dp[i]=p[i]-e[i]*com1-f[i]*com2;. O) x8 }- Y7 E
     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
( ]+ J6 k8 y6 C0 [& {$ \# ]    }
  V& }- p4 C; V. R   }
2 w& f( o" |. r% F5 k; x  }+ e6 [3 U; p7 M! v7 y
  
2 }, M& \1 h' A: w  for(i=0,j=0;i<node;i++){                    ; v) e: B/ g( V+ p1 E6 r+ \
   if(i==balc) continue;
- q* g. }2 ^$ T  F5 |4 c2 ~   else if(flag1[i]!=1){, N" j( ]) s( J& z2 j7 G
    jcbb[j++]=dp[i];
3 ^2 x$ Z! y( D/ E    jcbb[j++]=dq[i];
5 |% q. ~3 u' r  C, i6 }//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);) y! @3 C7 ^6 E: [! `  j: D
   }
" R! I$ }1 w1 [  `, w   else{
" z8 I& W5 K+ ?8 O; e7 |, f% ^    jcbb[j++]=dp[i];
" M# f3 z( |* r$ U8 w2 |& L    jcbb[j++]=dvv[i];- w- t; v* Y& U1 D
//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
2 W7 [" ?, M1 F6 n( e   }
  b5 I4 r8 v4 j% H" m  }
, M  o6 m+ v" a) k& S//  printf("\n");
3 e' O8 C# K6 w, j5 B' l7 M1 z+ \4 }  
0 u( s0 G  f  j; {. P  for(i=0;i<node;i++) {( |/ q. Q! W& d+ l* _
   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)0 ?: t) y; q1 `! G8 U' b  c! M
    break;
2 H2 I+ J1 t" J1 T3 S  }
- Z& L; b% o0 P- ?) b* D  if(i>=node)8 F/ N9 v( ~# [! [' L
   break;  
# N+ F+ [0 v' [9 P; V* X  4 ?( f& B+ N+ x* k  V. n* [# ~& `
  
2 `" {/ u8 R5 S) K: V  for(i=0,i1=0;i<node;i++){* l) g, n/ t) D9 z3 _! I: X
   if(i==balc)
9 L, `" E) r( Q& a! X  H5 _, k5 ~    continue;% a* m2 ?9 K3 n# K1 T) o0 x( v) d- ~5 m8 }
   i1++;2 i  G" L9 k7 Z! I4 ]3 V/ ]
   n=2*i1;8 b5 I- T2 o: B4 A
   for(j=0,j1=0;j<node;j++){
6 n% {9 W/ H' f    if(j==balc) continue;
& w/ B: b3 J7 n" g+ w' g$ h( O4 Z    j1++;8 W  p/ E' f, d$ J4 o* ^
    m=j1*2;: U, e: s5 G" ?9 H& N
    if(i!=j){     
0 U; l6 j; t/ S/ c     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);2 l2 _9 \3 j  R
     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];2 p$ z! R' w  m7 v) H
     if(flag1[i]!=1)& V7 Y9 N3 F9 n* R* l4 Q7 f) F3 x8 U
     {0 z$ r# O* y5 T
      jcb[n-1][m-2]=jcb[n-2][m-1];' l4 _, g" W) u& m- F  C6 o% P2 o
      jcb[n-1][m-1]=-jcb[n-2][m-2];0 v+ [) C% ]/ _4 z
     }
0 o% A. S7 f4 j  i     else
; `. {) V" |8 W3 G7 G3 G$ ~7 S. `1 t      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
- F: A0 `. t) p" P8 R2 L/ U    }
% {; ^4 h9 Z# X' n$ b' F: o6 ?" ^    else{
$ U: O- z* W2 `3 x  V/ L' h     com1=0.0, com2=0.0;# r- P$ ?* W* S% m; O7 z
     for(k1=0;k1<node;k1++)
% K8 C( o' w4 A' Z; ~     {
# B' {5 y2 e+ u' b      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];2 A) H! Q! u% Y* G  Q
      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];7 m$ V8 Y- h7 \2 a- L* s
     }- v! d% U3 }8 v' D) j0 n& Z
     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
! M) `5 r5 n  Y: k& |5 r) o     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];  R5 X1 N; y8 i" j% H
     if(flag1[i]!=1)
6 a% q5 H) w# c. Q; H* C     {
& h3 a$ k  s" m      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
3 g1 m3 e  k  u$ \! r" q4 s      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
$ ]  F7 }  _: {( {     }
9 g; B  N& i1 f- e5 u  J     else( q/ M. t7 d- c
     {
' K" ~- n+ c8 }' z6 m, L2 A: g      jcb[n-1][m-2]=-2*e[i];
) b! Y7 q- [0 t, Q      jcb[n-1][m-1]=-2*f[i];
" y* E- h* g4 x: m- e3 U9 ]# G     }
8 K5 c( R; M6 X* h    }+ X" ]0 _7 h6 [3 v
   }) W9 ]1 c/ F. k! T: A( |* l9 f: S  v, u
  }
/ Z, \3 R. L# |   
6 f' K. b1 y/ Q* _; f) A//  printf("\n第%d次输出-J矩阵如下:\n", t);' n, {, l( h% u& K2 J( w$ b* M
  for(i=0;i<2*(node-1);i++){- U% y7 L- f) v4 @
   for(j=0;j<2*(node-1);j++){
+ ?, _/ L3 |0 |( f$ `5 o    jcb[i][j]*=-1.0;* A1 f7 y! g7 \$ l! l- i  k
//    printf("%lf   ", jcb[i*M+j]);  y  ]. M5 L. Z4 J6 m* C7 Z. r
   }2 q7 {1 |0 D1 e" ~  r. ~: [
//   printf("\n\n");
( i- F+ ~4 j4 q# W( f8 Q: y  U  }
8 X  X  e7 p: K7 p0 y3 ]+ w   / |9 e( C6 _5 t  m  V
  /*算线形方程组*/
2 a# e) T7 H) ^7 n* S; m1 q* e  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {
5 B  p, m  K; [9 n8 h   for (i=0,j=0;i<2*(node-1);i++) {& O/ \& g9 {- ]" m4 J; F# H
    if(j==balc) ; }8 @5 l' f, |" R/ U( J! J
     j++;# a; q: i. c# y* g, G" G& }
    ! [/ _: t" _4 t+ }; P4 }& y. V
    if(i%2==0){4 c# P+ ~* P8 p1 G; E4 q* L
     e[j]+=jcbb[i];% |  {# x" W! ?0 B9 Z
//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);1 @# e8 X$ a" R( R. |6 |
    }9 r+ _1 G& ~. l9 V9 U7 K
    else{. Y  ~. }# j7 f
     f[j]+=jcbb[i];
6 R2 S2 a. n! k% g. Z0 [/ ]//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
. ]* {  s" d8 E$ w  n- p/ Z% @     j++;
- G* n' N7 r# }; r# C* H    }
6 b" `1 E$ _7 i* l) h  b/ y   }, k. j$ q; i  `6 d$ [1 _
  }
! h+ h- L. J4 G7 { }
; n0 t* `* }- K8 s2 `6 p" Q
; J) P% d! h% M// printf("共经过了%d次迭代\n", t);- E/ \& K6 E. C* n
& L: U5 C, W& m6 O7 J+ ?
/*求平衡节点P,Q*/
% @. d7 a; R# P# |) } i=balc;
5 c* n# H, P: w* {2 i com1=0.0, com2=0.0;2 L* _) D" F1 R8 S. d; L
for(j=0;j<node;j++){
5 i- h1 b. L5 r: T  com1+=g[i][j]*e[j]-b[i][j]*f[j];- j, Z0 Y7 D$ K& y+ b1 O
  com2+=g[i][j]*f[j]+b[i][j]*e[j];4 t! G6 ^( F; g6 K3 ]
}
% k: F5 n* @4 Y; P p[i]=e[i]*com1+f[i]*com2;1 H6 |3 q3 ?: d3 u$ q
q[i]=f[i]*com1-e[i]*com2;
0 z# P0 d: v. s) B' T' o7 U9 H
/ {6 A( f3 a5 Z$ e2 n* e /*求其他各节点P,Q*/+ G* |! _7 |0 q
for(i=0;i<node;i++){
# _6 d/ R  L( E; ]) ]$ J" C  if(i==balc) continue;/ b* g7 j. J; l( h6 |9 S
  else
, b7 B5 r, I! @6 V  {* K, m! [, W" X# K
   com1=0.0, com2=0.0;- w& {: S4 d/ d  d) M% c, ~
   for(j=0;j<node;j++)! i: B$ q  }& |' I8 e" {, D
   {1 C5 G2 S/ |/ D% F8 u  g
    com1+=g[i][j]*e[j]-b[i][j]*f[j];
$ V6 c, ?/ w( j    com2+=g[i][j]*f[j]+b[i][j]*e[j];# D$ C- A6 U6 ^0 A% A6 Z3 Q  e5 D
   }% W5 v5 Z) {& m6 B8 {
   p[i]=e[i]*com1+f[i]*com2;" j3 `. s* B/ {1 b. K! t
   q[i]=f[i]*com1-e[i]*com2;6 |, W: X4 c4 L7 G8 x* B# ]" H
  }' G3 j5 N8 l* {4 C
}: Q* @" B% O' w7 \' \
8 ]" f9 K& W7 c/ j
// printf("最终结果为:\n");
" K2 y5 v1 ^1 R) ^// printf("节点号 电压     相角      有功       无功        e         f\n");
# ~$ H6 Q- Y  `1 W3 `; n for(i=0;i<node;i++)
2 V6 s- h% Q+ q! t {1 U" Q$ O( s$ |8 x
  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
% G: s! Y, ~: B3 _  angle[i]=atan(f[i]/e[i])*180/PI;
) u4 |4 C9 a8 j) B0 {5 K2 Q1 [  sump+=p[i];( l2 r# _) \& c/ E
  sumq+=q[i];
9 g- h3 d! R! z6 H) _( Y# G% h//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
; t3 N/ g& b+ ?0 B6 G7 r }
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2026-10-21 01:06

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

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