Generalized Y-Bus Matrix Formulation
% Ritesh-25MT0416
% Generalized Y-Bus Formation Script
clear; clc;
% Defining Transmission Line Data
% Format per row: [FromBus ToBus R(pu) X(pu) B(pu)
tap_ratio]
linedata = [
1 2 0.01938 0.05917 0.0528 1;
1 5 0.05403 0.22304 0.0492 1;
2 3 0.04699 0.19797 0.0438 1;
2 4 0.05811 0.17632 0.0374 1;
2 5 0.05695 0.17388 0.0340 1;
3 4 0.06701 0.17103 0.0346 1;
4 5 0.01335 0.04211 0.0128 1;
4 7 0.0 0.20912 0.0 0.978;
4 9 0.0 0.55618 0.0 0.969;
5 6 0.0 0.25202 0.0 0.932;
6 11 0.09498 0.19890 0.0 1;
6 12 0.12291 0.25581 0.0 1;
6 13 0.06615 0.13027 0.0 1;
7 8 0.0 0.17615 0.0 1;
7 9 0.0 0.11001 0.0 1;
9 10 0.03181 0.08450 0.0 1;
9 14 0.12711 0.27038 0.0 1;
10 11 0.08205 0.19207 0.0 1;
12 13 0.22092 0.19988 0.0 1;
13 14 0.17093 0.34802 0.0 1
];
% Asking user for desired number of buses
nb = input('Enter total number of buses to consider: ');
% Keeping only lines connected to these buses
connect = linedata(:,1) <= nb & linedata(:,2) <= nb;
ldata = linedata(connect,:);
% Total buses in system
nBus = max(max(ldata(:,1:2)));
if nb > nBus || nb < 1 % Throw error if invalid input for buses
error('Invalid number of buses!');
end
% Initialize Ybus
Ybus = zeros(nBus);
% Build Ybus from line data
for k = 1:size(ldata,1)
p = ldata(k,1); % from bus
q = ldata(k,2); % to bus
R = ldata(k,3);
X = ldata(k,4);
Bc = ldata(k,5); % line charging
tap = ldata(k,6);
if tap == 0
tap = 1; % default tap
end
z = R + 1i*X;
y = 1/z;
B = 1i*Bc;
Ybus(p,q) = Ybus(p,q) - y/tap;
Ybus(q,p) = Ybus(p,q);
Ybus(p,p) = Ybus(p,p) + y/(tap^2) + B;
Ybus(q,q) = Ybus(q,q) + y + B;
end
disp('Initial Ybus Matrix:');
disp(Ybus);
% Add Transformer data
answ1 = input('Do you want to add transformer data? (1=Yes,
0=No): ');
if answ1 == 1
fb = input('Enter from bus for transformer: ');
tb = input('Enter to bus for transformer: ');
yt = input('Enter transformer admittance eg.complex(0,-4):
');
tr = input('Enter tap ratio: ');
% Update Ybus
Ybus(fb,fb) = Ybus(fb,fb) - yt + yt/(tr^2);
Ybus(tb,tb) = Ybus(tb,tb) - yt + yt;
Ybus(fb,tb) = Ybus(fb,tb) + yt - yt/tr;
Ybus(tb,fb) = Ybus(fb,tb);
disp('Ybus after transformer addition:\n');
disp(Ybus);
end
if answ1 == 0
fprintf('');
end
% Option for adding Mutual Coupling
answ2 = input('Do you want to add mutual coupling? (1=Yes,
0=No): ');
if answ2 == 1
m1 = input('Enter first bus for mutual coupling: ');
m2 = input('Enter to bus for mutual coupling: ');
y_mut = input('Enter mutual coupling admittance
eg.complex(0,-4): ');
Ybus(m1,m2) = Ybus(m1,m2) + y_mut;
Ybus(m2,m1) = Ybus(m2,m1) + y_mut;
disp('Ybus with mutual coupling:');
disp(Ybus);
end
if answ2 == 0
disp('');
end
% Option for Regulating Transformers
answ = input('Do you want to add regulating transformers?
(1=Yes, 2=No): ');
if answ == 1
nreg = input('Enter number of regulating transformers: ');
for m = 1:nreg
disp(['Enter data for regulating transformer #'
num2str(m) ' as [from, to, R, X, B/2, tap]:']);
d = input('');
ldata = [ldata; d];
end
end
if answ == 0
disp('');
end
% Rebuild final Ybus from updated line data
nBus = max(max(ldata(:,1:2)));
Ybus = zeros(nBus);
for k = 1:size(ldata,1)
p = ldata(k,1);
q = ldata(k,2);
R = ldata(k,3);
X = ldata(k,4);
Bc = ldata(k,5);
tap = ldata(k,6);
if tap == 0, tap = 1; end
z = R + 1i*X;
y = 1/z; B = 1i*Bc;
Ybus(p,q) = Ybus(p,q) - y/tap;
Ybus(q,p) = Ybus(p,q);
Ybus(p,p) = Ybus(p,p) + y/(tap^2) + B;
Ybus(q,q) = Ybus(q,q) + y + B;
end
disp('Final Ybus Matrix:');
disp(Ybus);
COMMAND WINDOW OUTPUT
CASE 1: When adding transformer data, mutual coupling and another transformer
into the given data.
Enter total number of buses to consider: 5
Initial Ybus Matrix:
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i
0.0000 + 0.0000i -1.1350 + 4.7819i 3.1210 - 9.7723i -1.9860 + 5.0688i
0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -1.9860 + 5.0688i 10.5130 -31.6784i -
6.8410 +21.5786i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -30.9115i
Do you want to add transformer data? (1=Yes, 0=No): 1
Enter from bus for transformer: 3
Enter to bus for transformer: 4
Enter transformer admittance eg.complex(0,-4): complex(0,-3)
Enter tap ratio: 0.9887
Ybus after transformer addition:\n
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i
0.0000 + 0.0000i -1.1350 + 4.7819i 3.1210 - 9.8412i -1.9860 + 5.1031i
0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -1.9860 + 5.1031i 10.5130 -31.6784i -
6.8410 +21.5786i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -30.9115i
Do you want to add mutual coupling? (1=Yes, 0=No): 1
Enter first bus for mutual coupling: 3
Enter to bus for mutual coupling: 4
Enter mutual coupling admittance eg.complex(0,-4): complex(0,-5)
Ybus with mutual coupling:
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i
0.0000 + 0.0000i -1.1350 + 4.7819i 3.1210 - 9.8412i -1.9860 + 0.1031i
0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -1.9860 + 0.1031i 10.5130 -31.6784i -
6.8410 +21.5786i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -30.9115i
Do you want to add regulating transformers? (1=Yes, 2=No): 1
Enter number of regulating transformers: 1
Enter data for regulating transformer #1 as [from, to, R, X, B/2, tap]:
[3,4,0.8651,0.3397,0.6547,0.9877]
Final Ybus Matrix:
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i
0.0000 + 0.0000i -1.1350 + 4.7819i 4.1476 - 9.5207i -3.0000 + 5.4670i
0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -3.0000 + 5.4670i 11.5145 -31.4170i -
6.8410 +21.5786i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -30.9115i
CASE 2: When only working on transformer data, not adding any mutual coupling or
another transformer into the given data.
Enter total number of buses to consider: 6
Initial Ybus Matrix:
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i 0.0000 + 0.0000i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i 0.0000 + 0.0000i
0.0000 + 0.0000i -1.1350 + 4.7819i 3.1210 - 9.7723i -1.9860 + 5.0688i
0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -1.9860 + 5.0688i 10.5130 -31.6784i -
6.8410 +21.5786i 0.0000 + 0.0000i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -35.4795i 0.0000 + 4.2574i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 4.2574i 0.0000 - 3.9679i
Do you want to add transformer data? (1=Yes, 0=No): 0
Do you want to add mutual coupling? (1=Yes, 0=No): 0
Do you want to add regulating transformers? (1=Yes, 2=No): 0
Final Ybus Matrix:
6.0250 -19.3961i -4.9991 +15.2631i 0.0000 + 0.0000i 0.0000 + 0.0000i -
1.0259 + 4.2350i 0.0000 + 0.0000i
-4.9991 +15.2631i 9.5213 -30.1867i -1.1350 + 4.7819i -1.6860 + 5.1158i -
1.7011 + 5.1939i 0.0000 + 0.0000i
0.0000 + 0.0000i -1.1350 + 4.7819i 3.1210 - 9.7723i -1.9860 + 5.0688i
0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i -1.6860 + 5.1158i -1.9860 + 5.0688i 10.5130 -31.6784i -
6.8410 +21.5786i 0.0000 + 0.0000i
-1.0259 + 4.2350i -1.7011 + 5.1939i 0.0000 + 0.0000i -6.8410 +21.5786i
9.5680 -35.4795i 0.0000 + 4.2574i
0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i
0.0000 + 4.2574i 0.0000 - 3.9679i