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 -Nij
X2=B(i,j1)*e(i)-G(i,j1)*f(i); % dP/df=dQ/de -Hij
X3=X2; % X2=dp/df X3=dQ/de -Lij
X4=-X1; % X1=dP/de X4=dQ/df -Jij
p=2*i-1;q=2*j1-1;
J(p,q)=X1;J(p,N)=DP;m=p+1; % X1=dP/de J(m,N)=DP节点有功功率差
J(m,q)=X3;J(m,N)=DQ;q=q+1; % X3=dQ/de J(p,N)=DQ节点无功功率差
J(p,q)=X2;J(m,q)=X4; % 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)=X1;J(p,N)=DP; %扩展列△P=-Nij m=p+1;
J(m,q)=X3;q=q+1;J(p,q)=X2;J(m,N)=DQ; %扩展列△Q=-Hij
J(m,q)=X4;
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)=X1;J(p,N)=DP; % PV节点有功误差 m=p+1;
J(m,q)=X5;J(m,N)=DV;q=q+1;J(p,q)=X2; % PV节点电压误差 J(m,q)=X6; 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)=X1;J(p,N)=DP; %PV节点有功误差 m=p+1;
J(m,q)=X5;J(m,N)=DV;q=q+1;J(p,q)=X2; % PV节点电压误差 J(m,q)=X6; end end end end
end
%求JACOB矩阵
disp('JACOB矩阵 J='); disp(J)
%===== 以上为求雅可比矩阵的各个元素及扩展列的功率差或电压差 ========
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 %若已到最后一行 break; end %================== 前代运算 ==================================
for k3=k1:N0 % 从k+1行到2*n最后一行 for k2=k1:N1 % 从k+1列到扩展列消去k+1行后各行下三角元素
J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算 end %用当前行K2列元素减去当前行k列元素乘以第k行K2列元素
J(k3,k)=0; %当前行第k列元素已消为0 end
else %是第三行k=3 %====================== 第三行k=3的前代运算 ========================
for k3=k1:N0 %从第四行到2n行(最后一行)
for k2=k1:N1 %从第四列到2n+1列(即扩展列) J(k3,k2)=J(k3,k2)-J(k3,k)*J(k,k2);%消去运算(当前行3列元素消为0)
end %用当前行K2列元素减去当前行3列元素乘以第三行K2列元素 J(k3,k)=0; %当前行第3列元素已消为0
end
end end
%====上面是用线性变换方式高斯消去法将Jacobi矩阵化成单位矩阵===== 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; %不满足要求的节点数加1 end end
ICT2(a)=IT2; %不满足要求的节点数 ICT1=ICT1+1; %迭代次数 end
%用高斯消去法解\disp('迭代次数:'); disp(ICT1);
disp('没有达到精度要求的个数:'); disp(ICT2); for k=1:n
V(k)=sqrt(e(k)^2+f(k)^2); %计算各节点电压的模值
sida(k)=atan(f(k)./e(k))*180./pi; %计算各节点电压的角度 E(k)=e(k)+f(k)*j; %将各节点电压用复数表示 end
%=============== 计算各输出量 =========================== disp('各节点的实际电压标幺值E为(节点号从小到大排列):'); disp(E); %显示各节点的实际电压标幺值E用复数表示
disp('-----------------------------------------------------'); disp('各节点的电压大小V为(节点号从小到大排列):');
disp(V); %显示各节点的电压大小V的模值
disp('-----------------------------------------------------'); disp('各节点的电压相角sida为(节点号从小到大排列):');
disp(sida); %显示各节点的电压相角
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); %计算各节点的功率 S = 电压 X 注入电流的共轭值
end
disp('各节点的功率S为(节点号从小到大排列):');
disp(S); %显示各节点的注入功率
disp('-----------------------------------------------------'); disp('各条支路的首端功率Si为(顺序同您输入B1时一致):'); for i=1:nl
p=B1(i,1);q=B1(i,2); if B1(i,6)==0
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4))+(conj(E(p)*B1(i,5))...
-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5)))); Siz(i)=Si(p,q); else
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4))+(conj(E(p)./B1(i,5))...
-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5)))); Siz(i)=Si(p,q); end
disp(Si(p,q)); SSi(p,q)=Si(p,q);
ZF=['S(',num2str(p),',',num2str(q),')=',num2str(SSi(p,q))]; disp(ZF);
disp('-----------------------------------------------------');
end
disp('各条支路的末端功率Sj为(顺序同您输入B1时一致):');
for i=1:nl
p=B1(i,1);q=B1(i,2); if B1(i,6)==0