private LAEAnswer CalculateKramerMethodAsync(out List <LAEVariable> lAEVariables)
        {
            bool systemCompatible = this.CheckLinearAlgebraicEquationSystemCompatibility();

            if (!systemCompatible)
            {
                lAEVariables = null;
                return(LAEAnswer.NoSolutions);
            }

            double matrixDeterminant = MatrixT <double> .GetMatrixDeterminant(this.Matrix);

            ConcurrentBag <LAEVariable> result = new ConcurrentBag <LAEVariable>();

            Parallel.For(0, this.Matrix.Columns, (i) =>
            {
                MatrixT <double> currentMatrix = MatrixT <double> .SubstituteMatrixColumn(this.Matrix, i, this.RightPartEquations);
                double currentDeterminant      = MatrixT <double> .GetMatrixDeterminant(currentMatrix);

                result.Add(new LAEVariable(this.Variables[i].Name, currentDeterminant / matrixDeterminant));
            });

            lAEVariables = result.Cast <LAEVariable>().ToList();
            return(LAEAnswer.OneSolution);
        }
        private LAEAnswer CalculateKramerMethod(out List <LAEVariable> lAEVariables)
        {
            bool systemCompatible = this.CheckLinearAlgebraicEquationSystemCompatibility();

            if (!systemCompatible)
            {
                lAEVariables = null;
                return(LAEAnswer.NoSolutions);
            }

            double matrixDeterminant = MatrixT <double> .GetMatrixDeterminant(this.Matrix);

            List <LAEVariable> result = new List <LAEVariable>();

            for (int i = 0; i < this.Matrix.Columns; i++)
            {
                MatrixT <double> currentMatrix = MatrixT <double> .SubstituteMatrixColumn(this.Matrix, i, this.RightPartEquations);

                double currentDeterminant = MatrixT <double> .GetMatrixDeterminant(currentMatrix);

                result.Add(new LAEVariable(this.Variables[i].Name, currentDeterminant / matrixDeterminant));
            }

            lAEVariables = result;
            return(LAEAnswer.OneSolution);
        }