/// <summary>
        /// Метод разложения матрицы.
        /// </summary>
        /// <param name="matrix"> Матрица. </param>
        /// <param name="num"> Строка или столбик. </param>
        /// <param name="enumMatrix"> Переключатель между строкой или столбиком. </param>
        /// <returns> Определитель. </returns>
        public double FindDecompositionOfMatrix(Matrix matrix, int num, enumMatrix enumMatrix = enumMatrix.row)
        {
            Console.WriteLine();

            Console.WriteLine($"Разложение матрицы по {enumMatrix} {num}");
            var array = new List <double>();


            var determinant = 0.0;
            var cofactor    = 0.0;

            if (enumMatrix == enumMatrix.row)
            {
                var rowLength = matrix.MatrixValue.GetLength(1); // длина строки.

                for (int i = 0; i < rowLength; i++)
                {
                    cofactor     = FindCofactor(matrix, num, i + 1);
                    determinant += matrix.MatrixValue[num - 1, i] * cofactor;

                    array.Add(cofactor);
                }

                Console.Write(matrix.CommonMultiplier);

                Console.WriteLine();

                for (int i = 0; i < rowLength; i++)
                {
                    if (i < rowLength - 1)
                    {
                        Console.Write($"{matrix.MatrixValue[num - 1, i]} * {array[i]} + ");
                    }
                    else
                    {
                        Console.Write($"{matrix.MatrixValue[i, num - 1]} * {array[i]} = {determinant * matrix.CommonMultiplier}");
                    }
                }
            }
            else if (enumMatrix == enumMatrix.column)
            {
                var columnLength = matrix.MatrixValue.GetLength(0); // длина колонки.

                for (int i = 0; i < columnLength; i++)
                {
                    cofactor     = FindCofactor(matrix, i + 1, num);
                    determinant += matrix.MatrixValue[i, num - 1] * cofactor;

                    array.Add(cofactor);
                }

                Console.Write(matrix.CommonMultiplier);

                Console.WriteLine();

                for (int i = 0; i < columnLength; i++)
                {
                    if (i < columnLength - 1)
                    {
                        Console.Write($"{matrix.MatrixValue[i, num - 1]} * {array[i]} + ");
                    }
                    else
                    {
                        Console.Write($"{matrix.MatrixValue[i, num - 1]} * {array[i]} = {determinant * matrix.CommonMultiplier}");
                    }
                }
            }

            return(determinant * matrix.CommonMultiplier);
        }
        /// <summary>
        /// Метод умножающий строку или колонку num1 на number и складывающий ее со строкой или колонкой num2.
        /// </summary>
        /// <param name="multiplier"> Множитель. </param>
        /// <param name="num1"> Первая строка или столбик. </param>
        /// <param name="num2"> Вторая строка или столбик. </param>
        /// <param name="enumMatrix"> Переключатель между строкой или столбиком. </param>
        /// <returns> Измененая матрица. </returns>
        public Matrix SixthPropertyOfTheDeterminant(double multiplier, int num1, int num2, enumMatrix enumMatrix = enumMatrix.row)
        {
            var columnLength = MatrixValue.GetLength(0);                     // длина колонки матрицы.
            var rowLength    = MatrixValue.GetLength(1);                     // длина строки матрицы.

            var newMatrix = new Matrix(new double[columnLength, rowLength]); // Новая матрица.

            newMatrix = LoadMatrixData(this, newMatrix);

            Console.WriteLine();
            Console.WriteLine("Шестое свойство определителя");
            Console.WriteLine();
            Console.WriteLine($"Множмтель: {newMatrix.CommonMultiplier}");
            Console.WriteLine();
            Console.WriteLine($"Множитель шестого правила: {multiplier}");
            Console.WriteLine();

            if (num1 != num2)
            {
                if (enumMatrix == enumMatrix.row)
                {
                    for (int i = 0; i < columnLength; i++)
                    {
                        for (int j = 0; j < rowLength; j++)
                        {
                            if (num2 - 1 == i)
                            {
                                newMatrix.MatrixValue[i, j] = MatrixValue[num1 - 1, j] * multiplier + MatrixValue[num2 - 1, j];

                                Console.Write($"({MatrixValue[num1 - 1, j]} * {multiplier} + {MatrixValue[num2 - 1, j]})");
                            }
                            else
                            {
                                newMatrix.MatrixValue[i, j] = MatrixValue[i, j];

                                Console.Write($"{newMatrix.MatrixValue[i, j]} ");
                            }
                        }
                        Console.WriteLine();
                    }
                }
                else if (enumMatrix == enumMatrix.column)
                {
                    for (int i = 0; i < columnLength; i++)
                    {
                        for (int j = 0; j < rowLength; j++)
                        {
                            if (num2 - 1 == j)
                            {
                                newMatrix.MatrixValue[i, j] = MatrixValue[i, num1 - 1] * multiplier + MatrixValue[i, num2 - 1];

                                Console.Write($"({MatrixValue[i, num1 - 1]} * {multiplier} + {MatrixValue[i, num2 - 1]})");
                            }
                            else
                            {
                                newMatrix.MatrixValue[i, j] = MatrixValue[i, j];

                                Console.Write($"{newMatrix.MatrixValue[i, j]} ");
                            }
                        }
                        Console.WriteLine();
                    }
                }
            }


            Console.WriteLine();
            Console.WriteLine($"Множмтель: {newMatrix.CommonMultiplier}");
            Console.WriteLine();
            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write($"{newMatrix.MatrixValue[i, j]} ");
                }
                Console.WriteLine();
            }

            Console.WriteLine();

            MatrixValue = newMatrix.MatrixValue;

            return(newMatrix);
        }
        /// <summary>
        /// Метод выносящий общий множитель из матрицы.
        /// </summary>
        /// <param name="matrix"> Матрица. </param>
        /// <param name="num"> Строка или колонка. </param>
        /// <param name="commonMultiplier"> Общий множитель. </param>
        /// <param name="enumMatrix"> Переключатель между строкой или столбиком. </param>
        /// <returns> Измененая матрица. </returns>
        private Matrix TakeOutTheTotalMultiplier(Matrix matrix, int num, double commonMultiplier, enumMatrix enumMatrix = enumMatrix.row)
        {
            var columnLength = matrix.MatrixValue.GetLength(0);              // длина колонки матрицы.
            var rowLength    = matrix.MatrixValue.GetLength(1);              // длина строки матрицы.

            var newMatrix = new Matrix(new double[columnLength, rowLength]); // Новая матрица.

            if (enumMatrix == enumMatrix.row)
            {
                for (int i = 0; i < columnLength; i++)
                {
                    for (int j = 0; j < rowLength; j++)
                    {
                        if (num - 1 == i)
                        {
                            newMatrix.MatrixValue[i, j] = matrix.MatrixValue[num - 1, j] / commonMultiplier;
                        }
                        else
                        {
                            newMatrix.MatrixValue[i, j] = matrix.MatrixValue[i, j];
                        }
                    }
                }
            }
            else if (enumMatrix == enumMatrix.column)
            {
                for (int i = 0; i < columnLength; i++)
                {
                    for (int j = 0; j < rowLength; j++)
                    {
                        if (num - 1 == j)
                        {
                            newMatrix.MatrixValue[i, j] = matrix.MatrixValue[i, num - 1] / commonMultiplier;
                        }
                        else
                        {
                            newMatrix.MatrixValue[i, j] = matrix.MatrixValue[i, j];
                        }
                    }
                }
            }

            newMatrix = LoadMatrixData(matrix, newMatrix);

            newMatrix.CommonMultiplier = commonMultiplier * matrix.CommonMultiplier;


            Console.WriteLine($"Общий множитель");

            Console.WriteLine();

            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write($" {matrix.MatrixValue[i, j]}");
                }
                Console.WriteLine();
            }
            Console.WriteLine();

            Console.Write($"Множитель: {newMatrix.CommonMultiplier}");

            Console.WriteLine();

            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write($" {newMatrix.MatrixValue[i, j]}");
                }
                Console.WriteLine();
            }
            Console.WriteLine();

            return(newMatrix);
        }
        /// <summary>
        /// Метод меняющий элементы в матрицах местами.
        /// </summary>
        /// <param name="num1"> Первая строка или столбик. </param>
        /// <param name="num2"> Вторая строка или столбик. </param>
        /// <param name="enumMatrix"> Переключатель между строкой или столбиком. </param>
        /// <returns> Измененая матрица. </returns>
        public Matrix SwapColumnsOrRows(int num1, int num2, enumMatrix enumMatrix = enumMatrix.row)
        {
            var columnLength = MatrixValue.GetLength(0);                     // длина колонки матрицы.
            var rowLength    = MatrixValue.GetLength(1);                     // длина строки матрицы.

            var newMatrix = new Matrix(new double[columnLength, rowLength]); // Новая матрица.

            if (enumMatrix == enumMatrix.row)
            {
                for (int i = 0; i < columnLength; i++)
                {
                    for (int j = 0; j < rowLength; j++)
                    {
                        if (i == num1 - 1)
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[num2 - 1, j];
                        }
                        else if (i == num2 - 1)
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[num1 - 1, j];
                        }
                        else
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[i, j];
                        }
                    }
                }
            }
            else if (enumMatrix == enumMatrix.column)
            {
                for (int i = 0; i < columnLength; i++)
                {
                    for (int j = 0; j < rowLength; j++)
                    {
                        if (j == num1 - 1)
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[i, num2 - 1];
                        }
                        else if (j == num2 - 1)
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[i, num1 - 1];
                        }
                        else
                        {
                            newMatrix.MatrixValue[i, j] = MatrixValue[i, j];
                        }
                    }
                }
            }

            newMatrix = LoadMatrixData(this, newMatrix);

            newMatrix.CommonMultiplier = CommonMultiplier * -1;


            Console.WriteLine();

            Console.WriteLine($"Меняем {enumMatrix} {num1} и {num2} местами");

            Console.WriteLine();

            Console.WriteLine($"Множмтель: {newMatrix.CommonMultiplier}");

            Console.WriteLine();

            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write($" {MatrixValue[i, j]} ");
                }

                Console.WriteLine();
            }

            Console.WriteLine();

            Console.WriteLine($"Множмтель: {newMatrix.CommonMultiplier}");

            Console.WriteLine();

            for (int i = 0; i < columnLength; i++)
            {
                for (int j = 0; j < rowLength; j++)
                {
                    Console.Write($" {newMatrix.MatrixValue[i, j]} ");
                }

                Console.WriteLine();
            }

            Console.WriteLine();

            MatrixValue      = newMatrix.MatrixValue;
            CommonMultiplier = newMatrix.CommonMultiplier;

            return(newMatrix);
        }