AdmittanceMatrix.java 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package holeg.power_flow;
  2. import Jama.Matrix;
  3. public class AdmittanceMatrix extends ComplexMatrix {
  4. public AdmittanceMatrix(int size) {
  5. super(size);
  6. }
  7. public static AdmittanceMatrix build(Bus[] buses, Line[] lines) {
  8. AdmittanceMatrix matrix = new AdmittanceMatrix(buses.length);
  9. // Convert line admittances to complex numbers
  10. ComplexNumber[] y = new ComplexNumber[lines.length];
  11. for (int i = 0; i < lines.length; i++) {
  12. Line line = lines[i];
  13. y[i] = (new ComplexNumber(line.R, line.X)).reciprocal();
  14. }
  15. for (int i = 0; i < lines.length; i++) {
  16. Line line = lines[i];
  17. ComplexNumber value = matrix.get(line.from, line.to).subtract(y[i].multiply(1 / line.a));
  18. matrix.set(line.from, line.to, value);
  19. matrix.set(line.to, line.from, value);
  20. }
  21. for (int i = 0; i < buses.length; i++) {
  22. for (int j = 0; j < lines.length; j++) {
  23. Line line = lines[j];
  24. ComplexNumber yLine = y[j];
  25. ComplexNumber b = new ComplexNumber(0, line.B_2);
  26. ComplexNumber Y = matrix.get(i, i);
  27. if (line.from == i)
  28. Y = Y.add(yLine.multiply(1 / (line.a * line.a))).add(b);
  29. else if (line.to == i)
  30. Y = Y.add(yLine).add(b);
  31. matrix.set(i, i, Y);
  32. }
  33. }
  34. return matrix;
  35. }
  36. public Matrix getG() {
  37. return getRealMatrix();
  38. }
  39. public Matrix getB() {
  40. return getImaginaryMatrix();
  41. }
  42. }