package holeg.power_flow; import Jama.Matrix; public class AdmittanceMatrix extends ComplexMatrix { public AdmittanceMatrix(int size) { super(size); } public static AdmittanceMatrix build(Bus[] buses, Line[] lines) { AdmittanceMatrix matrix = new AdmittanceMatrix(buses.length); // Convert line admittances to complex numbers ComplexNumber[] y = new ComplexNumber[lines.length]; for (int i = 0; i < lines.length; i++) { Line line = lines[i]; y[i] = (new ComplexNumber(line.R, line.X)).reciprocal(); } for (int i = 0; i < lines.length; i++) { Line line = lines[i]; ComplexNumber value = matrix.get(line.from, line.to).subtract(y[i].multiply(1 / line.a)); matrix.set(line.from, line.to, value); matrix.set(line.to, line.from, value); } for (int i = 0; i < buses.length; i++) { for (int j = 0; j < lines.length; j++) { Line line = lines[j]; ComplexNumber yLine = y[j]; ComplexNumber b = new ComplexNumber(0, line.B_2); ComplexNumber Y = matrix.get(i, i); if (line.from == i) Y = Y.add(yLine.multiply(1 / (line.a * line.a))).add(b); else if (line.to == i) Y = Y.add(yLine).add(b); matrix.set(i, i, Y); } } return matrix; } public Matrix getG() { return getRealMatrix(); } public Matrix getB() { return getImaginaryMatrix(); } }