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

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

牛顿拉夫讯

[复制链接]

该用户从未签到

尚未签到

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

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

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

×
谁能帮忙看看这个牛顿拉夫讯怎么改进的,能用于配电网潮流计算?- _) U0 ?3 j; N, v
牛顿拉夫讯
2 J1 d6 R# l3 W) n8 O4 zdouble PowerFlow(int iNode, int iBalc, ROAD *pRoad, NodePQ *pNodePQ, bool vOutputVoltage = false)
$ c. c( u! P1 T1 u+ r. _; D6 w4 r{
: g; l4 C6 [6 F% U& m$ J int M=2*(iNode-1);
: q$ Y7 V2 x. k int flag1[N]; // PV节点标志* i- t) m7 n" ?

( y8 M/ U/ N( \% [' \" b double g[N][N]; // 电导
6 L2 F$ x5 o- `' I double b[N][N]; // 电纳9 \6 ~3 m' A- a4 }
double dvv[N]; // 电压微分. G0 S$ ?  Y8 P1 I5 S. u& p
double angle[N]; // 相角  Q# [+ j- X& `4 W% H" z
double p[N],dp[N]; // 有功及其微分8 u8 L3 y3 X7 U. t
double q[N],dq[N]; // 无功及其微分
& l: P. _4 o3 L) \- \  Y double e[N]; // 节点电压实部. z' H1 i& c0 N
double f[N]; // 节点电压虚部
) d. \; l  L, Z7 R/ a& n, D6 ? double *jcbb = new double[M];
/ x& l' p+ g+ ?, ^9 w( \6 h double *jcb = new double  [M][M];
: y9 O% |- A0 F# P# t
1 K, U$ H& R# S/ v) |! w. j# m8 A/ E int i,j,i1,j1,n,m,t,k1,balc,node/*,flag,npv*/;* d% ~/ X4 P4 O! V
double rr,xx,bb,k,com1,com2,sump=0.0,sumq=0.0;/ m. `$ U, ]  a, l' b' v
double lossp=0.0, lossq=0.0;
) M/ p4 ^+ O# W6 [' l3 q0 } node = iNode; // 节点数3 Y& A- W/ A3 J( t; o9 \
balc = iBalc - 1; // 平衡节点
' u" Y& U2 W* s& Q( F, i for(i=0;i<node;i++){# M7 I8 l3 b  Q3 j' ]+ b
  flag1[i]=0;% Y9 @) d2 l2 I1 Q# z1 {; A
  dp[i]=0.0;
4 T' b4 k  p8 \% w" L6 E1 {9 o  dq[i]=0.0;
, v+ g( F) B# S  dvv[i]=0.0;3 P* e: C0 V! e7 c% ]# N
}# Y: l: A' S. ?5 a

8 w! }* |  O2 i7 k for(i=0;i<node;i++) {
* q* V+ U  @+ f3 P" B& n  for(j=0;j<node;j++){
& ~% J. Y; O6 z* o, ?" _" }   g[i][j]=0.0;& G, Y/ y+ e) T- P3 c9 |7 ?
   b[i][j]=0.0;
$ j; b7 I+ W8 N4 M) u  }8 O, a: P0 n7 {2 X2 |* Y
}- G% {2 s  t. j4 b6 q
for(n = 0; n < node-1; n++){  
% i( j; x" P/ E  q. Y5 }  r& w) [  i = pRoad[n].head;$ ^7 d5 v% E5 _% w' z
  j = pRoad[n].tail;. ?& [$ d3 J2 s
  rr = pRoad[n].r;5 @$ ?7 ^# a' G) q1 q
  xx = pRoad[n].x;1 n' A$ |* n+ r4 E% O  Y* U
//  printf("%d\t%d\t%.3f\t%.3f\n", pRoad[n].head, pRoad[n].tail, pRoad[n].r, pRoad[n].x);* e, H! ]1 G) k- ]/ l/ @
  bb = 0;' r: B, g7 N' C
  k = 1;
0 v" L% v/ \6 `" k( B. ^  ! x& T" ]7 @+ D
  g[i-1][j-1]+=-(rr/(rr*rr+xx*xx)/k);
0 Z0 ]( o2 t+ O' [0 r2 `) g6 G% Q3 m  b[i-1][j-1]+=-(-xx/(rr*rr+xx*xx)/k);
( X( X$ ~; _3 ~& ~0 G! o8 `  g[j-1][i-1]+=-(rr/(rr*rr+xx*xx)/k);
$ M5 B- A& h* Z  b[j-1][i-1]+=-(-xx/(rr*rr+xx*xx)/k);
( N: r- T2 L0 L) E% T  g[i-1][i-1]+=rr/((rr*rr+xx*xx)*k*k);' O$ t; m! P0 m" Q8 \
  g[j-1][j-1]+=rr/(rr*rr+xx*xx);- e- T! W" s& B3 E
  b[i-1][i-1]+=bb+(-xx/((rr*rr+xx*xx)*k*k));( U7 k1 a: Y, f& P! U
  b[j-1][j-1]+=bb+(-xx/(rr*rr+xx*xx));- W! x  {$ c, L1 x. E) I3 m
}
; C* X- |+ W  ^) r6 H, R% F2 O/ N( N/ n for(i=0;i<node;i++){
- J" N( a1 l/ c  c7 V/ `: P  angle[i] = 0;
" R! E* L' z! B6 O- k7 _  v[i] = 1;% T) q! V7 Z4 C- {/ e! W. ^- {
  p[i] = pNodePQ[i].p;
3 M- C5 w; t& @) p* b7 U  q[i] = pNodePQ[i].q;& y$ i1 B% j2 r. s4 W0 Z4 ~7 ]
//  printf("P:%.3f\t Q:%.3f\n", pNodePQ[i].p, pNodePQ[i].q);
* T" \) ?# ^# C# J% e4 {+ b  e[i]=v[i]*cos(angle[i]*PI/180);$ A2 d: h* w! [9 V- E
  f[i]=v[i]*sin(angle[i]*PI/180);; s4 U; a) \% J* ^1 ~
}
. ?- ~$ p, Z( E6 L) v4 B// flag1[1]=1;2 b8 t) u$ ?& `4 a7 y7 }9 c
+ U9 U4 ]! V: e9 e# ?* w
// printf("共有n=%d条支路\n",n);
5 O3 K+ X9 Q+ D// printf("节点导纳矩阵如下:\n");
' G6 o) e( ]% ?. t$ h# t4 }! m: P 3 l; G4 g, u; G3 P! K4 M
// for(i=0;i<node;i++){( d  _3 @8 t; h+ P5 r
//  for(j=0;j<node;j++)
1 r0 z  Y, g& H, h//   printf("%lf+j%lf   ", g[i][j],b[i][j]);
5 N% E  M0 Z& s  n1 s  d; ]//  printf("\n\n");}# g6 Y) [8 I! C$ B' {6 ]6 N
//
$ C) c# t& x; J1 X0 f4 J6 z7 t// printf("初始值如下:\n");+ T8 j2 q  T0 b6 \7 f# S  a
// printf("节点号 电压     相角      有功       无功        e         f\n");
9 c& _& v3 I* m+ S' e) ]9 A// for(i=0;i<node;i++)# g* o/ H1 W  U2 C" G& V9 V& W
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);
! s5 V, F! J8 f0 {- j
( b$ b3 s0 K# n/ T0 b; r6 H for(t=0;t<50;t++){
/ j+ q5 U9 l1 N: Q& C//  printf("\n第%d次迭代开始:\n", t);6 Q1 y/ y' I( e9 I: I$ l/ F
  for(i=0;i<node;i++){: u; c) v- l6 f( T3 S
   if(i==balc)    /*如果是平衡节点*/& R* i5 C" K, S! h% C
    continue;# a) x$ A5 ^/ @% X4 a5 p9 a# }
   else{                                    3 R. y0 U& F3 c8 y
    com1=0.0, com2=0.0;
) X3 ~  v0 J- C4 t+ t    for(j=0;j<node;j++){( R" A* H5 l8 x( t7 z
     com1+=g[i][j]*e[j]-b[i][j]*f[j];
4 I+ I8 e4 J5 a, A: r     com2+=g[i][j]*f[j]+b[i][j]*e[j];
3 a9 Q# q3 G+ q* Y' a( e* U    }4 R' O2 N: B2 D. f0 A/ a: g/ R/ Y
    if(flag1[i]!=1){                         /*如果是PQ节点*/
5 T+ d  N% b' Z) k6 C     dp[i]=p[i]-e[i]*com1-f[i]*com2;5 ?  z5 \0 E) ~5 h
     dq[i]=q[i]-f[i]*com1+e[i]*com2;
/ ?& ]+ ^5 `2 R, h' B3 T    }; \! u' w, }6 ]% N7 z7 Q
    else{
" ]2 m: T: f- y+ F/ s/ T0 c     dp[i]=p[i]-e[i]*com1-f[i]*com2;7 A1 k% M! I. i% ^' Q
     dvv[i]=v[i]*v[i]-(e[i]*e[i]+f[i]*f[i]);
9 K* d/ v% _0 D4 O    }. z! q" d$ V% `# l( i4 P" u
   }
& U. M2 `5 G6 }( K/ g& V/ j  }' B3 }! M& i* ^- A% z
  $ {6 |$ Z2 x- X$ e9 \) [, O
  for(i=0,j=0;i<node;i++){                    
( T9 ?7 ]% I/ k2 @  k5 b   if(i==balc) continue;
/ {, k* p: d6 K2 s   else if(flag1[i]!=1){
, u0 [6 j, q& [- N) a7 y( S: Z: j  O    jcbb[j++]=dp[i];* j7 g2 z, S9 ]8 Y
    jcbb[j++]=dq[i];
# Z0 O" _" J" w//    printf("\ndp[%d]=%lf\ndq[%d]=%lf",(i+1),dp[i],(i+1),dq[i]);
& R5 g* S2 ]! u- W1 _' `" V4 I0 G+ x   }/ W' U+ d& o( p* F
   else{0 k9 z( C5 u! o4 f" P
    jcbb[j++]=dp[i];
3 L/ H2 V' p) [# a; ?    jcbb[j++]=dvv[i];, C4 B( b5 v: B* k
//    printf("\ndp[%d]=%lf\ndvv[%d]=%lf",(i+1),dp[i],(i+1),dvv[i]);8 P7 z" I2 L2 z! q) N
   }, j2 t; R4 R1 Z: u$ H# }) o
  }
2 `- Z$ Z0 K3 w8 [1 a& e2 d//  printf("\n");5 n8 v; \9 a5 l0 l) h7 W
  9 j) C, l" i6 K3 l
  for(i=0;i<node;i++) {
. O' x# i" \& G% A) o# t   if(fabs(dp[i])>=E||fabs(dq[i])>=E||fabs(dvv[i])>=E)
2 A' e* K* p* Z/ l    break;
% d/ K, D% x' O: G- @1 m  }
. Y: \1 F* G/ P( o! P  if(i>=node)
2 {: i; a  U- _: P& k7 ?. C. P   break;  7 ?; z/ |2 K; Y% F# W+ S7 N
  , n: @) x; W8 S; G
  * b% g2 |# J1 W$ l& ^
  for(i=0,i1=0;i<node;i++){# u5 L$ }, n0 X/ I( h; s& F  x" M
   if(i==balc)
# q, H# ~% y  z% I% `. F    continue;
: \. |2 l# m5 L9 L3 _   i1++;
! Q1 f* E( [8 O# R# ]   n=2*i1;
( F. o0 P, p4 S3 q- p   for(j=0,j1=0;j<node;j++){; r) K3 @$ \$ }7 h
    if(j==balc) continue;, a! O* o$ n3 H5 Q( M+ r
    j1++;
# v+ T( o$ u" o7 l$ {/ w  z4 T    m=j1*2;
, I6 J- Z: {6 ^1 O: W    if(i!=j){     
* D" g! h; q! D) c     jcb[n-2][m-2]=-(g[i][j]*e[i]+b[i][j]*f[i]);5 d) c4 D$ D- Z/ B' k5 f7 a" h' R0 N
     jcb[n-2][m-1]=b[i][j]*e[i]-g[i][j]*f[i];
8 D3 o4 F: {* `5 P     if(flag1[i]!=1)
  v( S1 J1 G+ u0 z% l$ v     {, I8 i7 V! r! N2 v' [0 ~
      jcb[n-1][m-2]=jcb[n-2][m-1];
8 p" _6 R! m+ K! p7 V  U      jcb[n-1][m-1]=-jcb[n-2][m-2];/ `: B& D+ B% f
     }! q. e6 j$ ?! E/ G: b% _4 R
     else
" g4 e8 X" C! _/ P      jcb[n-1][m-2]=jcb[n-1][m-1]=0.0;
  |2 S1 y+ v8 P- D* W    }9 ?. M+ \! l0 A5 p" B
    else{
# @. S" N, X5 _; T7 s/ ?6 k. R4 b     com1=0.0, com2=0.0;
/ n. `5 d5 G$ {# u/ V     for(k1=0;k1<node;k1++)
9 e4 E* N; ]  J3 Z7 l4 N: {+ I     {3 t2 D/ L: J5 R2 }
      com1+=g[i][k1]*e[k1]-b[i][k1]*f[k1];* P) ?% ^, [9 B& [: d' u
      com2+=g[i][k1]*f[k1]+b[i][k1]*e[k1];8 |  p- U6 j8 S! d
     }8 y. c" X3 n: z
     jcb[n-2][m-2]=-com1-g[i][i]*e[i]-b[i][i]*f[i];' v& l: G/ j, \* r, Y; L4 H8 j! H! L
     jcb[n-2][m-1]=-com2+b[i][i]*e[i]-g[i][i]*f[i];: p* D3 H- d. I8 ^0 a
     if(flag1[i]!=1)) T1 ?( @. R1 F( Y) [  j7 v" m
     {3 C2 y' N% C7 k# T) U/ i" V
      jcb[n-1][m-2]=com2+b[i][i]*e[i]-g[i][i]*f[i];
# E; B5 B$ \% g0 G      jcb[n-1][m-1]=-com1+g[i][i]*e[i]+b[i][i]*f[i];
4 E# r) E. }3 U2 d! u/ n     }
+ \7 {1 H" i+ I     else6 U+ {0 C6 M% A' S
     {
' G# b- U, N. @      jcb[n-1][m-2]=-2*e[i];( b' _) ]1 V6 K" K6 d$ G
      jcb[n-1][m-1]=-2*f[i];
, F4 @8 l7 w) J/ H0 U- B     }
' }! Z* g2 E$ v6 ]2 p* `    }2 a3 c! f# O' p. b1 Q
   }
. U; m/ |" z0 z: j  }
  A+ p( L2 S+ @: R* |   
2 \1 w, ?" v$ N# A- E" T//  printf("\n第%d次输出-J矩阵如下:\n", t);
/ o( v/ a7 n. N  [, l0 B  for(i=0;i<2*(node-1);i++){+ U/ X' W+ h: G: w5 Z$ s4 z3 E. j
   for(j=0;j<2*(node-1);j++){
& m, ?- s" ]& c' b5 v# [4 ]+ z) W6 G    jcb[i][j]*=-1.0;
1 y5 T4 ~9 d; _& s2 ], j: j$ O//    printf("%lf   ", jcb[i*M+j]);$ ^& |# x* i; i7 M5 ?$ X) u$ A3 ]0 k7 {
   }- [5 t  {& T$ y% W
//   printf("\n\n");
4 ]- K# {7 T3 ^8 M  }
- t) @+ `5 Y' T" l' b   
: A4 t- u. R7 X6 i  /*算线形方程组*/
! j5 H) R; S# F' Y6 k  if (agaus(&jcb[0],&jcbb[0],2*(node-1))!=0) {# d: A; K; }# Y2 r3 q
   for (i=0,j=0;i<2*(node-1);i++) {! x5 K6 ?6 e2 T- m% Z$ V; g. q
    if(j==balc) ) z/ r! z( T' K4 ?8 K* l
     j++;
  I8 F# p+ ~! Z% k1 r    , b; N7 @* V0 y2 Z( z" ^6 B# p
    if(i%2==0){
  K; u# l0 u/ S     e[j]+=jcbb[i];3 L3 x; ^% I) j! S) y
//     printf("de[%d]=%lf e[%d]=%lf\n", (j+1),jcbb[i],(j+1),e[j]);
* c$ B4 ^, p) ^# U- {' ~( I; }+ {0 |    }( \; q# ?, u  L
    else{+ H1 g3 J0 y3 X( F5 m
     f[j]+=jcbb[i];
6 C; U/ _8 Y) e6 x# t6 X: n+ ]/ ]//     printf("df[%d]=%lf f[%d]=%lf\n",(j+1),jcbb[i],(j+1),f[j]);+ _# g; v5 y% _1 Z- p+ q! k! t$ `
     j++;" D4 H5 i: z1 [+ F0 e
    }# B7 Z/ ~, z6 |5 \* W: h
   }/ K& T; B) X0 M3 y# i4 A, H5 p
  }
! t) K, y; z+ z  o6 z" n8 c }
; _2 q  t9 `5 l! p& P! F
# G0 Z6 D8 B9 s$ ?" S7 r// printf("共经过了%d次迭代\n", t);
; i) @/ s; S' J: O $ {5 c1 F1 i& M
/*求平衡节点P,Q*/% m. t% ~/ ]! Z# x" H; D1 t+ h( Q
i=balc;4 e+ ]; C9 F6 [7 x
com1=0.0, com2=0.0;* j5 T  q7 x0 A3 E
for(j=0;j<node;j++){
( B1 ^) v# O; p( t  com1+=g[i][j]*e[j]-b[i][j]*f[j];; c  a! W' G+ p( e. D
  com2+=g[i][j]*f[j]+b[i][j]*e[j];
. J+ g+ s" Q0 k. R+ \" d9 Y }/ S. X: a0 b9 p) J7 {5 x
p[i]=e[i]*com1+f[i]*com2;' |& h& E  t7 [% R
q[i]=f[i]*com1-e[i]*com2;3 ~7 ^# ~0 D2 N( G1 A
7 D2 j5 U, I& p
/*求其他各节点P,Q*/2 N7 Q8 s0 Q7 @/ X' E
for(i=0;i<node;i++){
- _5 m8 E) ?2 S9 v* m, V) q- G  if(i==balc) continue;
+ s* ~) F) Q- D" t  else
) C) G) R: y- z+ _" z  {3 ?& Q" ]) U$ l+ D  L
   com1=0.0, com2=0.0;- t% D$ F4 ~0 D( ?* |6 z3 x
   for(j=0;j<node;j++)
& f9 {% K8 N: c( ]0 A2 {   {5 u1 v! o. F" M- f  Y! m, j
    com1+=g[i][j]*e[j]-b[i][j]*f[j];
+ P' U$ b$ S! {( N9 A    com2+=g[i][j]*f[j]+b[i][j]*e[j];
- X. Q& ~! v) C% s6 r2 x' I   }
9 {* Y7 M* _! R' V   p[i]=e[i]*com1+f[i]*com2;6 Z2 X% V! P, r6 @+ G2 g/ }
   q[i]=f[i]*com1-e[i]*com2;
9 g  f& u6 _/ B0 c* V  }4 b3 s" v7 B; J+ R! `  y
}2 a0 c0 N7 J- O, P
+ S+ ^( R2 Q. L1 j# {+ o- y2 P
// printf("最终结果为:\n");5 e$ a7 X5 L0 _6 T* p. t' i& u
// printf("节点号 电压     相角      有功       无功        e         f\n");3 s) v4 f) y  G
for(i=0;i<node;i++)$ O( K1 _1 t3 C9 U& G
{
4 P! Z8 Z1 \' B& ~. U  v[i]=sqrt(e[i]*e[i]+f[i]*f[i]);
6 G, h) W& N! `  angle[i]=atan(f[i]/e[i])*180/PI;% T) f( F: J0 K$ k( b! N) @9 N
  sump+=p[i];
/ Y& K4 v) i: v  sumq+=q[i];/ M1 Z; E5 }2 N' |: _6 x( c" f
//  printf("%d   %lf  %lf  %lf  %lf  %lf  %lf\n", (i+1), v[i], angle[i], p[i], q[i], e[i], f[i]);4 ]* g; l* i, U' @
}
"真诚赞赏,手留余香"
还没有人打赏,支持一下
楼主热帖
帖文化:【文明发帖 和谐互动】 社区精神:【创新、交流、互助、共享】
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

招聘斑竹

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

GMT+8, 2026-3-19 19:56

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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