public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Uj) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qji = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((Qij - 1 / (1 - X * B) * Qji + 1 / R * (-(X - B / 2 * (Math.Pow(X, 2) - Math.Pow(R, 2))) * Pij + (X - B / 2 * (Math.Pow(X, 2) + Math.Pow(R, 2))) * Pji)) * 2 * (1 - X * B) / B); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Pji, Qji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qji = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = 1 / (1 - X * B) * (Qji + Math.Pow(Uj, 2)) - 1 / R * (-(X - B / 2 * (Math.Pow(X, 2) - Math.Pow(R, 2))) * Pij + (X - B / 2 * (Math.Pow(X, 2) + Math.Pow(R, 2))) * Pji); return(res); } var arguments = new List <EquationArgument>() { Pij, Uj, Pji, Qji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qij = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = (Qij - 1 / (1 - X * B) * Math.Pow(Uj, 2) * B / 2 + 1 / R * (-(X - B / 2 * (Math.Pow(X, 2) - Math.Pow(R, 2))) * Pij + (X - B / 2 * (Math.Pow(X, 2) + Math.Pow(R, 2))) * Pji)) * (1 - X * B); return(res); } var arguments = new List <EquationArgument>() { Pij, Uj, Pji, Qij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Qji = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qij = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = (Qij - 1 / (1 - X * B) * (Qji + Math.Pow(Uj, 2) * B / 2) + 1 / R * Pji * (X - B / 2 * (Math.Pow(X, 2) + Math.Pow(R, 2)))) / (1 / R * (X - B / 2 * (Math.Pow(X, 2) - Math.Pow(R, 2)))); return(res); } var arguments = new List <EquationArgument>() { Qji, Uj, Pji, Qij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Qji = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pij = equationArguments[2].Value; var Qij = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = -(Qij - 1 / (1 - X * B) * (Qji + Math.Pow(Uj, 2) * B / 2) - 1 / R * Pij * (X - B / 2 * (Math.Pow(X, 2) - Math.Pow(R, 2)))) / (1 / R * (X - B / 2 * (Math.Pow(X, 2) + Math.Pow(R, 2)))); return(res); } var arguments = new List <EquationArgument>() { Qji, Uj, Pij, Qij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }
public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Ui) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var D = Math.Pow((-Pij + Pji + 2 * Qij * B / 2), 2) - 4 * (Math.Pow(B, 2) / 4) * (Math.Pow(Pij, 2) + Math.Pow(Qij, 2)); if (D <= 0) { return(double.NaN); } var res = Math.Sqrt((-(-Pij + Pji + 2 * Qij * B / 2)) / (2 * Math.Pow(B, 2) / 4)); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Ui = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var D = Math.Pow(-Math.Pow(Ui, 2), 2) - 4 * 1 * (Pji * Math.Pow(Ui, 2) + Math.Pow(Qij, 2) + 2 * Qij * Math.Pow(Ui, 2) * B / 2 + Math.Pow(Ui, 4) * Math.Pow(B, 2) / 4); if (D <= 0) { return(double.NaN); } var res = (-(-Math.Pow(Ui, 2)) - Math.Sqrt(D)) / 2; return(res); } var arguments = new List <EquationArgument>() { Ui, Qij, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Ui = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pij = equationArguments[2].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Pij - (Math.Pow(Pij, 2) + Math.Pow(Qij, 2) + 2 * Qij * Math.Pow(Ui, 2) * B / 2 + Math.Pow(Ui, 4) * Math.Pow(B, 2) / 4) * R / Math.Pow(Ui, 2); return(res); } var arguments = new List <EquationArgument>() { Ui, Qij, Pij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Ui = equationArguments[0].Value; var Pij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var D = Math.Pow((2 * Math.Pow(Ui, 2) * B / 2), 2) - 4 * 1 * ((-Pij + Pji) * Math.Pow(Ui, 2) + Math.Pow(Pij, 2) + Math.Pow(Ui, 4) * Math.Pow(B, 2) / 4); if (D <= 0) { return(double.NaN); } var res = (-(2 * Math.Pow(Ui, 2) * B / 2) - Math.Sqrt(D)) / 2; return(res); } var arguments = new List <EquationArgument>() { Ui, Pij, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }
public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Ui) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qji = equationArguments[3].Value; var Uj = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((-Qij + Qji + Math.Pow(Uj, 2) * B / 2 + X * (Pij - Pji) / R) * 2 / B); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Pji, Qji, Uj }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Uj) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qji = equationArguments[3].Value; var Ui = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((Qij - Qji + Math.Pow(Ui, 2) * B / 2 + X * (Pij - Pji) / R) * 2 / B); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Pji, Qji, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qji = equationArguments[3].Value; var Ui = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = -Math.Pow(Ui, 2) * B / 2 + Qji + Math.Pow(Uj, 2) * B / 2 + X * (Pij - Pji) / R; return(res); } var arguments = new List <EquationArgument>() { Pij, Uj, Pji, Qji, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Pji = equationArguments[2].Value; var Qij = equationArguments[3].Value; var Ui = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Pow(Ui, 2) * B / 2 + Qij - Math.Pow(Uj, 2) * B / 2 - X * (Pij - Pji) / R; return(res); } var arguments = new List <EquationArgument>() { Pij, Uj, Pji, Qij, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Qij = equationArguments[3].Value; var Ui = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Pij - R / X * (Qij + Math.Pow(Ui, 2) * B / 2 - Qji - Math.Pow(Uj, 2) * B / 2); return(res); } var arguments = new List <EquationArgument>() { Pij, Uj, Qji, Qij, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pji = equationArguments[0].Value; var Uj = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Qij = equationArguments[3].Value; var Ui = equationArguments[4].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Pji + R / X * (Qij + Math.Pow(Ui, 2) * B / 2 - Qji - Math.Pow(Uj, 2) * B / 2); return(res); } var arguments = new List <EquationArgument>() { Pji, Uj, Qji, Qij, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }
public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Ui) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Qij = equationArguments[0].Value; var Qji = equationArguments[1].Value; var Pij = equationArguments[2].Value; var Pji = equationArguments[3].Value; var X = equationConstants[0].Value; var R = equationConstants[1].Value; var qijPlusQji = Qij + Qji; var pijPlusPji = Pij + Pji; if (IsCloseToZero((qijPlusQji * X + pijPlusPji * R), NearZeroMarginPowerFlow)) { return(double.NaN); } var res = Math.Sqrt(((Math.Pow(R, 2) + Math.Pow(X, 2)) * (Math.Pow(Pij, 2) + Math.Pow(Qij, 2)) / (qijPlusQji * X + pijPlusPji * R))); return(res); } var arguments = new List <EquationArgument>() { Qij, Qji, Pij, Pji }; var constants = new List <Constant>() { X, R }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Ui = equationArguments[0].Value; var Pij = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Pji = equationArguments[3].Value; var X = equationConstants[0].Value; var R = equationConstants[1].Value; var pijPlusPji = Pij + Pji; if (IsCloseToZero(Ui, NearZeroMarginVoltage)) { return(double.NaN); } var D = 1 - 4 * R * (Math.Pow(R, 2) + Math.Pow(X, 2)) / (Math.Pow(Ui, 2) * Math.Pow(X, 2)) * (Math.Pow(Pij, 2) * (Math.Pow(R, 2) + Math.Pow(X, 2)) / (Math.Pow(Ui, 2) * Math.Pow(X, 2)) - (pijPlusPji / X) * R - Qji); if (D <= 0) { return(double.NaN); // D should be bigger that a=1 } var result = (-1 - Math.Sqrt(D)) / (2 * (Math.Pow(R, 2) + Math.Pow(X, 2)) / (Math.Pow(Ui, 2) * Math.Pow(X, 2))); return(result); } var arguments = new List <EquationArgument>() { Ui, Pij, Qji, Pji }; var constants = new List <Constant>() { X, R }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Ui = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Pij = equationArguments[2].Value; var Pji = equationArguments[3].Value; var X = equationConstants[0].Value; var R = equationConstants[1].Value; var pijPlusPji = Pij + Pji; if (IsCloseToZero(Ui, NearZeroMarginVoltage)) { return(double.NaN); } var res = -Qij - pijPlusPji * R / X + (Math.Pow(R, 2) + Math.Pow(X, 2)) * ((Math.Pow(Pij, 2) + Math.Pow(Qij, 2)) / Math.Pow(Ui, 2) * X); return(res); } var arguments = new List <EquationArgument>() { Ui, Qij, Pij, Pji }; var constants = new List <Constant>() { X, R }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Qij = equationArguments[0].Value; var Ui = equationArguments[1].Value; var Qji = equationArguments[2].Value; var X = equationConstants[0].Value; var qijPlusQji = Qij + Qji; var res = Math.Sqrt(qijPlusQji * Math.Pow(Ui, 2) / X - Math.Pow(Qij, 2)); return(res); } var arguments = new List <EquationArgument>() { Pij, Ui, Qji }; var constants = new List <Constant>() { X }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }
public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Ui) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Uj = equationArguments[2].Value; var Pji = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((-Qij - (-(Math.Pow(X, 2) + Math.Pow(R, 2)) * Pij + (Math.Pow(X, 2) + Math.Pow(R, 2)) * Pji) / (2 * R * X) - Math.Pow(Uj, 2) / (2 * X)) / (B / 2 - 1 / (2 * X))); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Uj, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Uj) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Ui = equationArguments[2].Value; var Pji = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((Qij + Math.Pow(Ui, 2) * B / 2 + (-(Math.Pow(X, 2) + Math.Pow(R, 2)) * Pij + (Math.Pow(X, 2) + Math.Pow(R, 2)) * Pji) / (2 * R * X) - Math.Pow(Ui, 2) / (2 * X)) * 2 * X); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Ui, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Uj = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Ui = equationArguments[2].Value; var Pji = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = (Qij + Math.Pow(Ui, 2) * B / 2 + ((Math.Pow(X, 2) + Math.Pow(R, 2)) * Pji) / (2 * R * X) - (Math.Pow(Ui, 2) - Math.Pow(Uj, 2)) / (2 * X)) * 2 * R * X / (Math.Pow(X, 2) + Math.Pow(R, 2)); return(res); } var arguments = new List <EquationArgument>() { Uj, Qij, Ui, Pji }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Uj = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Ui = equationArguments[2].Value; var Pij = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = -(Qij + Math.Pow(Ui, 2) * B / 2 + (-(Math.Pow(X, 2) + Math.Pow(R, 2)) * Pij) / (2 * R * X) - (Math.Pow(Ui, 2) - Math.Pow(Uj, 2)) / (2 * X)) * 2 * R * X / (Math.Pow(X, 2) + Math.Pow(R, 2)); return(res); } var arguments = new List <EquationArgument>() { Uj, Qij, Ui, Pij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Uj = equationArguments[0].Value; var Pji = equationArguments[1].Value; var Ui = equationArguments[2].Value; var Pij = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = -(Math.Pow(Ui, 2) * B / 2 + (-(Math.Pow(X, 2) + Math.Pow(R, 2)) * Pij + (Math.Pow(X, 2) + Math.Pow(R, 2)) * Pji) / (2 * R * X) - (Math.Pow(Ui, 2) - Math.Pow(Uj, 2)) / (2 * X)); return(res); } var arguments = new List <EquationArgument>() { Uj, Pji, Ui, Pij }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }
public override RearrangedControlEquation GetRearrangedEquation(EquationArgument subject) { if (subject == null) { throw new ArgumentException("Subject cannot be equal to null"); } if (subject == Ui) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Uj = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var D = Math.Pow((Qij - Qji - Math.Pow(Uj, 2) * B / 2 - 2 * Qij * X * B / 2), 2) - 4 * (B / 2 - Math.Pow(B, 2) * X / 4) * (-Math.Pow(Pij, 2) * X - Math.Pow(Qij, 2) * X); if (D <= 0) { return(double.NaN); } var res = Math.Sqrt(((-(Qij - Qji - Math.Pow(Uj, 2) * B / 2 - 2 * Qij * X * B / 2)) - Math.Sqrt(D)) / (2 * (B / 2 - Math.Pow(B, 2) * X / 4))); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Qji, Uj }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Uj) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Ui = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((Math.Pow(Ui, 2) * Qij + Math.Pow(Ui, 4) * B / 2 - Qji * Math.Pow(Ui, 2) - Math.Pow(Pij, 2) * X - Math.Pow(Qij, 2) * X - 2 * Qij * X * Math.Pow(Ui, 2) * B / 2 - Math.Pow(Ui, 4) * Math.Pow(B, 2) * X / 4) / (Math.Pow(Ui, 2) * B / 2)); return(res); } var arguments = new List <EquationArgument>() { Pij, Qij, Qji, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Pij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Uj = equationArguments[0].Value; var Qij = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Ui = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = Math.Sqrt((Math.Pow(Ui, 2) * Qij + Math.Pow(Ui, 4) * B / 2 - Qji * Math.Pow(Ui, 2) - Math.Pow(Ui, 2) * Math.Pow(Uj, 2) * B / 2 - Math.Pow(Qij, 2) * X - 2 * Qij * X * Math.Pow(Ui, 2) * B / 2 - Math.Pow(Ui, 4) * Math.Pow(B, 2) * X / 4) / X); return(res); } var arguments = new List <EquationArgument>() { Uj, Qij, Qji, Ui }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qij) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Ui = equationArguments[1].Value; var Qji = equationArguments[2].Value; var Uj = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var D = Math.Pow((Math.Pow(Ui, 2) - 2 * X * Math.Pow(Ui, 2) * B / 2), 2) - 4 * (-X) * (Math.Pow(Ui, 4) * B / 2 - Qji * Math.Pow(Ui, 2) - Math.Pow(Ui, 2) * Math.Pow(Uj, 2) * B / 2 - Math.Pow(Pij, 2) * X - Math.Pow(Ui, 4) * Math.Pow(B, 2) * X / 4); if (D <= 0) { return(double.NaN); } var res = (-(Math.Pow(Ui, 2) - 2 * X * Math.Pow(Ui, 2) * B / 2) - Math.Sqrt(D)) / (-2 * X); return(res); } var arguments = new List <EquationArgument>() { Pij, Ui, Qji, Uj }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } if (subject == Qji) { double calcSubjectValue(List <EquationArgument> equationArguments, List <Constant> equationConstants) { var Pij = equationArguments[0].Value; var Ui = equationArguments[1].Value; var Qij = equationArguments[2].Value; var Uj = equationArguments[3].Value; var R = equationConstants[0].Value; var X = equationConstants[1].Value; var B = equationConstants[2].Value; var res = (Math.Pow(Ui, 2) * Qij + Math.Pow(Ui, 4) * B / 2 - Math.Pow(Ui, 2) * Math.Pow(Uj, 2) * B / 2 - Math.Pow(Pij, 2) * X - Math.Pow(Qij, 2) * X - 2 * Qij * X * Math.Pow(Ui, 2) * B / 2 - Math.Pow(Ui, 4) * Math.Pow(B, 2) * X / 4) / Math.Pow(Ui, 2); return(res); } var arguments = new List <EquationArgument>() { Pij, Ui, Qij, Uj }; var constants = new List <Constant>() { R, X, B }; return(new RearrangedControlEquation(subject, arguments, constants, calcSubjectValue, this)); } throw new ArgumentException("The argument that is supposed to be the subject wasn't found among ControlEquation arguments"); }