Пример #1
0
 private static void ToTriangular(ref Matrix matrix)
 {
     for (var i = 0; i < matrix.Height; i++)
     {
         for (var j = i + 1; j < matrix.Height; j++)
         {
             if (!NumericComparer.Compare(matrix[i, i], 0))
             {
                 if (!NumericComparer.Compare(matrix[j, i], 0))
                 {
                     matrix.AddRow(i, j, -matrix[j, i] / matrix[i, i]);
                 }
             }
             else
             {
                 throw new ArgumentException("Matrix can not be transfered to stairs state");
             }
         }
     }
 }
Пример #2
0
        private Matrix RandomInput(int k)
        {
            do
            {
                PrintMessage("Введите минимальное значение");
                double max;
                double min;
                try
                {
                    min = double.Parse(Console.ReadLine().Replace(',', '.'));
                    PrintMessage("Введите максимальное значение");
                    max = double.Parse(Console.ReadLine().Replace(',', '.'));
                }
                catch (Exception ex)
                {
                    if (ex is FormatException || ex is ArgumentNullException)
                    {
                        PrintMessage("Ошибка: Необходимо ввести число");
                        continue;
                    }

                    if (ex is OverflowException)
                    {
                        PrintMessage("Ошибка: Число слишком не входит в размер double");
                    }
                    else
                    {
                        throw;
                    }

                    continue;
                }

                if (!(min > max) && !NumericComparer.Compare(min, max))
                {
                    var randomGenerator = new RandomMatrixGenerator();
                    return(new Matrix(randomGenerator.Generate(k, min, max)));
                }
                PrintMessage("Ошибка: Максимальное значение должно быть строго больше минимального");
            } while (true);
        }
Пример #3
0
        private static void CheckZeroOrInfinitySolutions(Matrix matrix)
        {
            bool noSolutions       = false;
            bool infinitySolutions = false;

            for (var i = 0; i < matrix.Height; i++)
            {
                var isEquationCorrect = false;
                for (var j = i; j < matrix.Width - 1; j++)
                {
                    if (!NumericComparer.Compare(matrix[i, j], 0))
                    {
                        isEquationCorrect = true;
                    }
                }

                if (isEquationCorrect)
                {
                    continue;
                }
                if (NumericComparer.Compare(matrix[i, matrix.Width - 1], 0))
                {
                    infinitySolutions = true;
                }
                else
                {
                    noSolutions = true;
                }
            }
            if (noSolutions)
            {
                throw new ArgumentException("No solutions");
            }
            if (infinitySolutions)
            {
                throw new ArgumentException("Infinite number of solutions");
            }
        }
Пример #4
0
 private void ToTriangular(ref Matrix matrix)
 {
     for (var i = 0; i < matrix.Height; i++)
     {
         for (var j = i + 1; j < matrix.Height; j++)
         {
             // Если равно 0, то при решении Гауссом найдём бесконечное число решений
             if (!NumericComparer.Compare(matrix[i, i], 0))
             {
                 // Для каждого элемента "обнуляем" его
                 if (!NumericComparer.Compare(matrix[j, i], 0))
                 {
                     matrix.AddRow(i, j, -matrix[j, i] / matrix[i, i]);
                 }
             }
             else
             {
                 throw new ArgumentException
                           ("Матрицу невозможно привести к ступенчатому виду");
             }
         }
     }
 }