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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?6 |/ x& X0 {0 {0 m- d  I1 ]5 k7 A8 _
牛顿拉夫讯
& q5 v" O' A; ^" Z! wdouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false). E8 k! @, b& {4 p0 T; @  y
{
+ Y* l9 f: U) ^# x6 \ int M=2*(iNode-1);
7 z# a9 u5 r7 N1 T& u int flag1[N]; // PV节点标志
) Z1 `& p" k! Q ; s* f* o( ?5 u# G
double g[N][N]; // 电导. T" l6 U8 E, L0 `3 B, ?
double b[N][N]; // 电纳
+ k9 g. }- B) P* ^ double dvv[N]; // 电压微分
( F! l3 Y7 Q; O$ M- } double angle[N]; // 相角
% N6 M0 W# {* m- H# d) n3 Y double p[N],dp[N]; // 有功及其微分
5 y$ f8 r) f' Q% G5 ^+ L+ g" B double q[N],dq[N]; // 无功及其微分: f) ~9 B/ K0 `5 c, s9 X$ ^
double e[N]; // 节点电压实部2 K# U: Q. D. P! w
double f[N]; // 节点电压虚部
* Y4 k2 q* }& M1 v" l2 x4 h double *jcbb = new double[M];
4 X8 a9 Q/ w$ l( l, J6 G8 o$ H( x double *jcb = new double  [M][M];: F% P( B& O0 \5 [
0 a. c+ h* j& \  t" u8 q. {8 K5 m
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;
# q& A* L! a* i% v double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;+ x8 [% w& o8 E  f$ N. G, E  l  _
double lossp=0.0, lossq=0.0;+ N, t, f& z) f/ Q5 D9 R% f& R& u
node = iNode; // 节点数  E$ _1 _# R8 S
balc = iBalc - 1; // 平衡节点* g6 G2 Q4 j* a6 a
for(i=0;i<node;i++){) H3 N& ~  f2 t; R, ?
  flag1[i]=0;0 F! I( g% l  r  t
  dp[i]=0.0;
% C! M( A% y( @  dq[i]=0.0;8 z8 H% W4 w$ Y/ x3 H
  dvv[i]=0.0;* I$ z9 L' _) v0 ?
}
1 w, p$ Y6 q8 b 2 Q2 F+ {, I. ^& m/ o( F/ h1 v
for(i=0;i<node;i++) {  o0 D% O& M  k3 f/ y% E0 Q
  for(j=0;j<node;j++){  s+ Q  t6 c, `: F8 V* O
   g[i][j]=0.0;8 [3 h- ~! A* e6 L5 `' D
   b[i][j]=0.0;
! X" N* Q' Y  }% D. j  }1 R$ ^; Q5 B! ]
}
, X; s  ?6 |3 _- o7 ^ for(n = 0; n < node-1; n++){  6 O: C5 I5 ~0 h8 s) e" A: B
  i = pRoad[n].head;) x$ X# D  F/ Q3 c
  j = pRoad[n].tail;$ l- w7 \: ~- j0 Q
  rr = pRoad[n].r;7 W. ], X' h6 |
  xx = pRoad[n].x;
' ?) R: \5 J; e$ C" b. f5 j! O//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);
/ u3 `' f( Z# o- o  bb = 0;5 N% P: G  e, }  Y5 r  R- x
  k = 1;+ ]5 f& p7 p4 R: k& Z& d! {
  
3 _5 _1 U! i$ b# T4 z  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
9 y$ H( |+ U9 Z; [% F8 v( G  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
$ t  \- s' d- p) Z1 i8 F- v  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
8 M& x$ y2 K/ q& P  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);! Y( d3 J3 b1 V2 p9 p# \9 U
  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);6 R9 b2 H8 T+ O! [. i5 |
  g[j-1][j-1]+=rr/(rr*rr+xx*xx);6 o6 B5 O! Y1 |8 w, n1 V$ K
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
/ X/ m7 U2 p- S' v  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));8 M+ t( L$ W9 K) ^# }
}- A. n! {$ N% X4 d
for(i=0;i<node;i++){
" d: l8 o# O9 R  angle[i] = 0;* C0 R: t+ j1 O* a# H. K
  v[i] = 1;) w, |! O! @% B! w7 W% D0 _
  p[i] = pNodePQ[i].p;
6 w9 H3 n5 y' Y: @- e2 S  q[i] = pNodePQ[i].q;" @$ D. I0 _  {6 ^/ J9 \
//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);$ ^3 g8 R8 D( ]8 Y' m
  e[i]=v[i]*cos(angle[i]*PI/180);1 P: o- G0 `1 R  \8 [) D. S
  f[i]=v[i]*sin(angle[i]*PI/180);
" m- f: P( B8 W1 u  H  n8 i }, C; H) u  @) S% ?8 J" J" u
// flag1[1]=1;
5 u3 L/ _& c5 [6 Z' w$ S
1 x& q. j% u4 \1 v// printf("共有n=%d条支路\n",n);
+ J6 f( p0 O4 x7 v' D( d/ i8 p) t// printf("节点导纳矩阵如下:\n");& l/ w  G! W8 F) `

; [" V# a- \7 e0 q" j// for(i=0;i<node;i++){( r* D' g7 B1 {! X
//  for(j=0;j<node;j++)
8 _* j" u. T, n2 ~2 j//   printf("%lf+j%lf   ", g[i][j],b[i][j]);
* H. {( v' u5 ], P7 c' @//  printf("\n\n");}3 d* p& K0 P) l
//% M0 r; O+ R& A% G+ P# e7 n3 O
// printf("初始值如下:\n");1 W% i# A) X5 y- {( E0 p4 e% R
// printf("节点号 电压     相角      有功       无功        e         f\n");
. w% b# H3 p6 }# L6 G) o# v& h// for(i=0;i<node;i++)& j5 q7 a. n1 A: r
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);- ~2 X/ y5 L* ]% N5 O% u! B9 a: p; \% f
4 j4 X/ X/ o. o7 w3 B; b
for(t=0;t<50;t++){8 b/ r' [, b, h+ z" C" U. ~
//  printf("\n第%d次迭代开始:\n", t);
" D: v: e! Q; F- y4 J5 W  for(i=0;i<node;i++){
6 Y0 w% a( w3 U: ^1 W   if(i==balc)    /*如果是平衡节点*/7 D6 j# v  ?) q
    continue;
) {) N% ^$ s. }   else{                                    / X3 [7 q3 n; M: W; [' X. q
    com1=0.0, com2=0.0;$ C9 y; i. O+ q- q/ T2 K9 f0 P
    for(j=0;j<node;j++){( B% H6 V# ~5 z
     com1+=g[i][j]*e[j]-b[i][j]*f[j];
8 }5 v/ T. H) q* p$ o; Z     com2+=g[i][j]*f[j]+b[i][j]*e[j];- f1 _" e6 H, M9 W% A" \! X
    }& a. L. m+ Y% B* I: F: g% v$ y
    if(flag1[i]!=1){                         /*如果是PQ节点*/1 u6 H3 a' p1 n. t# I9 x  x7 i
     dp[i]=p[i]-e[i]*com1-f[i]*com2;
0 i7 o/ X# m  d4 b! d     dq[i]=q[i]-f[i]*com1+e[i]*com2;
2 X) I3 H3 r1 O" q: c    }5 `* I  a3 C7 c% E1 g( a6 O% \/ D( }3 \
    else{
+ [% Y5 l1 w; [0 h* v     dp[i]=p[i]-e[i]*com1-f[i]*com2;5 t5 t" s1 o+ H# U% z2 k
     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);+ k8 Q+ m+ a% A: p7 B
    }7 S$ Y) a. j" g) g- c5 o1 ]
   }, W/ x: W( j; h
  }% y- P' c; W' `1 c& D. i8 y; g% j6 {
  
6 i" ]+ [1 r/ I3 u( c  for(i=0,j=0;i<node;i++){                    
9 Q8 x9 d( F( K3 t$ ~   if(i==balc) continue;
0 |+ s. V/ L; Y2 d6 e# @2 o* j7 e   else if(flag1[i]!=1){9 `$ W3 c7 r' t! p7 ~* R
    jcbb[j++]=dp[i];
7 a( i% e( {: _  K3 m+ k. J$ f) Q! f    jcbb[j++]=dq[i];
- Q8 r' Q; o% w' g. i8 e' K//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);
4 q! M" [4 l; I  Y/ n4 k   }
6 j& g5 k, |/ Z( n  l* M) w$ L7 i  H   else{
4 i* E, E* G) |  I    jcbb[j++]=dp[i];
! c0 o0 F. _! }9 E9 L    jcbb[j++]=dvv[i];1 D; m3 B+ ^$ e& d1 e4 L
//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);  j7 g% U+ ~% c/ W) ?
   }/ c0 u% M5 A; S9 J: W
  }/ I& c" i* n6 D  L3 Q: Q( [: Y
//  printf("\n");7 ~# v4 L" \. x
  $ J* j8 T3 x. J: U  V
  for(i=0;i<node;i++) {
" K7 h9 N6 Z2 Y+ l% `  e% i/ K, Q: t   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)$ K+ s* x2 h" i! S& ]- b) R1 K
    break;
: j1 x) {! S3 N+ o5 w0 |  }
- r% T2 Y0 i4 p; T7 F  if(i>=node)
" h% @1 J5 ^  x( W   break;  
" Q' G1 x& c/ u3 f6 Q1 O$ c  
0 h, |: s% y% N, x  
! t. @  @; }% {  M( z6 r4 [  for(i=0,i1=0;i<node;i++){
6 U* }5 O* \  N: R& D! [   if(i==balc). h: n2 C( s6 x& u& d- R( U
    continue;' c/ P3 T  n$ z2 `
   i1++;& ^3 y3 X2 q/ e7 K8 V0 H5 w
   n=2*i1;% {1 @  @! M! K& L6 \) e# d
   for(j=0,j1=0;j<node;j++){. }: C( n0 r  ^6 i3 m
    if(j==balc) continue;
' [3 B! F$ P9 l' M0 C9 i( z    j1++;4 {0 n  f! v' u% [* s4 |2 C9 Q
    m=j1*2;
9 w+ h2 z6 e% Q7 u6 v; A    if(i!=j){     
$ j' h4 ~+ P  H* V     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);. i; p& U* C" S
     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];3 U: J, O' v  d" V7 C
     if(flag1[i]!=1)3 l; L- O0 |! b) i) C1 B1 D+ ^
     {" e- }' a3 v" r% i. L0 G
      jcb[n-1][m-2]=jcb[n-2][m-1];4 Y' X" ^/ ]  `9 M8 i
      jcb[n-1][m-1]=-jcb[n-2][m-2];) O* o3 s* Z, D. X7 n
     }
1 @* P. ~) b  C     else& ?4 C6 F8 B: ]- l- A
      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
7 V: e3 ~% u* ~    }' v1 B! y) F6 `8 g* y# H
    else{
# }& @) a  O) U, ^     com1=0.0, com2=0.0;
9 D6 f/ E: ~; ^2 N9 e     for(k1=0;k1<node;k1++)
9 F% Y# K' [! G6 ^( m     {
+ ^0 Y' E/ ?! H1 v/ a5 z/ v4 z& N      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];! n  T0 W# @7 P( c3 z1 {
      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
2 _* K) N0 |' A     }
' S6 }) ?  x. w& Q; {5 m; ^. F     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
. j) |- A. W7 s4 w+ T% B# x     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];
% V$ O# E% e. t     if(flag1[i]!=1)' \! g: m% I- v! k+ V
     {# }5 V) z8 {6 ?) K5 d
      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
8 E) j% P3 S6 r2 p2 H, x1 F; r; N      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];' f/ C; K$ B- W  ?3 X
     }
- z- y" W( ?- a/ ?8 _% B     else$ [7 ^5 S7 X; ]5 J9 U
     {! Y% @( [3 T7 v$ {  W
      jcb[n-1][m-2]=-2*e[i];
( a/ ]( H3 N& F, \. e6 m      jcb[n-1][m-1]=-2*f[i];0 P( p2 a* t! }; j( T: C& t
     }+ ~- \$ L: N: v7 Y& V) I, C- @( h
    }
, g4 N: G* r% A8 L4 }+ t   }
8 S- Q# a1 v1 v/ \0 Z  }
5 q" h6 q7 h# {6 j& T4 D/ g   ( n! y- B; \0 o
//  printf("\n第%d次输出-J矩阵如下:\n", t);
. z: _0 a% M! N- y1 s- L  for(i=0;i<2*(node-1);i++){6 J* T# _2 G- O2 ]6 Y2 e3 Z; ?
   for(j=0;j<2*(node-1);j++){5 U3 U1 y: _; d! U+ B
    jcb[i][j]*=-1.0;
+ u) ~5 y/ z4 o" T* y, m$ _//    printf("%lf   ", jcb[i*M+j]);
( K/ {4 \: v7 s3 G* r   }- O9 Q; K6 r* A" v
//   printf("\n\n");
( i$ }* W# n* ]9 h- ]5 A  }; u8 I/ f$ W3 X4 g$ H
   
" S' l; C# H9 a  /*算线形方程组*/
3 n- `: A; x8 |7 w2 s  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {
% Y  a! [4 ]/ K$ p, K   for (i=0,j=0;i<2*(node-1);i++) {0 A& N) S* l4 x/ v6 P- }
    if(j==balc)
' g/ D: c; H' S2 d% c4 _     j++;
+ u+ e5 J: E9 p( ]+ u/ {   
( E7 Y6 h% W, z1 i* F( m: Y9 Q    if(i%2==0){
8 b6 v  a- r8 J# ]# a     e[j]+=jcbb[i];
1 E! U& G& ~, H//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);2 H  L! J( l. W- i
    }
7 v4 I; y  W( S$ i4 }    else{
& x; |' [! `! o! F     f[j]+=jcbb[i];: Y3 a3 D! O* U% o+ z% L0 g. I+ A
//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
) f' b( B8 f4 e: G! B$ Z' {  M     j++;! q* ^6 J$ P  P) v* b
    }' G/ t! q# t5 n: ^, a
   }  _. B& ~5 S% L+ B2 m# A
  }
! o3 \% H- j9 p }
/ m3 w5 u- _6 l$ G0 ~5 Q/ ]  G+ `" Q # b/ P; p6 j% B
// printf("共经过了%d次迭代\n", t);
7 p1 o/ y3 D6 d% K" v
' r3 J5 n+ z( ]) o /*求平衡节点P,Q*/
9 t8 m8 j" G9 {6 s i=balc;
4 Z' h& ?2 c, X com1=0.0, com2=0.0;1 E' x9 l9 Q# }8 Q5 k
for(j=0;j<node;j++){
( h4 g7 }, {- b3 p- _  com1+=g[i][j]*e[j]-b[i][j]*f[j];
6 h" h6 m6 _* \1 [  com2+=g[i][j]*f[j]+b[i][j]*e[j];
2 j% p9 {5 U. W/ A' N3 i }
7 g' o4 |' [% E8 W7 x% T; p8 T p[i]=e[i]*com1+f[i]*com2;6 q- @% M" a' l, |1 A- j
q[i]=f[i]*com1-e[i]*com2;4 n( N& S% n0 @- Y

2 H1 y1 y3 s9 x8 W /*求其他各节点P,Q*/7 k+ R. Z5 f1 _1 T
for(i=0;i<node;i++){2 z2 T$ @' ~- T: r4 ^- b) y5 v
  if(i==balc) continue;, w& F: q, U( L$ J; H. q
  else
2 o1 U7 M! o9 a& R7 [  {
3 ^9 c4 Q8 z' E4 Y( C4 F0 ?   com1=0.0, com2=0.0;" [4 d' a. s9 Y, v
   for(j=0;j<node;j++): M. L+ D7 X# r; A, @1 h9 P
   {& G  j4 k# T' j3 _- W; W) x+ Y
    com1+=g[i][j]*e[j]-b[i][j]*f[j];5 ~4 @/ `# u0 _; @# F) j
    com2+=g[i][j]*f[j]+b[i][j]*e[j];
9 Y+ F# \/ D/ z# y; Z- b( M" w. S   }6 T3 X. q4 g8 i& |+ [
   p[i]=e[i]*com1+f[i]*com2;% W, ?* o1 p8 k9 X
   q[i]=f[i]*com1-e[i]*com2;- v* M6 f7 M8 ^: J3 J" D8 C
  }+ o1 K  j2 Z3 C+ @6 k% X; ?1 K. @
}
7 d0 S1 e  ^2 s1 n. S# c ' F4 W: x3 L; b
// printf("最终结果为:\n");6 u4 U& P# {" d! c  J3 n1 \5 W2 w. G2 w
// printf("节点号 电压     相角      有功       无功        e         f\n");' p2 n) B3 K8 ?! B4 y0 n
for(i=0;i<node;i++)) ^0 `1 g, v+ G, O$ c* [
{! ?, v1 I" q4 b7 t% X- y
  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);! G( C! F# d, k' l8 L
  angle[i]=atan(f[i]/e[i])*180/PI;
0 T7 [* N3 i$ Q7 M5 h/ b/ r! C+ F; b  sump+=p[i];
) }# }  H/ X1 v9 C/ w# t+ s  sumq+=q[i];- Z' _3 i) Q  j9 h" o6 P8 q& G
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);- ]4 B- E; M) }/ f) N2 L
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2025-2-23 10:17

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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