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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

本版积分规则

招聘斑竹

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

GMT+8, 2025-5-17 14:20

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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