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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?; W% ]8 ?, ~% Q  t* \- T
牛顿拉夫讯
6 C- T. K/ K4 D3 P9 edouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)) ^3 C0 }9 p  P) D$ H* M
{
/ I( R. \7 c# |9 l0 m int M=2*(iNode-1);
$ w2 a# v5 x/ \6 x$ c3 y int flag1[N]; // PV节点标志
1 ^( w% V# s% S3 P& u8 x! g# o ' b3 p* r6 S. m* s- J1 E% x
double g[N][N]; // 电导9 s0 N$ K7 y& R. d$ `! V$ i/ U
double b[N][N]; // 电纳
: @: a4 `' P, {: h9 f. W double dvv[N]; // 电压微分
$ ?: k0 f8 L+ x# Y, X/ _% Z9 K( } double angle[N]; // 相角
# `8 u0 V% a' G" E  n7 `- p( x double p[N],dp[N]; // 有功及其微分+ c8 t1 c. @+ t9 V$ V" X( N
double q[N],dq[N]; // 无功及其微分% q( q, n( T0 I$ `: e3 _
double e[N]; // 节点电压实部" C' r+ F! T+ f# @1 B
double f[N]; // 节点电压虚部
# z, g0 v1 N% d% ]5 ] double *jcbb = new double[M];
2 V8 K; V6 t! @  y" m( E# u! a0 b double *jcb = new double  [M][M];
' p% n0 }- p/ m2 F& U8 X: r; x* E3 x7 k; K* ^
int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;
: H9 ~1 Q/ E& |3 c+ N  e5 o6 b double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;, a7 N" h, m1 H- c! Q0 y
double lossp=0.0, lossq=0.0;
5 r; C4 X. `/ G% S  I# ]! y: Q- r node = iNode; // 节点数2 a- f/ A' g/ L$ W
balc = iBalc - 1; // 平衡节点
! B5 H" M/ X& v: f, T7 W- z, A for(i=0;i<node;i++){; n+ s7 E. h# S; t
  flag1[i]=0;/ r8 O* o8 t6 L( m2 \% ]
  dp[i]=0.0;
1 q7 y8 {% v) O& w4 R/ J7 l9 T( t  dq[i]=0.0;% A! n1 g8 c! D5 g$ k
  dvv[i]=0.0;4 J8 K  Q5 _) e; e% u3 @% |
}
; W3 ?: o/ i% V9 U9 k3 ]( b7 g3 K
5 x( E7 H3 K7 X0 z$ D  A# c! j for(i=0;i<node;i++) {
1 X2 |6 Q) V: L% q- |( b( ~- R2 S  for(j=0;j<node;j++){7 s: e. ?+ a& p
   g[i][j]=0.0;) g& U$ k* v: `, g2 S6 z" P3 i
   b[i][j]=0.0;
$ ^# a6 D# t! o" X' x; ^/ Y  }. Z; I' }1 N* j7 q$ J1 j( G4 @
}
# U: ?" O8 z/ k- L( \) q0 o for(n = 0; n < node-1; n++){  
0 j. |; X# r3 B$ x. |' ?  i = pRoad[n].head;8 h* s# @+ @: Z  Y6 i% G9 N
  j = pRoad[n].tail;( o' d' ?: v4 E7 [/ b8 i
  rr = pRoad[n].r;
; x. o  `& x& _6 X  h  xx = pRoad[n].x;/ X) R3 }( M7 {7 E  A* N
//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);5 s2 x" g4 X. }6 M+ q
  bb = 0;. E) z, v0 n$ j  E' [, c9 g1 F% W
  k = 1;
+ t3 w* f: J- K: i- H  
5 W, G. P$ m: l. @7 R  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);& Y3 w/ J! n# t' h) @! e
  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
/ [0 {& g7 ~# i5 X7 [: _( B/ Q  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
% Z# H% L: E9 K# o! Z' ^  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
# y! Z) [8 k- e2 Q+ ?  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);! e$ Y( Z3 O: u0 V; ^9 e
  g[j-1][j-1]+=rr/(rr*rr+xx*xx);! I1 |6 l" b3 o/ r6 B
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));
- A1 t# x1 e! J+ z  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));
9 L/ v6 j/ Z7 c$ R  } }$ O* Z& G5 t* w3 _% V2 F' y
for(i=0;i<node;i++){
/ x; H" d9 O, B1 V8 p0 W' U  U  angle[i] = 0;
6 V- Q  y6 c% V  x  v[i] = 1;
* B. R- k$ @- ~# g4 n7 _8 O3 ~4 h/ A+ B  p[i] = pNodePQ[i].p;
& ^# g& F& z. `  q[i] = pNodePQ[i].q;
( q8 Z& V/ `2 s//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);
! c' z' d0 Y0 ]+ ?! F6 Z. n  e[i]=v[i]*cos(angle[i]*PI/180);
, r8 [' E9 W* z1 F  f[i]=v[i]*sin(angle[i]*PI/180);
2 G4 a. g1 ]- }' ?1 t! O, f8 [ }- ^7 ]# v1 P0 |1 S3 b9 `
// flag1[1]=1;
* y  u, w7 y' u% y- Z; r9 Y0 m
3 s3 ^/ v- |: Z' S/ \" D// printf("共有n=%d条支路\n",n);
4 G- D- M8 E0 s, z// printf("节点导纳矩阵如下:\n");
7 h/ V1 k( j5 X: U+ D2 T
: T3 i' p9 k" Y' A7 o7 f// for(i=0;i<node;i++){& l+ @7 Y' Z/ g( S/ b+ B  D6 J2 {# U
//  for(j=0;j<node;j++)
! U: n# G3 ?* @4 ?- W* Z$ m//   printf("%lf+j%lf   ", g[i][j],b[i][j]);- _9 X9 s' k9 Y
//  printf("\n\n");}9 O+ t, f% Z7 v* f
//
( L3 u) ^7 I% p6 n6 W, a/ w// printf("初始值如下:\n");
9 Y; [1 n, G" R$ P  a) m" a// printf("节点号 电压     相角      有功       无功        e         f\n");
9 x- O0 A+ @! F" S% t// for(i=0;i<node;i++)7 o$ D- g9 o3 l5 ~$ `% x6 Q. B
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
& N; z: K4 |: C4 }* B# r0 X/ `+ S
/ E% |0 Z& e4 k. Z, s for(t=0;t<50;t++){6 b# @7 W( `# P& ^5 E* G
//  printf("\n第%d次迭代开始:\n", t);* D: U" @2 q' x( Y/ h7 r* c! q$ S
  for(i=0;i<node;i++){
. s: d1 _7 a2 c! L: }' A0 X4 S   if(i==balc)    /*如果是平衡节点*/
, S. {3 i/ {7 U    continue;* v  E# l1 }, S( W* e
   else{                                    2 A; ^7 T* H, F- @
    com1=0.0, com2=0.0;
! N* Z5 Z) t. n% ?/ h) a4 \    for(j=0;j<node;j++){+ s6 o* z4 a" g* @
     com1+=g[i][j]*e[j]-b[i][j]*f[j];3 z/ p3 }8 L' t# Z& ~# f) w8 K
     com2+=g[i][j]*f[j]+b[i][j]*e[j];6 J4 S4 C5 h, F) g0 ~
    }
" \5 T2 \" c: U  v" V, i# n) e    if(flag1[i]!=1){                         /*如果是PQ节点*/
' L6 m* E8 K  s9 y9 k6 n/ s     dp[i]=p[i]-e[i]*com1-f[i]*com2;
  @' v7 M4 U* c0 o/ ?     dq[i]=q[i]-f[i]*com1+e[i]*com2;2 K( K; Q$ O' Q5 Z
    }
+ {+ ]- i& J  I    else{: ]1 _4 `2 _: L6 T- j! K% f7 f
     dp[i]=p[i]-e[i]*com1-f[i]*com2;
. ?& o- _  H, Z     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
, ]  |0 E8 f9 k$ U) l    }9 l7 @; D/ D5 x$ S+ G
   }
9 Q9 C2 x" K& Z' \& l2 }  }: n" E! I! o- _# a
  8 T; U" `" i' f' X
  for(i=0,j=0;i<node;i++){                    
7 ~) h% h. k$ x% A3 Y4 p, o( g   if(i==balc) continue;
& G4 g: t- t" ~6 |9 g, ^& F   else if(flag1[i]!=1){
) k4 O! m: E# i: v  Z    jcbb[j++]=dp[i];$ O/ ?  x% c0 B
    jcbb[j++]=dq[i];
% S/ [1 J4 h2 z/ l# q+ \0 _4 G2 ~//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);# t, R5 d! T) y
   }5 s( w( ?, x" ~2 F) w5 G& R( T* i
   else{
4 ^3 Z0 X& `7 _& s5 V- N) H( k    jcbb[j++]=dp[i];8 Y, r& D/ b2 Z: C# Y& Z
    jcbb[j++]=dvv[i];
' |8 E6 b' c* w+ H4 d7 U& U8 w//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
0 r3 {+ D! h7 a2 f9 X   }
( q+ T, c$ }9 X" l4 b  }# D3 g. e, X" a9 k) g& \2 A% e
//  printf("\n");( I( ^2 @! I# G7 K  @) C( V
  
5 @$ A2 ^' a9 q  for(i=0;i<node;i++) {
8 x; g! W) j  ]4 K5 X; B# |: J8 z   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)5 ^2 C! q  r' }) W
    break;; ^6 Z- e0 Y7 [# l, A2 g+ Y
  }5 e7 \3 P9 T7 n9 I8 N8 @
  if(i>=node)
" |8 H* Y" @# C3 Z& C- \9 K   break;  
) F  a9 r' f; R6 E( v: k) a  
" K" q' H7 M, Z  
! x0 _, c" G* D4 u  U$ |  for(i=0,i1=0;i<node;i++){0 t8 M* w# ~0 l5 j. `# m: B
   if(i==balc)" B4 W, O& w  M' f( N
    continue;9 }% r! R3 S& F& m" W, a
   i1++;
0 D! u' S5 W' P& a  M& E   n=2*i1;
" B- R9 |5 i1 W# Q- `   for(j=0,j1=0;j<node;j++){
' X( F# {* g0 [    if(j==balc) continue;
* u) O6 n* T7 x) {: y- T7 B    j1++;
& V! q0 ^% _& U/ Z; s. y/ s    m=j1*2;4 l5 i- g2 B) O0 ]
    if(i!=j){     / A& r+ \) G" M; d8 |) ^. A
     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);
; u3 Z7 O5 N, [8 Z* S     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
8 M1 d7 `( G3 F; R     if(flag1[i]!=1)
7 y6 l) T" U, g  y& ~     {( X5 U( w2 T! u2 N, \
      jcb[n-1][m-2]=jcb[n-2][m-1];
" q, M1 G; e" t# O% v      jcb[n-1][m-1]=-jcb[n-2][m-2];
3 V+ H: {9 d5 u     }3 C; U/ F- E; B2 o2 ^0 {3 Q4 Z  K. F& b
     else$ n$ H( t  N6 z. V2 V! v& T
      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
/ N0 B+ T& C% U" N4 ?% Z/ [) d  F3 c" i    }
2 R3 ^: Y' z  @& k    else{
: N  i& Z4 T$ G- n, A     com1=0.0, com2=0.0;
! }, {3 g5 |  x     for(k1=0;k1<node;k1++)8 r$ K- \) i$ }. N, O/ `% T
     {/ ~0 b6 u( _$ G( M6 @/ C8 k
      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];
& n$ w  }4 y  f      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
/ e9 \) t* t+ Q8 S2 i% b0 p; n9 f     }
. b7 ~. K2 d# d1 b& w+ E- G. f, Y     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
. d- ~0 T! [4 X0 `- U8 T$ r     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];
1 R6 |# i: u& ~  L% m1 O     if(flag1[i]!=1)# @  p( u  V0 g, F8 `
     {
' h% T/ o3 F0 X$ K      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];$ H# b6 C3 l+ x. }# b, R
      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
! F9 G$ o# p* H( [2 i  d* i     }
& S2 N3 P4 x1 ~  v  K     else$ O; ~' t' t, G+ t+ O; Q. f
     {
# v8 `! J( \. \      jcb[n-1][m-2]=-2*e[i];- X! r% M) o2 u
      jcb[n-1][m-1]=-2*f[i];
  q' r8 b$ s: N+ ?# k3 D8 a     }
2 i+ X* l5 N8 X    }
  s, z0 I0 i( k# [& j' v3 X: U9 E( c   }% z7 V# h$ l. K4 |& p, G
  }
4 n$ }7 s1 o8 b   
1 m! X2 o# n/ P3 y5 W//  printf("\n第%d次输出-J矩阵如下:\n", t);
; z$ h0 X5 n" c; h  for(i=0;i<2*(node-1);i++){
) c: e- U6 e5 h. P2 c* H2 r5 |" Y9 f   for(j=0;j<2*(node-1);j++){' q% K# V! ~& ^+ Z+ F( y
    jcb[i][j]*=-1.0;
) k- v( s8 F# \//    printf("%lf   ", jcb[i*M+j]);
& j+ p9 I' K/ c+ \9 u   }
. C  ~/ D% Y5 Q# T//   printf("\n\n");
; s4 L( v+ T' Z& h3 P  }
! p  [# M9 \0 Z! \! q4 E  p4 j' c9 s   9 A* p( B: e4 b+ i3 o
  /*算线形方程组*/6 {6 m; O8 i+ C6 D6 a) t# l
  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {+ g1 M8 w4 O7 `! e
   for (i=0,j=0;i<2*(node-1);i++) {, I4 a  `# v' A; z, E- Z
    if(j==balc)
5 D3 Q' s, f8 Q  D# M1 s6 b/ g! Q     j++;7 }1 b- c$ R1 |, Q, a" E4 ]
    3 |. }% k& R- ^
    if(i%2==0){; O. t7 A, k  a
     e[j]+=jcbb[i];
. Z2 m# z8 f# I; p! x! ?% y//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);& s3 M; y  C! n1 B$ h1 i
    }- L7 z2 _% B' ]( y; P+ M, x/ K+ p
    else{
  x" A! {, [& u6 H& p1 _  A     f[j]+=jcbb[i];; L+ B5 U: B2 U( D5 l5 ?
//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
3 n! Z* W, ~6 i: S2 ^- f4 l8 m     j++;( }/ w+ k; e" o, |; E0 O1 a
    }
0 t+ ]: A# w+ {/ Y! u   }8 Z$ }' ?9 l, Y
  }3 w( C9 l  \+ E2 S+ C# E1 ]9 P
}% ^/ S" ]2 U$ q- l6 z+ M
, \+ x3 o7 ?: B/ A% r- H
// printf("共经过了%d次迭代\n", t);# V, W, k6 W0 y6 e

% U& V& k& @: s9 G, p& N" i /*求平衡节点P,Q*/
1 y( I' G9 \+ q: C1 ?1 r8 n i=balc;
7 y# S: z3 o1 {  F7 e. h; g0 R2 ^ com1=0.0, com2=0.0;. P7 a4 K4 ^" }' V8 `
for(j=0;j<node;j++){
8 S. h) U4 e; |5 P% _  com1+=g[i][j]*e[j]-b[i][j]*f[j];" J( M7 s, P8 I) {. \! N
  com2+=g[i][j]*f[j]+b[i][j]*e[j];
; i, e$ ^3 H  p" {+ q6 } }
0 |: S7 n7 d6 b6 z% U% z! h* m p[i]=e[i]*com1+f[i]*com2;
% n4 Y" s( y0 [5 n) n, R q[i]=f[i]*com1-e[i]*com2;: P) y/ @# V( C1 H2 D( X( B

8 k$ p% v. f. Q1 x+ w1 Z4 @ /*求其他各节点P,Q*/: Q1 R0 n+ S5 o6 D
for(i=0;i<node;i++){) V/ e7 @# Q4 `8 Z; _+ o
  if(i==balc) continue;, I3 d8 d: V; U. t: }6 N, W  m
  else
/ T7 I& c. I, g, D  N  j' ]: V8 U8 d  {4 X; u& p1 d1 S5 m8 B2 f) B3 a
   com1=0.0, com2=0.0;3 M2 _4 u. a( Q1 A# \# ~
   for(j=0;j<node;j++)1 g* o8 R! k  j/ n' ?1 n; y) v
   {
! p9 V; \+ \( ?  l) p# R    com1+=g[i][j]*e[j]-b[i][j]*f[j];  w. o4 c8 D5 {# |
    com2+=g[i][j]*f[j]+b[i][j]*e[j];
0 f% D) ~/ w: p/ d   }( k: a8 E7 t, a/ i: y+ D
   p[i]=e[i]*com1+f[i]*com2;
, W" H8 k, W# Q$ x   q[i]=f[i]*com1-e[i]*com2;
+ {& t1 N  S" k+ `  }. n5 C" R/ [( s" H
}  ]: t6 E4 ~7 u( r

1 B" ^% W  a+ {& h$ d# B// printf("最终结果为:\n");
) r8 w. ~9 n3 x+ x7 p, W2 I// printf("节点号 电压     相角      有功       无功        e         f\n");
4 o, o( k* b. K" D" q2 T for(i=0;i<node;i++)
9 z4 X9 q0 N7 P* a {; p  Y. D1 L5 p+ E8 n  S$ p! Q
  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
: n) J. E0 o$ y5 z  angle[i]=atan(f[i]/e[i])*180/PI;1 R2 B! P; I" G6 }$ Q
  sump+=p[i];5 J- v5 B8 c7 o/ M% Z, P
  sumq+=q[i];2 T- Z( u% a7 X/ j
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);# Z+ E9 M- n& \2 `) |5 ^9 d
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2026-10-9 13:43

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

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