我对程序严重的感冒 下面是我花了2个通宵修改的程序,可是还是有问题,但是我看不出来~~请高手帮忙解决一下,谢谢* _7 c. o0 ]" j- d7 a
(我直接粘贴不知道行不行,如果不行后面有附件)我的邮箱langlang00000@sina.com+ W J7 i/ A {& }' M0 T8 ]$ m
n=5; 6 g- [0 E e& ]$ D: k" Qnl=4; 4 Q6 B8 p; b* c3 H" uswing=1; / M/ v: i% R' _2 e8 m) Spr=1e-6; , h0 e/ P* R6 b1 U3 o# Q- PB1=[1 2 0.12i 0 1 0;%[首节点号 末节点号 支路阻抗 对地导纳(b) 变比(无变压器则为1) 是否有变压器(是为1,否为0]3 P9 [) ~5 `/ _7 x" D/ f
2 3 0.01+0.12i 0.04 1 0;$ V: T7 V5 ]. N$ V/ Y
2 4 0.2i 0 1.05 1; u3 @1 f- }$ D1 B 2 5 0.12i 0 1 0]( y! v3 a* A, [& b3 m
B2=[1 1.02 0 0 0 0 0 0; %[节点号 电压幅值 电压相角 发电机有功 发电机无功 负荷有功 负荷无功 节点类型(平衡节点为0,PV节点为1,PQ节点为2)]6 A C9 q& x/ J: j& v. s- [
2 0 0 0 0 0 0 2; 6 g% Y/ Z) D1 T5 d 3 0 0 0 0 0.9 0.6 2; , R0 `! F* v2 e# `8 l. a 4 1.0 0 1.0 0 0 0 1;, W- o* u! T# h9 I. U/ }8 D
5 0 0 0 0 0.8 0.5 2]6 K7 N' d6 W' y" T* t& F
X=[1 0;%[节点号 导纳] 8 D5 T& S, }/ r 2 0;7 d7 F5 j4 H( P8 A' E* a
3 0.1i; ! A8 w q8 l; C) _4 D1 v { 4 0;3 h: S( Z! N1 \$ | ?
5 0.1i] / R! T: D$ R' I$ ~: r. c9 [Y=zeros(n); %初始化节点导纳矩阵, {# j! u! G: R+ H& r& C# e/ ]
for i=1:n4 \8 c& ^+ D% v
if X(i,2)~=0; & s; `- }5 l( D) z9 ]0 j4 P p=X(i,1); 4 F- ]& I4 @+ d; d Y(p,p)=X(i,2); %写入节点对地导纳; W% I1 D, c4 n: B/ L0 r+ C
end 6 R* C) J% C% D! |6 k/ Uend 9 Z/ D1 Q' I, \% jfor i=1:nl / l) d6 `) O2 w* t+ V6 T. y if B1(i,6)==0" c0 D6 T8 B0 s! u" X2 a3 `0 n
p=B1(i,1);q=B1(i,2);8 u$ O- ^1 I7 ^2 ^5 u
else p=B1(i,2);q=B1(i,1); %确定变压器首末节点 ! \' O; {$ A/ g3 @2 ]' j end7 E" E7 t' q& g/ F
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5)); : F& y2 Y8 ^ N9 X: @0 X! Z8 _ Y(q,p)=Y(p,q); %互导纳2 g6 h# O5 l$ A4 |; e6 m5 F
Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2; %首节点自导纳+ a" ^2 E, P: W5 p6 i' i
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2; %末节点自导纳* E, _, d+ ~& }% p
end 0 t0 a1 }2 W1 ^1 |Y 6 W& f, L5 {! k) o' w! J# N MAG=abs(Y);PH=angle(Y); %求节点导纳矩阵各元素的幅值和相角 $ @! d, Q8 b+ E; p T- a% S" c4 A% ]7 x+ p%--------------------------电压及功率初始化模块------------------------------( X8 g \$ `0 B8 m( a
4 S" ^/ ~0 g. E5 A. t9 l, R
delta=zeros(1,n);U=zeros(1,n); / A1 T! C4 ~$ g. Vfor i=1:n; p" n' K+ x( }: y
delta(i)=B2(i,3); %节点电压相角初始化0 \$ l* k4 W Z. O$ j. @4 N3 v
U(i)=B2(i,2); %节点电压幅值初始化+ {9 Q* o5 b* P1 o# F/ ?
end# }5 p( {% b& n
0 a: @# J$ Z9 \& b: ~4 I( H' ?+ CP=zeros(1,n);Q=zeros(1,n); $ r" ]# C# a0 c+ f; ^- K* Ofor i=1:n ' ]6 G# y+ l+ p# }. O; p# K# y& J if B2(i,8)~=0: o- T! |' o3 M/ Q4 I
P(i)=B2(i,4)-B2(i,6); %节点注入有功功率初始化- ?" s+ ?: w0 ~# b
end0 t' `! ?' x4 i9 _
if B2(i,8)==2 , E" q V) u( I" R Q(i)=B2(i,5)-B2(i,7); %节点注入无功功率初始化. A' u# g0 y) d! l( \
end $ _8 a( o0 O5 T
end2 E/ o }1 d0 T& Q" g
; l3 k9 q1 X$ C. c( p 2 q, V0 y# y, \) e5 Y%------------------------求各节点功率不平衡量模块---------------------------- ; N+ ~+ w0 s5 @. ~$ J* ^/ H* a
NUM=0;IT2=1; %定义循环次数,循环条件标志" E) i. h, g* n# C k/ m0 S
while IT2~=0 # l! u) z& f A) y0 k IT2=0;t1=1;t2=1;+ ?. |) h/ f5 v0 i
for i=1:n8 f6 x% y3 k" D" K4 E7 n3 J" o
, U9 {6 c9 u& f. a- z+ R C(i)=0; - g& S3 Q/ e$ Z) @3 j D(i)=0; * N. o7 U7 y8 L8 W5 U4 M& m for j=1:n 1 E) x0 Z$ k9 ]8 m" ~! x C(i)=C(i)+U(i)*(U(j)*MAG(i,j)*cos(PH(i,j)+delta(j)-delta(i))); %各节点有功功率 . Q: E" _. F$ [$ q% z D(i)=D(i)-U(i)*(U(j)*MAG(i,j)*sin(PH(i,j)+delta(j)-delta(i))); %各节点无功功率 " |7 V, j8 L% b, h0 n end 2 Q$ E5 \4 c! q7 K6 k if i~=swing4 f0 P( m1 w* J) _4 T- T8 V1 s ~1 ]3 U
DP(t1)=P(i)-C(i); %PV节点和PQ节点的有功功率失配量6 J b% c `% s( u' Y/ y8 q
t1=t1+1; 1 O/ ]/ D) c1 n% Y. t9 W% | if B2(i,8)==2 D$ g: g. s" }/ G: ]& o
DQ(t2)=Q(i)-D(i); %PQ节点的无功功率失配量7 b5 {0 a) `9 E' |+ @2 M
t2=t2+1; 9 u6 s$ G* x, V end ; x' ^/ p' O9 G$ J" N$ U
end 1 P9 p2 S; K0 Y3 C0 G
end 6 m) E5 r8 ?* Y) T ) D E, A' g7 u& W5 x3 |2 h
t1=t1-1;t2=t2-1; 2 V9 A/ j0 \9 s DPQ=[DP';DQ']; %功率失配量矩阵7 ^- `4 o& A+ c" B7 I
for i=1:t1+t22 A# ~5 Y; v/ i$ V* k3 F9 _
if abs(DPQ(i))>pr %收敛精度判定 G7 `+ U0 y2 i/ Y9 i4 y% n3 n
4 l8 Q% O+ o6 `( X( m( W IT2=IT2+1; %不符合精度要求,进入下一次迭代 ! o5 c% ^3 I% c& ^6 Z# J4 C end ) ~0 y5 N H) @4 Z- ?
end + N5 S% [8 | G( { M. Q p2 o" F0 _
%---------------------------求分块雅可比矩阵模块----------------------------- v- _; V4 N# D+ s6 [" {( ~/ D & l8 i+ i; l" j p) R, `0 }" rH=zeros(n);4 n0 E2 K1 H& i* Y# o3 b3 ]
N=zeros(n); 5 P$ M0 b0 T& _2 U8 @K=zeros(n);" }2 v( N6 C. e3 j* Q
L=zeros(n); %初始化分块矩阵 ) \% s! z: W* _0 y* afor i=1:n; ^) E( p0 }9 Y" g, I2 F
for j=1:n 1 K+ G& c! @3 u0 H5 E if i==j8 k% z- X9 m! `+ n% J, C2 _
H(i,i)=-D(i)-U(i)^2*MAG(i,i)*sin(PH(i,i));& v6 O; |; u: c8 |! W; T2 [' Q' k
N(i,i)= C(i)+U(i)^2*MAG(i,i)*cos(PH(i,i)); # C# S" a( K! x( T9 f) i K(i,i)= C(i)-U(i)^2*MAG(i,i)*cos(PH(i,i));* Z$ t* K% w" A/ _! E( b
L(i,i)= D(i)-U(i)^2*MAG(i,i)*sin(PH(i,i)); %各n阶分块矩阵对角元 2 e6 Z7 v# h2 K4 E5 f j/ w else / T9 w/ i# A5 @6 R8 b H(i,j)=-U(i)*U(j)*MAG(i,j)*sin(PH(i,j)+delta(j)-delta(i)); 1 { V) B: x' N1 Y2 `' l N(i,j)= U(i)*U(j)*MAG(i,j)*cos(PH(i,j)+delta(j)-delta(i));- W6 C. M% N9 |1 t
K(i,j)=-U(i)*U(j)*MAG(i,j)*cos(PH(i,j)+delta(j)-delta(i));+ Q; t* K; d( `" X
L(i,j)=-U(i)*U(j)*MAG(i,j)*sin(PH(i,j)+delta(j)-delta(i)); %各n阶矩阵非对角元 & g0 u! l+ `8 @; Y( [ end: D- V# K/ x/ u$ ^& ^2 H3 C+ s
end 2 Z9 q$ x i5 H; n/ Q6 ?end 0 @$ ]# q6 P$ t) X$ A6 G: _ " D2 {8 e8 Y4 @1 n" J. }( D! z2 n( T! s V%----------------------------求雅可比矩阵模块-------------------------------( m3 [* u1 }8 L7 u" W. Q/ Z" X+ Z6 W
O' F O" I4 J+ w) d! @+ E4 U5 ZJ=zeros(2*n); %初始化雅可比矩阵: S3 [8 ?& W) p
for i=1:n . p3 s( z. R* a# _8 ?* y for j=1:n * T+ R9 g& R( P8 {% Y- @% i J(i,j)=H(i,j);% j+ g& X# m6 H+ n
J(i,(j+n))=N(i,j); / q) N# h! U5 ^: x2 _ J((i+n),j)=K(i,j);0 ^6 f8 P. v% o w' k, W
J((i+n),(j+n))=L(i,j); %将各个分块矩阵合并为2n阶雅可比矩阵* S; N+ b, I% e \6 j `5 G
end. p) N( q/ Q4 _3 e
end 6 X+ L1 D3 }( }; c2 p 4 p% f/ A, f9 |& W* Q3 @PV=[];) h/ b) a9 T5 D" T
for i=1:n X; O: B7 h) } s' c6 N ?
if B2(i,8)==1 % r+ Q+ x- [7 Z1 r f# f PV=[PV B2(i,1)]; %记录PV节点的标号 5 c' \3 K1 e, |( w+ Y4 M' q5 M end : g1 `; \ A N( F4 t2 Nend , g6 f9 r9 X6 k" A; N/ m ( L" n9 t$ f# r/ |; o' Q) n+ N( IJ([PV+n,swing,swing+n],:)=[]; %删除与平衡节点对应的两行,与PV节点对应的一行 8 b! ~& Q* U5 i0 _' k- Z5 OJ(:,[PV+n,swing,swing+n])=[]; %删除与平衡节点对应的两列,与PV节点对应的一列1 [* y3 w. E) n, \" |
3 H! A T- j! z4 T, u+ K
J; %最终的雅可比矩阵+ \ W! B3 J4 y/ s) P9 o
: h6 s. @( |. x%------------------------解修正方程求各节点电压模块--------------------------& G" O6 \$ V( Q* E- m
9 |( l# F8 x) a' l( ]7 S
modify=inv(J)*DPQ; %各变量的修正量7 x0 X% k9 T2 T
Ddelta=modify([1:t1],:); %节点电压相角修正量 ' Q! g" _5 f/ t* K2 x DU=modify([t1+1:t1+t2],:); %节点电压幅值修正量0 ~5 l; v. y( H0 J8 e
/ x. a* C1 C c! |% y' b UR(:,NUM+1)=U(1,:); %记录各次迭代节点电压值 2 |( `7 v' M' j3 u) R9 u: z t4=1; 1 C+ Y% b& T3 U1 G for i=1:n + Q$ N/ E9 H' Y! ^% R if B2(i,8)~=0# A0 V, ]. y# c: i8 ^
delta(1,i)=delta(1,i)+Ddelta(t4,1); %修正后的节点电压相角 X5 ?% w3 a5 z* m w3 J8 u* n
t4=t4+1;9 e B5 |- L- h' G. w W4 ?' g; R& Q
end( n/ z) a) Z# ^7 `9 z7 d- M* D
end , Z# b' v9 H, l* {) }& @/ L% u6 o% x- {
t5=1;6 |6 G) y l% |
for i=1:n* j X$ V( W' I R
if B2(i,8)==2 ! V0 a) Y- G& t7 ^3 _ U(1,i)=U(1,i)+DU(t5,1)*U(1,i); %修正后的节点电压幅值 + \$ G4 B5 X+ a" W t5=t5+1; 1 D" j- n. R- k# f& ? end 6 u! `+ N! j! w% [0 ]; [$ D6 B$ G end + f$ N, O3 b& B7 v1 f, h NUM=NUM+1; %迭代次数' O6 A) ^5 N) `3 C7 e# Q+ i; p2 E
if NUM==1 %最大迭代次数判断* h/ I0 Z: E/ _' t( S1 N
break; %超过最大迭代次数,跳出9 v; y% v! P" q$ j0 `5 d! s% I0 J
end ' m: q; v9 N2 g h/ w
end # F' ~0 A9 c2 h2 C3 v! M# Q; ^
r2 |, Q7 b& U$ I%--------------------------------输出模块----------------------------------3 c/ \8 |5 | W p: [+ S7 E( S% x
% l9 K: j6 f6 w; H& A" E* |
disp('------------------------------------------------------------------'); $ P$ G z0 M J1 ~8 P7 M8 ~; mdisp('各节点电压U幅值为(节点从小到大排列):');$ x/ u+ w+ Q* K( o
disp(U); %输出节点电压幅值 & f/ J7 ?- o. P& idisp('------------------------------------------------------------------');) E4 T% [: Z9 ?. S/ L
disp('各节点电压相角为(节点从小到大排列):');0 J* q- V0 T3 x7 z
disp(delta); %输出节点电压相角6 C$ I1 i0 Y1 J( E: `4 J$ k; s$ u
disp('------------------------------------------------------------------');2 c6 L. H. `" a
disp('迭代次数:');6 Q9 R' Q2 S: |
disp(NUM); %输出迭代次数