%====================================================================
%====================================================================
%====================================================================
%潮流计算MATLAB 粗略程序
%====================================================================
%====================================================================
%====================================================================
%creat a new_data
t=0;
s=0;
1
r=0;
w=0;
number=input('How many node are there=');
% Convert Pq to a new array
for ii=1:number
if data(ii,4)==1
t=t+1;
for jj=1:14
new_data1(t,jj)=data(ii,jj);
end;
a(1,t)=ii;
s=s+1; end;
%record the number of the PQ node
2
end;
%Convert pv to a new array
for ii=1:number
if data(ii,4)==2
t=t+1;
for jj=1:14
new_data1(t,jj)=data(ii,jj);
end;
a(1,t)=ii;
r=r+1; end;
end;
%Convert set_v to a new array
%record the number of the PV node
3
for ii=1:number
if data(ii,4)==3
t=t+1;
for jj=1:14
new_data1(t,jj)=data(ii,jj);
end;
a(1,t)=ii;
w=w+1;
end;
end;
%creat a new_data2
[x,y]=size(data2)
for ii=1:x
4
for jj=1:2
for mm=1:number
if data2(ii,jj)==a(1,mm)
new_data2(ii,jj)=mm;
end;
end;
end;
end;
for ii=1:x
for jj=3:14
new_data2(ii,jj)=data2(ii,jj);
end;
end;
5
%creat a Y
Y=zeros(number,number);
YY=zeros(number,number);
yy=zeros(number,number);
for ii=1:x
% for jj=1:14
iii=new_data2(ii,1);
jjj=new_data2(ii,2);
if new_data2(ii,5)==2
sub=new_data2(ii,6)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))-new_data2(ii,7)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))*i;
Y(iii,jjj)=-sub./new_data2(ii,14);
YY(iii,jjj)=sub./new_data2(ii,14);
6
Y(jjj,iii)=-sub/new_data2(ii,14);
YY(jjj,iii)=sub./new_data2(ii,14);
yy(iii,jjj)=(1.-new_data2(ii,14))./(new_data2(ii,14).*new_data2(ii,14)).*sub;
yy(jjj,iii)=(new_data2(ii,14)-1)./(new_data2(ii,14)).*sub;
else
Y(iii,jjj)=-new_data2(ii,6)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))+new_data2(ii,7)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))*i;
YY(iii,jjj)=new_data2(ii,6)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))-new_data2(ii,7)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))*i;
Y(jjj,iii)=-new_data2(ii,6)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))+new_data2(ii,7)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))*i;
YY(jjj,iii)=new_data2(ii,6)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))-new_data2(ii,7)./(new_data2(ii,7).*new_data2(ii,7)+new_data2(ii,6).*new_data2(ii,6))*i;
7
yy(iii,jjj)=new_data2(ii,8)./2.*i;
yy(jjj,iii)=new_data2(ii,8)./2.*i;
end;
%end;
end;
for iii=1:number
Y(iii,iii)=0;
end;
%for ii=1:x
% for jj=1:14
for iii=1:number
for jj=1:number
% if iii~=jj
8
Y(iii,iii)=Y(iii,iii)+YY(iii,jj)+yy(iii,jj);
% end;
end;
end;
%creat B, G
for ii=1:number
for jj=1:number
G(ii,jj)= real(Y(ii,jj));
B(ii,jj)= imag(Y(ii,jj));
end;
end;
%creat Initial_P Initial_Q Initial_V
for ii=1:(s+r)
9
set_P(ii,1)=(new_data1(ii,9)-new_data1(ii,7))./100;
end;
for ii=1:s;
set_Q(ii,1)=(new_data1(ii,10)-new_data1(ii,8))./100;
end;
for ii=1:r
set_V(ii,1)=new_data1(ii+s,12).*new_data1(ii+s,12);%try to modify for sike of correcting
end;
Initial_p_q_v=[set_P;set_Q;set_V];
disp(Initial_p_q_v);
%creat Initial_e,Initial_f
for ii=1:number-1
e(ii,1)=1;
10
f(ii,1)=0.0;%change f to test used to be 1.0
end;
e(number,1)=new_data1(number,12);
f(number,1)=0;
% e(64,1)=0.88;%test 118ieee
% f(64,1)=0.39395826829394;
% f(14,1)=0;
% e(10,1)=1.045;
%e(11,1)=1.01;
%e(12,1)=1.07;
%e(13,1)=1.09;
%////////////////////////////////////////////////////////////////////
%////////////////////////////////////////////////////////////////////
11
%////////////////////////////////////////////////////////////////////
%////////////////////////////////////////////////////////////////////
% Start NEWTOWN CALULATION
for try_time=1:25
%Creat every node consume P Q and U
n=s;
m=r;
for ii=1:(n+m)
sum1=0;
for jj=1:(n+m+1)
sum1=sum1+e(ii,1).*(G(ii,jj).*e(jj,1)-B(ii,jj).*f(jj,1))+f(ii,1).*(G(ii,jj).*f(jj,1)+B(ii,jj).*e(jj,1));
end;
p(ii,1)=sum1;
12
end;
for ii=1:n
sum2=0;
for jj=1:(n+m+1)
sum2=sum2+f(ii,1).*(G(ii,jj).*e(jj,1)-B(ii,jj).*f(jj,1))-e(ii,1).*(G(ii,jj).*f(jj,1)+B(ii,jj).*e(jj,1));
end;
q(ii,1)=sum2;
end;
disp('q=');
disp(q);
u=zeros((n+m),1);
for ii=(n+1):(n+m)
u(ii,1)=e(ii,1).*e(ii,1)+f(ii,1).*f(ii,1);
13
end;
for ii=n+1:(n+m)
extra_u((ii-n),1)=u(ii,1);
end;
disp('extra_u=');
disp(extra_u);
sum=[p;q;extra_u];
disp(sum)
disp(s);
disp(p);
%creat Jacobian
disp(n);
disp(m);
14
for ii=1:(n+m)
for jj=1:(n+m)
if (ii~=jj)
PF(ii,jj)=B(ii,jj).*e(ii,1)-G(ii,jj).*f(ii,1);
PE(ii,jj)=-G(ii,jj).*e(ii,1)-B(ii,jj).*f(ii,1);
else
ss=0;
qq=0;
for num=1:(n+m+1)
15
ss=ss+G(ii,num).*f(num,1)+B(ii,num).*e(num,1);
qq=qq+G(ii,num).*e(num,1)-B(ii,num).*f(num,1);
end;
PF(ii,jj)=-ss+B(ii,jj).*e(ii,1)-G(ii,jj).*f(ii,1);%TEST+1
PE(ii,jj)=-qq-G(ii,jj).*e(ii,1)-B(ii,jj).*f(ii,1);%TEST+1
end;
end;
end;
copy=3.14159;
disp('================copy================')
for ii=1:n
16
for jj=1:m+n
if (ii~=jj)
QE(ii,jj)=B(ii,jj).*e(ii,1)-G(ii,jj).*f(ii,1);%TEST+1
QF(ii,jj)=G(ii,jj).*e(ii,1)+B(ii,jj).*f(ii,1);%TEST+1
else
ss=0;
qq=0;
for num=1:(n+m+1)
ss=ss+G(ii,num).*f(num,1)+B(ii,num).*e(num,1);
17
qq=qq+G(ii,num).*e(num,1)-B(ii,num).*f(num,1);
end;
QF(ii,jj)=-qq+G(ii,jj).*e(ii,1)+B(ii,jj).*f(ii,1);%TEST+1
QE(ii,jj)=ss+B(ii,jj).*e(ii,1)-G(ii,jj).*f(ii,1);%TEST+1
end;
end;
end;
%disp('QF');
%disp(QF);
%disp('QE');
18
%disp(QE);
UE=zeros((n+m),(n+m));
UF=zeros((n+m),(n+m));
for ii=n+1:n+m
for jj=1:(n+m)
if (ii~=jj)
UE(ii,jj)=0;
UF(ii,jj)=0;
else
ss=0;
qq=0;
19
for num=1:(n+m+1)
ss=ss+G(ii,num).*f(num,1)+B(ii,num).*e(num,1);
qq=qq+G(ii,num).*e(num,1)-B(ii,num).*f(num,1);
end;
UF(ii,jj)=-2.*f(ii,1);
UE(ii,jj)=-2.*e(ii,1);
end;
end;
end;
for ii=(n+1):(n+m)
for jj=1:(n+m)
20
extra_UE((ii-n),jj)=UE(ii,jj);
extra_UF((ii-n),jj)=UF(ii,jj);
end;
end;
%disp('extra_UE');
%disp(extra_UE);
%disp('extra_Uf');
%disp(extra_UF);
Jacobian=[PF,PE;QF,QE;extra_UF,extra_UE];
%disp('Jacobian=');
%disp(Jacobian);
%creat substract result
substract_result=Initial_p_q_v-sum;
21
%disp('substract_result');
%disp(substract_result);
%calculate delta_f_e
delta_f_e=-inv(Jacobian)*substract_result;
%disp(delta_f_e);
for ii=1:number-1;
f(ii,1)=f(ii,1)+delta_f_e(ii,1);
e(ii,1)=e(ii,1)+delta_f_e(ii+number-1,1);
end;
if max(substract_result)<1e-4
break;
end ;
end;
22
%disp('substract_result');
%disp(substract_result);
%disp('e=');
%disp(e);
%disp('f=');
%disp(f);
for ii=1:number
uuu(ii,1)= e(ii,1).*e(ii,1)+f(ii,1).*f(ii,1);
U_RESULT(ii,1)=sqrt(uuu(ii,1));
end;
for ii=1:number
for jj=1:number
if ii==a(1,jj)
23
Old_Uresult(ii,1)=U_RESULT(jj,1)
end;
end;
end;
for ii=1:number
Old_Uresult(ii,2)=ii;
end;
%disp('U_result');
%disp(U_RESULT);
disp('=====================================');
disp('The last result is :')
disp('===========U===================BUS-NO.');
disp('U=')
24
disp(Old_Uresult);
%calculate the angle
PI=3.141592
for ii=1:number
Angle(ii,1)=atan(f(ii,1)./e(ii,1))./PI*180;
end;
for ii=1:number
for jj=1:number
if ii==a(1,jj)
Old_Angle(ii,1)=Angle(jj,1);
Old_Angle(ii,2)=ii;
end;
end;
25
end;
disp('=======Angle===================BUS-NO.');
disp('Angle=');
disp(Old_Angle);
disp('=====Try-times=======================')
disp('Try-times=')
disp(try_time);
%disp('p====================');
%disp(p);
% for jj=1:number
% if a(1,jj)==118
% man=jj
% end;
26
%end;
%disp('man=========');
%disp(man)
sum4=0;
for jj=1:number
Y_conj(number,jj)=conj(Y(number,jj));
sum4=sum4+Y_conj(number,jj).*(e(jj,1)-f(jj,1)*i);
end;
%sum4=sum4*e(number,1);
disp('===============Balance P Q=========BUS-NO');
%disp(sum4);
Blance_Q(1,1)=imag(sum4)*100;
Blance_Q(1,2)=a(1,number);
27
Blance_P(1,1)=real(sum4)*100;
Blance_P(1,2)=a(1,number);
disp('Q Of the Balance node= ');
disp(Blance_Q);
disp('P Of the Balance node= ')
disp(Blance_P);
disp('=================================BUS-NO');
%calculate the Q of the P-V node
Q_PV_node=zeros(number,2);
Y_conj=conj(Y);
for ii=(s+1):(s+r)
for jj=1:number
28
Q_PV_node(ii,1)=Q_PV_node(ii,1)+(e(ii,1)+f(ii,1)*i).*(Y_conj(ii,jj).*(e(jj,1)-f(jj,1)*i));
end;
end;
for ii=(s+1):(s+r);
Q_PV_node(ii,1)=Q_PV_node(ii,1).*100+new_data1(ii,8)*i;
end;
disp('This program is from blog.sina.com.cn/breadwinner') ;
for ii=1:number
old_number=a(1,ii);
Q_PV_node_old(old_number,1)=Q_PV_node(ii,1);
end;
for ii=1:number
Q_PV_node_old(ii,1)=imag(Q_PV_node_old(ii,1));
29
end;
for ii=1:number
Q_PV_node_old(ii,2)=ii;
end;
disp('Q gen=');
disp(Q_PV_node_old);
30
因篇幅问题不能全部显示,请点此查看更多更全内容