程序要求根據已知的電力網的數學模型(節點導納矩陣)及故障點位置,完成該電力系統的對稱短路計算,要求計算出短路電流、短路功率等參數。
function Yshortcircuit(Y)
if nargin<1
xd = [
0 1 0.15j;
0 2 0.08j;
4 0 0.175j;
1 3 0.12j;
2 4 0.08j;
3 4 0.07259j];
Y = Xd2Ybus(xd);
end
slbus = input('請輸入短路節點(默認爲3):');
if isempty(slbus)
slbus = 3;
end
Sb = input('請輸入基準功率(默認爲60)MV·A:');
if isempty(Sb)
Sb = 60;
end
Uav = input('請輸入節點%d的平均額定電壓(默認爲115)kV:');
if isempty(Uav)
Uav = 115;
end
nbus = length(Y(:,1));
Is = zeros(nbus,1);
Yn = gauss(Y,slbus);
Yij = Yn(slbus,slbus);
Is = -1*Yij;
fprintf('短路節點%d起始次暫態電流標幺值:',slbus);
disp(abs(Is));
fprintf('短路節點%d起始次暫態電流有名值(kA):',slbus);
disp(abs(Is*Sb/3^0.5/Uav));
fprintf('節點%d短路時的短路功率爲(MV·A):',slbus);
disp(abs(Is*Sb));
end
function Yn = gauss(Y,retain)%高斯消去法
%時間複雜度(n-1)*(n-2)*(n-2)
nbus = length(Y(1,:));
nr = length(retain);
nlist = 1:nbus;%nlist保存該消去而尚未消去的節點
qlist = nlist;%qlist爲除保留節點外的所有節點集合
for n = 1:nr
temp = find(qlist == retain(n));
qlist(temp) = [];%把將要保留節點置空
end
Yn = Y;
for n = 1:length(qlist)
qb = qlist(n);
temp = find(nlist==qb);
nlist(temp) = [];%把消去的節點從nlist中刪去
Yt = Yn;
for p = nlist
for q = nlist
%P70 (4-14)公式
Yt(p,q) = Yn(p,q)-Yn(p,qb)*Yn(qb,q)/Yn(qb,qb);%修改保留部分元素
end
end
Yt(qb,:) = zeros(1,nbus);%爲保證矩陣階數不變,故不刪除將消去節點所在行列只清零
Yt(:,qb) = zeros(nbus,1);
Yn = Yt;
end
end
function Y = Xd2Ybus(xd)
yd = xd;
yd(:,3) = 1./xd(:,3);
%save yd yd
nbus = max(max(yd(:,1:2)));%找出最大的節點標號
Y = zeros(nbus);%根據節點數量創建零矩陣
for n = 1:nbus
for m = 1:n-1%計算節點導納矩陣的非對角元素
h1 = find(yd(:,1)==m);
h2 = find(yd(:,2)==n);
h = intersect(h1,h2);%找出重複元素
if ~isempty(h)%判斷節點n、m是否有支路直接連接
Y(n,m) = Y(n,m)-yd(h,3);
Y(m,n) = Y(n,m);
end
end
%計算節點導納矩陣的對角元素
h = find(yd(:,1:2)==n);%找出與節點n有支路直接連接的所有支路的導納
[h1,~] = ind2sub([size(yd(:,1)),2],h);
Y(n,n) = sum(yd(h1,3));
end
end