コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }