/// <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); }