/// <summary> /// Initializes a new instance of the <see cref="LinearAlgebraicEquationSystem" /> class. /// </summary> /// <param name="leftPartEquations">Left part of linear algebraic equations.</param> /// <param name="rightPartEquations">Right part of linear algebraic equations.</param> /// <param name="variables">Variables of linear algebraic equations.</param> /// <param name="constants">Other constant parameters of linear algebraic equations.</param> public LinearAlgebraicEquationSystem(List <string> leftPartEquations, List <double> rightPartEquations, List <LAEVariable> variables, List <LAEVariable> constants) { if (rightPartEquations != null && rightPartEquations.Count > 0) { this.RightPartEquations = rightPartEquations; } else { throw new ArgumentException("Right parts list is null or empty!"); } List <Variable> allVariables = new List <Variable>(); if (variables != null && variables.Count > 0) { this.Variables = LAEVariable.ConvertLAEVariablesToVariables(variables); allVariables.AddRange(this.Variables); } else { throw new ArgumentException("Variables list is null or empty!"); } if (constants != null && constants.Count > 0) { this.Constants = LAEVariable.ConvertLAEVariablesToVariables(constants); allVariables.AddRange(this.Constants); } this.LeftPartEquations = new List <Expression>(); foreach (string leftPart in leftPartEquations) { this.LeftPartEquations.Add(new Expression(leftPart, allVariables)); } this.Matrix = LinearAlgebraicEquationSystem.SetMatrix(this.LeftPartEquations, this.Variables, this.Constants); }
/// <summary> /// Method is used to set matrix of linear alebraic equation system. /// </summary> /// <param name="leftEquationsParts">parts of the left equations system.</param> /// <param name="variables">LAE system variables.</param> /// <param name="constants">LAE system constants.</param> /// <returns>matrix of the relevant linear alebraic equation system.</returns> private static MatrixT <double> SetMatrix(List <Expression> leftEquationsParts, List <Variable> variables, List <Variable> constants) { MatrixT <double> result = new MatrixT <double>(leftEquationsParts.Count, variables.Count); for (int i = 0; i < leftEquationsParts.Count; i++) { for (int j = 0; j < variables.Count; j++) { List <Variable> currentVariables = variables; LinearAlgebraicEquationSystem.SetVariablesWithValues(currentVariables, 0); currentVariables[j].Value = 1.0; if (constants != null && constants.Count > 0) { currentVariables.AddRange(constants); } result[i, j] = leftEquationsParts[i].GetResultValue(currentVariables); } } return(result); }