?? nrflow.m
字號:
%牛頓——拉夫遜法進行潮流計算
%n=input('請輸入節點數:n=');
%nl=input('請輸入支路數:nl=');
%isb=input('請輸入平衡母線節點號:isb=');
%pr=input('請輸入誤差精度:pr=');
%iternu=input('請輸入迭代次數:iternu=');
%B1=input('請輸入由支路參數形成的矩陣: B1=');
%B2=input('請輸入各節點參數形成的矩陣: B2=');
%以下為從數據文件讀入數據
clc %清屏
clear %從內存中清除變量和函數
fid = fopen('flowre1.dat','r');
n = fscanf(fid,'%d',[1,1]) %節點數
n1= fscanf(fid,'%d',[1,1]) %支路數
isb=fscanf(fid,'%d',[1,1]) %平衡母線節點號
pr=fscanf(fid,'%g',[1,1]) %誤差精度
iternu=fscanf(fid,'%d',[1,1])%最大迭代次數
B=fscanf(fid,'%g',[7,n]); %支路數據
BP=fscanf(fid,'%g',[8,n1]); %節點數據
B=B'
BP=BP'
B1=zeros(n1,7);B2=zeros(n,8);%B1支路參數形成的矩陣 B2各節點參數形成的矩陣
for i=1:n1
k=1;
for z=1:6;
if (z==3)
B1(i,z)=complex(B(i,z),B(i,z+1));k=z+1;
else
if (z==4)
B1(i,z)=complex(0,B(i,k));
else
B1(i,z)=B(i,k);
end
end
k=k+1;
end
end
for i=1:n
k=1;
for z=1:6;
if (z==1)
B2(i,z)=complex(BP(i,z),BP(i,z+1));k=z+2;
else
if (z==2)
B2(i,z)=complex(BP(i,k),BP(i,k+1));k=k+2;
else
B2(i,z)=BP(i,k); k=k+1;
end
end
end
end
fclose(fid);%關閉數據原文件
Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);%初始化數組
delta=zeros(1,n);S1=zeros(n1);
%求導納矩陣
for i=1:n1
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else
p=B1(i,2);q=B1(i,1);
end
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5));
Y(q,p)=Y(p,q);
Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2;
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;
end
disp('導納矩陣 Y=');
disp(Y)
G=real(Y);B=imag(Y);
fid=fopen('result.dat','a');
fprintf(fid,'\n導納矩陣G 實部')
fprintf(fid,'\n%g %g %g %g %g',G)
fprintf(fid,'\n導納矩陣B 虛部')
fprintf(fid,'\n%g %g %g %g %g',B)
for i=1:n
e(i)=real(B2(i,3));
f(i)=imag(B2(i,3));
V(i)=B2(i,4);
end
for i=1:n
S(i)=B2(i,1)-B2(i,2);%節點注入功率=發電機注入節點的功率減去節點負荷功率
B(i,i)=B(i,i)+B2(i,5);
end
P=real(S);Q=imag(S);
ICT1=0;IT2=1;N0=2*n;N=N0+1;a=0;overflag=0;
while IT2~=0
IT2=0;a=a+1;
for i=1:n
if i~=isb%除平衡節點外
C(i)=0;D(i)=0;
for j1=1:n
C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);
D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);
end
P1=C(i)*e(i)+f(i)*D(i);
Q1=C(i)*f(i)-e(i)*D(i);
%求'P,Q'
V2=e(i)^2+f(i)^2;
if B2(i,6)~=3
DP=P(i)-P1;%有功功率的誤差
DQ=Q(i)-Q1;%無功功率的誤差
for j1=1:n
if j1~=isb&j1~=i
X1=-G(i,j1)*e(i)-B(i,j1)*f(i);
X2=B(i,j1)*e(i)-G(i,j1)*f(i);
X3=X2;
X4=-X1;
p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;
J(m,q)=X2;
elseif j1==i&j1~=isb
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);
X3=D(i)+B(i,i)*e(i)-G(i,i)*f(i);
X4=-C(i)+G(i,i)*e(i)+B(i,i)*f(i);
p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;
J(m,q)=X2;
end
end
else
DP=P(i)-P1;
DV=V(i)^2-V2;
for j1=1:n
if j1~=isb&j1~=i
X1=-G(i,j1)*e(i)-B(i,j1)*f(i);
X2=B(i,j1)*e(i)-G(i,j1)*f(i);
X5=0;X6=0;
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;
J(m,q)=X2;
elseif j1==i&j1~=isb
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);
X5=-2*e(i);
X6=-2*f(i);
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;
J(m,q)=X2;
end
end
end
end
end
%求雅可比矩陣
for k=3:N0
k1=k+1;N1=N;
for k2=k1:N1
J(k,k2)=J(k,k2)./J(k,k);
end
J(k,k)=1;
if k~=3
k4=k-1;
for k3=3:k4
for k2=k1:N1
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);
end
J(k3,k)=0;
end
if k==N0
break;
end
for k3=k1:N0
for k2=k1:N1
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);
end
J(k3,k)=0;
end
else
for k3=k1:N0
for k2=k1:N1
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);
end
J(k3,k)=0;
end
end
end
for k=3:2:N0-1
L=(k+1)./2;
e(L)=e(L)-J(k,N);
k1=k+1;
f(L)=f(L)-J(k1,N);
end
for k=3:N0
DET=abs(J(k,N));
if DET>=pr
IT2=IT2+1;
end
end
ICT2(a)=IT2;
ICT1=ICT1+1;
if ICT1>iternu
overflag=1;
break;
end
end
%用高斯消去法解"w=-J*V"
if overflag==0
disp('迭代次數:');
disp(ICT1);
disp('沒有達到精度要求的個數:');
disp(ICT2);
for k=1:n
V(k)=sqrt(e(k)^2+f(k)^2);
delta(k)=atan(f(k)./e(k))*180./pi;
E(k)=e(k)+f(k)*j;
end
disp('各節點的實際電壓標幺值E為(節點號從小到大排列):');
disp(E);
disp('各節點的電壓大小V為(節點號從小到大排列):');
disp(V);
fprintf(fid,'\n各節點的電壓大小V為(節點號從小到大排列):');
fprintf(fid,'\n%g %g %g %g %g ',V);
disp('各節點的電壓相角delta為(節點號從小到大排列):');
disp(delta);
fprintf(fid,'\n各節點的電壓相角delta為(節點號從小到大排列):');
fprintf(fid,'\n%g %g %g %g %g ',delta);
for p=1:n
C(p)=0;
for q=1:n
C(p)=C(p)+conj(Y(p,q))*conj(E(q));
end
S(p)=E(p)*C(p);
end
disp('各節點的功率S為(節點號從小到大排列):');
disp(S);
disp('各條支路的首端功率Si為(順序同您輸入B1時一致):');
for i=1:n1
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else
p=B1(i,2);q=B1(i,1);
end
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5))));
disp(Si(p,q));
end
disp('各條支路的末端功率Sj為(順序同您輸入B1時一致):');
for i=1:n1
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else
p=B1(i,2);q=B1(i,1);
end
Sj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(conj(E(q)./B1(i,5))-conj(E(p)))*conj(1./(B1(i,3)*B1(i,5))));
disp(Sj(q,p));
end
disp('各條支路的功率損耗DS為(順序同您輸入B1時一致):');
for i=1:n1
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else
p=B1(i,2);q=B1(i,1);
end
DS(i)=Si(p,q)+Sj(q,p);
disp(DS(i));
end
fclose(fid);
else
disp('在最大迭代次數范圍內不收斂');
fclose(fid);
end
disp(J)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -