Метод для вычисления минорной матрицы для заданного элемента - C#
Формулировка задачи:
Листинг программы
- using System;
- namespace ConsoleApplication1
- {
- class Matrix
- {
- /// <summary>
- /// Поиск определителя матрицы
- /// </summary>
- /// <param name="matrix"></param>
- static public double GetDeterminant(double[,] matrix)
- {
- if (matrix.GetLength(0) != matrix.GetLength(1))
- throw new Exception("Матрица должна быть квадратной!");
- /// Если матрица 2Г—2, то возвращаем определитель по формуле Крамера
- if (matrix.GetLength(0) == 2)
- return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
- int sign = 1;//Знак минора
- double result = 0;
- int j = 0;//Номер столбца, по которому раскладывается матрица
- for (int i = 0; i < matrix.GetLength(0); i++)
- {
- /// Если номер столбца и строки одновременно чётные, то
- /// знак будет «+», иначе — «-»
- sign = ((i + 1) % 2 == (j + 1) % 2) ? 1 : -1;
- result += sign * matrix[i, j] * GetDeterminant(GetMinorMatrix(matrix, i, j));
- }
- return result;
- }
- /// <summary>
- /// Метод для вычисления минорной матрицы для заданного элемента
- /// </summary>
- /// <param name="matrix">Исходная матрица</param>
- /// <param name="row">Номер строки</param>
- /// <param name="col">Номер столбца</param>
- static public double[,] GetMinorMatrix(double[,] matrix, int row, int col)
- {
- double[,] result = new double[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
- int m = 0, k;
- for (int i = 0; i < matrix.GetLength(0); i++)
- {
- if (i == row) continue;
- k = 0;
- for (int j = 0; j < matrix.GetLength(1); j++)
- {
- if (j == col) continue;
- result[m, k++] = matrix[i, j];
- }
- m++;
- }
- return result;
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Метод для вычисления минорной матрицы для заданного элемента»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace Matrices
- {
- class Matrix
- {
- /// <summary>
- /// Поиск определителя матрицы
- /// </summary>
- /// <param name="matrix"></param>
- static public double GetDeterminant(double[,] matrix)
- {
- if (matrix.GetLength(0) != matrix.GetLength(1))
- throw new Exception("Матрица должна быть квадратной!");
- /// Если матрица 2Г—2, то возвращаем определитель по формуле Крамера
- if (matrix.GetLength(0) == 2)
- return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
- int sign = 1;//Знак минора
- double result = 0;
- int j = 0;//Номер столбца, по которому раскладывается матрица
- for (int i = 0; i < matrix.GetLength(0); i++)
- {
- /// Если номер столбца и строки одновременно чётные, то
- /// знак будет «+», иначе — «-»
- sign = ((i + 1) % 2 == (j + 1) % 2) ? 1 : -1;
- result += sign * matrix[i, j] * GetDeterminant(GetMinorMatrix(matrix, i, j));
- }
- return result;
- }
- /// <summary>
- /// Метод для вычисления минорной матрицы для заданного элемента
- /// </summary>
- /// <param name="matrix">Исходная матрица</param>
- /// <param name="row">Номер строки</param>
- /// <param name="col">Номер столбца</param>
- ///
- private static int minorN, minorM;
- private static double[,] minor;
- static public double[,] GetMinorMatrix(double[,] matrix, int row, int col)
- {
- minorN = matrix.GetLength(0) - 1;
- minorM = matrix.GetLength(1) - 1;
- double[,] result = new double[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
- int m = 0, k;
- for (int i = 0; i < matrix.GetLength(0); i++)
- {
- if (i == row) continue;
- k = 0;
- for (int j = 0; j < matrix.GetLength(1); j++)
- {
- if (j == col) continue;
- result[m, k++] = matrix[i, j];
- }
- m++;
- }
- minor = result;
- return result;
- }
- public static double[,] GetMatrix(int N, int M)
- {
- double[,] a = new double[N, M];
- Console.WriteLine("Введите элементы матрицы размерности {0}на{1}", N, M);
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < M; j++)
- {
- a[i, j] = double.Parse(Console.ReadLine());
- }
- }
- return a;
- }
- public static void ShowMinor()
- {
- if (minor != null)
- {
- Console.WriteLine("\nМинор введенной матрицы:");
- for (int i = 0; i < minorN; i++)
- {
- for (int j = 0; j < minorM; j++)
- {
- Console.Write("{0} ", minor[i, j]);
- }
- Console.WriteLine();
- }
- }
- else Console.WriteLine("Минор матрицы ещё неопределен");
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- double[,] a = Matrix.GetMatrix(3,3);
- double det = Matrix.GetDeterminant(a);
- Matrix.GetMinorMatrix(a, 1, 1);
- Console.WriteLine("\nОпределитель введенной матрицы {0}", det);
- Matrix.ShowMinor();
- Console.ReadLine();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д