%本程序的功能是用牛顿——拉夫逊法进行潮流计算
% B1矩阵:1、支路首端号;2、末端号;3、支路阻抗Rij+jXij;4、支路对地电纳Yii
% 5、支路的变比K;6、支路首端处于K侧为1,1侧为0
% B2矩阵:1、该节点发电机功率;2、该节点负荷功率;3、节点电压初始值
% 4、PV节点电压V的给定值;5、节点所接的无功补偿设备的容量
% 6、节点分类标号:1为平衡节点(应为1号节点);2为PQ节点;
% 3为PV节点;
clear;
n=10;%input('请输入节点数:n=');
nl=10;%input('请输入支路数:nl=');
isb=1;%input('请输入平衡母线节点号:isb=');
pr=0.00001;%input('请输入误差精度:pr=');
B1=[1 2 0.03512+0.08306i 0.13455i 1 0;
2 3 0.0068+0.18375i 0 1.02381 1;
1 4 0.05620+0.13289i 0.05382i 1 0;
4 5 0.00811+0.24549i 0 1.02381 1;
1 6 0.05620+0.13289i 0.05382i 1 0;
4 6 0.04215+0.09967i 0.04037i 1 0;
6 7 0.0068+0.18375i 0 1.02381 1;
6 8 0.02810+0.06645i 0.10764i 1 0;
8 10 0.00811+0.24549i 0 1 1;
8 9 0.03512+0.08306i 0.13455i 1 0];
B2=[0 0 1.1 1.1 0 1;
0 0 1 0 0 2;
0 0.343+0.21256i 1 0 0 2;
0 0 1 0 0 2;
0 0.204+0.12638i 1 0 0 2;
0 0 1 0 0 2;
0 0.306+0.18962i 1 0 0 2;
0 0 1 0 0 2;
0.5 0 1.1 1.1 0 3;
0 0.343+0.21256i 1 0 0 2];
ILP=zeros(nl,1); %存放支路电流幅值
%ILC=zeros(nl,10); %存放支路电流对节点注入有功的灵敏度系数
% for kk=1:11
% B2(3,1)=B2(3,1)+(kk-1)*0.05; %节点3有功注入按1%递增,考察支路电流变化
%input('请输入各节点参数形成的矩阵: B2=');
Y=zeros(n); %n*n节点导纳矩阵
e=zeros(1,n); %节点电压向量实部
f=zeros(1,n); %节点电压向量虚部
V=zeros(1,n); %节点电压向量幅值
sida=zeros(1,n); %节点电压向量相角
S=zeros(1,n); %节点注入功率
S1=zeros(nl); %支路首端功率
% % %---------------------------------------------------
for i=1:nl %支路数
if B1(i,6)==0 %左节点处于1侧
p=B1(i,1);q=B1(i,2);
else %左节点处于K侧
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; %对角元K侧
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2; %对角元1侧
end
%求导纳矩阵
disp('导纳矩阵 Y=');
disp(Y)
%----------------------------------------------------------
G=real(Y);B=imag(Y); %分解出导纳阵的实部和虚部
for i=1:n %给定各节点初始电压的实部和虚部
e(i)=real(B2(i,3));
f(i)=imag(B2(i,3));
V(i)=B2(i,4); %PV节点电压给定模值
end
for i=1:n %给定各节点注入功率
S(i)=B2(i,1)-B2(i,2); %i节点注入功率SG-SL
B(i,i)=B(i,i)+B2(i,5); %i节点无功补偿量
end
%===================================================================
P=real(S);Q=imag(S); %分解出各节点注入的有功和无功功率
ICT1=0;IT2=1;N0=2*n;N=N0+1;a=0; %迭代次数ICT1、a;不满足收敛要求的节点数IT2
while IT2~=0 % N0=2*n 雅可比矩阵的阶数;N=N0+1扩展列
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);%Σ(Gij*ej-Bij*fj)
D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);%Σ(Gij*fj+Bij*ej)
end
P1=C(i)*e(i)+f(i)*D(i);%节点功率P计算eiΣ(Gij*ej-Bij*fj)+fiΣ(Gij*fj+Bij*ej)
Q1=C(i)*f(i)-e(i)*D(i);%节点功率Q计算fiΣ(Gij*ej-Bij*fj)-eiΣ(Gij*fj+Bij*ej)
%求i节点有功和无功功率P',Q'的计算值
V2=e(i)^2+f(i)^2; %电压模平方
%========= 以下针对非PV节点来求取功率差及Jacobi矩阵元素 =========
if B2(i,6)~=3 %非PV节点
DP=P(i)-P1; %节点有功功率差
DQ=Q(i)-Q1; %节点无功功率差
%=============== 以上为除平衡节点外其它节点的功率计算 =================
%================= 求取Jacobi矩阵 ===================
for j1=1:n
if j1~=isb&&j1~=i %非平衡节点&非对角元
X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % dP/de=-dQ/df
X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df=dQ/de
X3=X2; % X2=dp/df X3=dQ/de
X4=-X1; % X1=dP/de X4=dQ/df
p=2*i-1;q=2*j1-1;
J(p,q)=X3;J(p,N)=DQ;m=p+1; % X3=dQ/de J(p,N)=DQ节点无功功率差
J(m,q)=X1;J(m,N)=DP;q=q+1; % X1=dP/de J(m,N)=DP节点有功功率差
J(p,q)=X4;J(m,q)=X2; % X4=dQ/df X2=dp/df
elseif j1==i&&j1~=isb %非平衡节点&对角元
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df
X3=D(i)+B(i,i)*e(i)-G(i,i)*f(i); % dQ/de
X4=-C(i)+G(i,i)*e(i)+B(i,i)*f(i);% dQ/df
p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;%扩展列△Q
m=p+1;
J(m,q)=X1;q=q+1;J(p,q)=X4;J(m,N)=DP;%扩展列△P
J(m,q)=X2;
end
end
else
%=============== 下面是针对PV节点来求取Jacobi矩阵的元素 ===========
DP=P(i)-P1; % PV节点有功误差
DV=V(i)^2-V2; % PV节点电压误差
for j1=1:n
if j1~=isb&&j1~=i %非平衡节点&非对角元
X1=-G(i,j1)*e(i)-B(i,j1)*f(i); % dP/de
X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df
X5=0;X6=0;
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV; % PV节点电压误差
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6; % PV节点有功误差
J(m,q)=X2;
elseif j1==i&&j1~=isb % 非平衡节点&对角元
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);% dP/de
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);% dP/df
X5=-2*e(i);
X6=-2*f(i);
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV; % PV节点电压误差
m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6; % PV节点有功误差
J(m,q)=X2;
end
end
end
end
end
%========= 以上为求雅可比矩阵的各个元素及扩展列的功率差或电压差 =====================
for k=3:N0 % N0=2*n (从第三行开始,第一、二行是平衡节点)
k1=k+1;N1=N; % N=N0+1 即 N=2*n+1扩展列△P、△Q 或 △U
for k2=k1:N1 % 从k+1列的Jacobi元素到扩展列的△P、△Q 或 △U
J(k,k2)=J(k,k2)./J(k,k);% 用K行K列对角元素去除K行K列后的非对角元素进行规格化
end
J(k,k)=1; % 对角元规格化K行K列对角元素赋1
%==================== 回代运算 =======================================
if k~=3 % 不是第三行 k > 3
k4=k-1;
for k3=3:k4 % 用k3行从第三行开始到当前行的前一行k4行消去
for k2=k1:N1 % k3行后各行上三角元素
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算(当前行k列元素消为0)
end %用当前行K2列元素减去当前行k列元素乘以第k行K2列元素
J(k3,k)=0; %当前行第k列元素已消为0
end
if k==N0 %若已到最后一行
评论0