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"); } } } }
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); }
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"); } }
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 ("Матрицу невозможно привести к ступенчатому виду"); } } } }