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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?5 A3 n  ?8 P+ v) K% G
牛顿拉夫讯) |" f$ z& D4 P, H4 d: q$ H4 `2 q) `
double PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)& h# J+ S( r9 D" a! K. M
{
" z6 y* O8 M( _. W! Y6 q: Y int M=2*(iNode-1);  `4 K+ E9 O9 q: [5 w* j$ b2 b
int flag1[N]; // PV节点标志
" p8 {: ?7 v% m  M. v% v8 m / s+ R) v! q3 R  Q
double g[N][N]; // 电导0 p$ G+ m, J# `) H5 a9 C
double b[N][N]; // 电纳( g2 _; G3 P' V/ b2 E% y
double dvv[N]; // 电压微分& t: n; A# Y' X) ~5 x* V+ {( @
double angle[N]; // 相角  f4 p$ n4 \0 g+ H) p" K
double p[N],dp[N]; // 有功及其微分
+ v5 ~/ u8 M9 N* K: q double q[N],dq[N]; // 无功及其微分
" T, Y+ ], [# l: R double e[N]; // 节点电压实部
( d5 T9 H+ `; m% m7 H# m double f[N]; // 节点电压虚部
( \) D& W! s6 r2 M double *jcbb = new double[M];
& p: t5 \" u; R. G8 j double *jcb = new double  [M][M];) y) t3 u1 A* l

3 y9 l  ~2 S+ _4 C int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;$ s$ n" Z. k7 C) ^" Z/ w
double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;
* [% u( {/ V! d' d! m; K double lossp=0.0, lossq=0.0;
4 R, @2 l% d4 A+ z7 \$ x node = iNode; // 节点数
) _1 K( w3 o2 J& v( R balc = iBalc - 1; // 平衡节点3 q: {5 ?& x1 }! S2 B; o
for(i=0;i<node;i++){
0 L  M* J& t/ u& @( [+ q- B  flag1[i]=0;8 E3 ?- T. C" }4 a5 ]0 W
  dp[i]=0.0;
$ x/ {6 p: o6 |  dq[i]=0.0;, Z( h( }! o' K1 h9 d
  dvv[i]=0.0;
( L$ o' ?  G( h9 d: k }
& N! u* ^5 Q( E8 w5 Z 6 c' a( r  D" c4 R7 Z. x! u7 c
for(i=0;i<node;i++) {
, o7 l9 _" _/ ^" V9 F  for(j=0;j<node;j++){0 a- O; p  L% E6 g5 k/ e
   g[i][j]=0.0;) S1 G3 Y/ m, y9 \
   b[i][j]=0.0;
: y2 q' N( ^7 {  }
' A  z# D& s3 j }
6 g) s4 i7 t7 v  j3 W7 s8 ] for(n = 0; n < node-1; n++){  6 C( m. D. g( \4 H+ z3 N
  i = pRoad[n].head;& K! P  d2 u6 w6 u  r; ^- U; S: }
  j = pRoad[n].tail;
  R$ C. y' n: j3 Z' ^  rr = pRoad[n].r;6 b  {1 W5 Y6 @$ f+ s. t
  xx = pRoad[n].x;( O( s4 z$ d+ u& E, v: j, C1 }2 F
//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);) `6 B+ Q5 a1 m2 j
  bb = 0;
4 K! Y4 i6 P% n  i. O4 R  k = 1;- v% C* W& g- r. G
  
; L: u: W+ ^0 L" @7 a/ p8 \  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
! F% h  j4 d9 Q2 e  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);: S6 x- F  U0 V; j% n( H, B! s
  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);! D2 e) n4 B) B4 ]
  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
( R2 w- \% N( q5 l  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);
% }( R! v, h$ d$ y1 K4 |7 ^  g[j-1][j-1]+=rr/(rr*rr+xx*xx);% y7 Q8 _* B( ]% p* h7 C' v& H
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));* v3 g6 z" j& K8 M3 k3 e5 j' B
  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));  y2 [; \+ n" f' w
}% ~8 v& d7 W$ ?" R# W8 u
for(i=0;i<node;i++){, \$ q' \$ }0 c6 E7 b( [" O) P$ `- t: H
  angle[i] = 0;
2 B. C5 q7 d, ]+ Z% q  v[i] = 1;0 v; Z$ |2 @  Q8 S7 s! ^
  p[i] = pNodePQ[i].p;/ r3 H  X% Q1 P% @. h8 V+ B
  q[i] = pNodePQ[i].q;
- a8 `' k7 D, D/ K& O, V5 F- C, g//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);) }, T. b$ B- R
  e[i]=v[i]*cos(angle[i]*PI/180);- |9 G9 @) o5 C2 E/ J
  f[i]=v[i]*sin(angle[i]*PI/180);
" ~( }% ]* |  q+ n. d5 z7 d }
4 B) N! ~, y9 k, a$ R0 h5 E// flag1[1]=1;
# K- Q0 l- N) ?# S
6 b4 X4 q8 D+ [7 q" t& z9 S// printf("共有n=%d条支路\n",n);
; O7 I" a, b6 s) M+ G// printf("节点导纳矩阵如下:\n");
7 E. v- p* F4 L, l" I" J# Z- ]
4 K% q) k' A' y// for(i=0;i<node;i++){* g) u) Z$ E7 y: i' t- h
//  for(j=0;j<node;j++)
; d7 b+ K" k6 _8 C! ]3 ~//   printf("%lf+j%lf   ", g[i][j],b[i][j]);+ {5 k. m' S7 Q' ^. R+ p
//  printf("\n\n");}
- Z3 c- p# L. M* Y0 W2 q//
( ]0 d2 C3 [1 v+ h// printf("初始值如下:\n");
) S" ?. n3 T, Q  Y8 R6 a8 W, M4 i3 ?, c// printf("节点号 电压     相角      有功       无功        e         f\n");
  S) R, y. Z6 h% N4 H$ L// for(i=0;i<node;i++)
# n! \& `9 o0 Y3 c! _//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);% r7 g9 |6 a, A& m9 a& [1 n
0 g. ~/ E! Z3 z2 j
for(t=0;t<50;t++){6 r3 D0 j7 d6 Q. E1 t& P
//  printf("\n第%d次迭代开始:\n", t);2 z9 N) Z5 O: P' g( W) m* p
  for(i=0;i<node;i++){
/ k8 f2 O) B# ^9 J9 Y8 m' _   if(i==balc)    /*如果是平衡节点*// T& B2 d+ `3 g  Z0 `, V0 E6 i
    continue;& i; q3 n/ g6 ?) |
   else{                                    - c0 I7 d' r: {: Z
    com1=0.0, com2=0.0;, h$ @8 y) _0 R7 P4 l7 x
    for(j=0;j<node;j++){' H: R) X; @, `3 t, N) q% v% D9 k
     com1+=g[i][j]*e[j]-b[i][j]*f[j];) A1 U0 `+ p& U6 U# K
     com2+=g[i][j]*f[j]+b[i][j]*e[j];+ z3 M2 a4 I5 Y' H! p. c7 a0 k8 ]
    }
9 C" t3 E6 {% s, J    if(flag1[i]!=1){                         /*如果是PQ节点*/" S1 s2 n8 a- c% ]0 b" W
     dp[i]=p[i]-e[i]*com1-f[i]*com2;
: ~$ L  r) x, O4 G8 Q     dq[i]=q[i]-f[i]*com1+e[i]*com2;
6 s: I$ v! N3 y; n4 {    }
- o( r3 A3 _& P/ @    else{
6 m' y$ g# n& H     dp[i]=p[i]-e[i]*com1-f[i]*com2;
  M4 [( }! x2 S6 C+ {     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);- s1 N0 r6 m8 C& F6 Z
    }. ]! B6 _6 e3 f  T( _+ G. Z
   }$ A5 y) P3 Z( _- M( i
  }
8 r  h+ B7 Q( Z  * {3 G! v4 Q1 T# N( u0 S
  for(i=0,j=0;i<node;i++){                    
$ P! n% F6 c% v8 {   if(i==balc) continue;) N$ ?  r, T. [
   else if(flag1[i]!=1){
) J; d7 H8 h# z+ w  F    jcbb[j++]=dp[i];
4 X( s$ X& `* H& V5 D    jcbb[j++]=dq[i];
6 n% z! \6 \+ Y, E- |//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);2 S3 y. v8 J. U
   }6 S5 l/ N7 F0 ~
   else{
' ?2 r' a3 z! X" y4 i    jcbb[j++]=dp[i];) @4 D! [6 K, J; N6 {: ]; U% r
    jcbb[j++]=dvv[i];) d+ N" w# E$ W# O) R
//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);
& Y+ t8 `  p$ R$ O8 {2 o; @   }: n) Y* d# m+ G% q4 e
  }
- R2 F6 ]5 G3 B' {//  printf("\n");
) y2 g4 S& [# ?2 g0 r  g7 @/ ~$ i* h  ) h% g- |9 s) ]0 r
  for(i=0;i<node;i++) {; B+ s: _' {7 v8 U$ x
   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)2 }4 o- l. f9 g3 J  y
    break;
) D' O+ g8 C, U  }1 l  @9 `9 c( N2 l/ y! v# {# I
  if(i>=node). ^: {5 b5 W9 q9 q
   break;  ( O7 {; `% X& S
  
5 h4 q' N5 P. v0 ?2 s4 Z+ H6 p$ T, s  
: O6 a2 h5 G- h. Y; z  O  for(i=0,i1=0;i<node;i++){
+ G- o+ z) `, A8 B   if(i==balc)
4 m4 d$ @/ P6 H  ?! C    continue;! Y/ ^$ J* b/ J0 Q" g) A
   i1++;0 @* J) _; r$ U. M1 H: {# j7 ^! M
   n=2*i1;3 E" t; ~5 N. R  Z8 \0 N( D& k
   for(j=0,j1=0;j<node;j++){
$ @2 `% n) c9 `, |1 |3 ^2 d    if(j==balc) continue;
( I6 ~( L. U/ G# _, S% u3 k    j1++;
% l7 ]# y/ q+ o7 v& u    m=j1*2;. o" D! }9 z* U# h7 v/ G* Q
    if(i!=j){     6 i5 {0 w, P! j! i) Q+ {; p
     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);# A' B, m1 _/ L) J1 m" e
     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
* W- a; l8 L, {# w3 G     if(flag1[i]!=1)! L! k( g) X+ M2 N+ M4 ^6 _- B
     {
3 \% V. ^  Z2 ^9 W5 _  x  H7 c      jcb[n-1][m-2]=jcb[n-2][m-1];8 o, M9 A$ f8 D" X0 L8 \9 M
      jcb[n-1][m-1]=-jcb[n-2][m-2];7 d3 m% M: @! m, g5 P
     }9 K" V. S" Y, R
     else& R- t- F7 A  J3 @8 ^' K
      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;$ b6 r+ a$ Y2 K6 E" V
    }0 _: a2 o# @3 {  n
    else{2 B1 [) H' n$ _. ^& m* f$ c
     com1=0.0, com2=0.0;6 G; K3 V$ |: Y2 D, d
     for(k1=0;k1<node;k1++)7 C* D% k  L2 S3 \5 B+ g, B
     {8 Q( C+ |& H1 Q8 s
      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];
, ^6 n# [# x( `: v      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];
; @8 l# G8 A% j' y) G9 [& D* \6 A0 T" e     }
. [) t, y6 z, ~" r, n! K     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];
2 L* s& v4 W5 J4 E+ D. ]8 S     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];0 C* _% Q# x/ A) V- U: D
     if(flag1[i]!=1)% l4 U' A  T" \, \" g$ g, T3 ~( O
     {6 L$ n& Q' m1 l
      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
* _8 |7 M, @9 {* Z3 b      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];6 d! d0 Y' E9 L4 Y
     }
( }" @+ Q: Z+ }     else
. {/ p) [4 f- Y; d) |     {
+ R& I& }; x0 U; j6 a0 f+ v      jcb[n-1][m-2]=-2*e[i];
. w0 q* c0 T! F2 ~      jcb[n-1][m-1]=-2*f[i];
2 _& S- @% k" G& I) X! u' B     }
6 g  l4 s" Y6 W4 H: C! |1 m    }
: {7 v6 n, d. j% P) {   }+ A4 S0 k) @, x+ j6 ~
  }
# e" _6 B2 C. V! W: U   
8 w1 C0 Q3 l. g/ U8 P; M$ w//  printf("\n第%d次输出-J矩阵如下:\n", t);
9 u  {: `% {- e. `' `  f3 _8 j  for(i=0;i<2*(node-1);i++){& k) V  i4 v* q$ L! p
   for(j=0;j<2*(node-1);j++){
& V2 G) A0 a7 d) M" @( B    jcb[i][j]*=-1.0;
& }# J* P- q4 b4 Q2 I  g//    printf("%lf   ", jcb[i*M+j]);# J7 D+ I+ z4 t+ t3 f
   }
* @& D6 z; i0 X" x8 y# b//   printf("\n\n");
) B3 e+ G0 X1 B. a  }1 w4 e5 I: j- L8 Z! [' u. k* @0 }
   
+ v# i; |2 y& h+ J5 k/ y% f4 J; @  /*算线形方程组*/
3 H3 n' }& h; `' [% D5 q  O% n9 b  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {4 k* O4 G0 d" Y$ N. r4 ^$ F6 y
   for (i=0,j=0;i<2*(node-1);i++) {
9 \6 E6 C' y1 b% n' x$ \; T/ d    if(j==balc) 7 {2 O( l' Y* F, |! E9 U
     j++;
$ Q1 s' N# x, H' s7 [$ [    + _/ D' Z% _+ C! Y
    if(i%2==0){0 Q8 ~2 ^) O0 ]* x1 r8 O
     e[j]+=jcbb[i];
. l8 ^& `/ ]. Q/ E# n3 ~2 h//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);  [3 `, f! R! o. o) n) V- R$ M
    }+ O" f: q, P4 _6 m) M8 A+ M
    else{
& E2 h" D  g! j6 W- ]  X     f[j]+=jcbb[i];
7 E- c5 u4 M' ]: w' F/ ]//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);
7 y! H& a9 X1 W6 P6 P4 ^1 ~6 V5 w     j++;8 T% H7 ]  f! K( ~/ j
    }) m  h: E' \5 W, m) O' H
   }
3 Q) g: x1 ]9 x/ g, a6 _, S  }# O, a4 M: U& g) d
}
  n/ G- q! m4 ]) s+ p5 j % L! S4 C9 }9 W! P5 y( |
// printf("共经过了%d次迭代\n", t);% C3 h8 d: Y# b6 _. [

7 k7 n$ t. l: j* y' T$ n- x /*求平衡节点P,Q*/5 D# o+ S+ b8 m" c
i=balc;. C$ g" A$ P' v: f8 @, J
com1=0.0, com2=0.0;, W2 K3 ^$ Z) P8 B
for(j=0;j<node;j++){
. c7 k" y- K3 C/ x# N- v3 i  com1+=g[i][j]*e[j]-b[i][j]*f[j];- [% P) x  a' I$ {" g
  com2+=g[i][j]*f[j]+b[i][j]*e[j];
8 E) B/ \8 U- | }
6 X- H$ G: y* v% D' J2 |  d2 \ p[i]=e[i]*com1+f[i]*com2;
, T2 R1 P6 Z/ ^# E5 E q[i]=f[i]*com1-e[i]*com2;
, X. P5 g0 I  ^: u* W7 A+ M+ o4 H   y3 ?+ @6 a$ |  u3 t5 M
/*求其他各节点P,Q*/+ p0 Q( ^7 v' ?7 t0 P1 B
for(i=0;i<node;i++){, f7 o' L1 G" q" M7 C
  if(i==balc) continue;1 N8 U# Y3 J! b
  else
, G. W5 |; C! N; ?5 j% B  {
: t* Z1 E% k' X, W6 \   com1=0.0, com2=0.0;- |. y9 S9 v: w& v
   for(j=0;j<node;j++)6 M( d8 o* Z$ e
   {
2 e$ D4 {3 X' c+ g: n    com1+=g[i][j]*e[j]-b[i][j]*f[j];
' F5 r+ b9 M; j2 l# [8 l3 ~0 a    com2+=g[i][j]*f[j]+b[i][j]*e[j];
3 j$ s5 |/ [6 J6 A6 f) T( e   }
9 p2 y& w; f5 e, k& x  a9 @) _   p[i]=e[i]*com1+f[i]*com2;  h3 Q  C9 u; n# S0 l
   q[i]=f[i]*com1-e[i]*com2;
' X2 }0 x0 p' E9 O  }, Q; B. Z- ~8 R2 H( C
}
8 J) r- }- k, I: j& c5 V- [ " G. e  l- J  X# P4 G, P* P
// printf("最终结果为:\n");- G8 S/ {( q2 G3 d) v
// printf("节点号 电压     相角      有功       无功        e         f\n");- w+ x0 M/ S+ Z  ?8 _2 s
for(i=0;i<node;i++)
, K7 F* j1 ?' Z& v2 @ {, K' e' h! h" u5 Y5 i4 W
  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
: g2 |# ]' t. H: U8 [% e/ e  angle[i]=atan(f[i]/e[i])*180/PI;
6 B# e1 \5 n5 p/ g5 e6 M; w  sump+=p[i];
7 g+ o% M3 X5 N! i  L5 y* l  sumq+=q[i];/ e2 V! e3 |1 W- q1 d+ ~) D# N) N
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);( W$ a( O+ g# C, G$ p
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2025-6-12 17:18

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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