Метод для вычисления минорной матрицы для заданного элемента - C#

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. using System;
  2. namespace ConsoleApplication1
  3. {
  4. class Matrix
  5. {
  6. /// <summary>
  7. /// Поиск определителя матрицы
  8. /// </summary>
  9. /// <param name="matrix"></param>
  10. static public double GetDeterminant(double[,] matrix)
  11. {
  12. if (matrix.GetLength(0) != matrix.GetLength(1))
  13. throw new Exception("Матрица должна быть квадратной!");
  14. /// Если матрица 2Г—2, то возвращаем определитель по формуле Крамера
  15. if (matrix.GetLength(0) == 2)
  16. return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
  17. int sign = 1;//Знак минора
  18. double result = 0;
  19. int j = 0;//Номер столбца, по которому раскладывается матрица
  20. for (int i = 0; i < matrix.GetLength(0); i++)
  21. {
  22. /// Если номер столбца и строки одновременно чётные, то
  23. /// знак будет «+», иначе — «-»
  24. sign = ((i + 1) % 2 == (j + 1) % 2) ? 1 : -1;
  25. result += sign * matrix[i, j] * GetDeterminant(GetMinorMatrix(matrix, i, j));
  26. }
  27. return result;
  28. }
  29. /// <summary>
  30. /// Метод для вычисления минорной матрицы для заданного элемента
  31. /// </summary>
  32. /// <param name="matrix">Исходная матрица</param>
  33. /// <param name="row">Номер строки</param>
  34. /// <param name="col">Номер столбца</param>
  35. static public double[,] GetMinorMatrix(double[,] matrix, int row, int col)
  36. {
  37. double[,] result = new double[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
  38. int m = 0, k;
  39. for (int i = 0; i < matrix.GetLength(0); i++)
  40. {
  41. if (i == row) continue;
  42. k = 0;
  43. for (int j = 0; j < matrix.GetLength(1); j++)
  44. {
  45. if (j == col) continue;
  46. result[m, k++] = matrix[i, j];
  47. }
  48. m++;
  49. }
  50. return result;
  51. }
  52. }
  53. class Program
  54. {
  55. static void Main(string[] args)
  56. {
  57. Console.ReadLine();
  58. }
  59. }
  60. }

Решение задачи: «Метод для вычисления минорной матрицы для заданного элемента»

textual
Листинг программы
  1.         using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Matrices
  7. {
  8.     class Matrix
  9.     {
  10.             /// <summary>
  11.             /// Поиск определителя матрицы
  12.             /// </summary>
  13.             /// <param name="matrix"></param>
  14.             static public double GetDeterminant(double[,] matrix)
  15.             {
  16.                 if (matrix.GetLength(0) != matrix.GetLength(1))
  17.                     throw new Exception("Матрица должна быть квадратной!");
  18.                 /// Если матрица 2Г—2, то возвращаем определитель по формуле Крамера
  19.                 if (matrix.GetLength(0) == 2)
  20.                     return matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0];
  21.                 int sign = 1;//Знак минора
  22.                 double result = 0;
  23.                 int j = 0;//Номер столбца, по которому раскладывается матрица
  24.                 for (int i = 0; i < matrix.GetLength(0); i++)
  25.                 {
  26.                     /// Если номер столбца и строки одновременно чётные, то
  27.                     /// знак будет «+», иначе — «-»
  28.                     sign = ((i + 1) % 2 == (j + 1) % 2) ? 1 : -1;
  29.                     result += sign * matrix[i, j] * GetDeterminant(GetMinorMatrix(matrix, i, j));
  30.                 }
  31.                 return result;
  32.             }
  33.             /// <summary>
  34.             /// Метод для вычисления минорной матрицы для заданного элемента
  35.             /// </summary>
  36.             /// <param name="matrix">Исходная матрица</param>
  37.             /// <param name="row">Номер строки</param>
  38.             /// <param name="col">Номер столбца</param>
  39.             ///
  40.             private static int minorN, minorM;
  41.  
  42.         private static double[,] minor;
  43.             static public double[,] GetMinorMatrix(double[,] matrix, int row, int col)
  44.             {
  45.                 minorN = matrix.GetLength(0) - 1;
  46.                 minorM = matrix.GetLength(1) - 1;
  47.                 double[,] result = new double[matrix.GetLength(0) - 1, matrix.GetLength(1) - 1];
  48.                 int m = 0, k;
  49.                 for (int i = 0; i < matrix.GetLength(0); i++)
  50.                 {
  51.                     if (i == row) continue;
  52.                     k = 0;
  53.                     for (int j = 0; j < matrix.GetLength(1); j++)
  54.                     {
  55.                         if (j == col) continue;
  56.                         result[m, k++] = matrix[i, j];
  57.                     }
  58.                     m++;
  59.                 }
  60.                 minor = result;
  61.                 return result;
  62.             }
  63.  
  64.         public static double[,] GetMatrix(int N, int M)
  65.             {
  66.                 double[,] a = new double[N, M];
  67.                 Console.WriteLine("Введите элементы матрицы размерности {0}на{1}", N, M);
  68.                 for (int i = 0; i < N; i++)
  69.                 {
  70.                     for (int j = 0; j < M; j++)
  71.                     {
  72.                         a[i, j] = double.Parse(Console.ReadLine());
  73.                     }
  74.                 }
  75.                 return a;
  76.             }
  77.  
  78.         public static void ShowMinor()
  79.         {
  80.             if (minor != null)
  81.             {
  82.                 Console.WriteLine("\nМинор введенной матрицы:");
  83.                 for (int i = 0; i < minorN; i++)
  84.                 {
  85.                     for (int j = 0; j < minorM; j++)
  86.                     {
  87.                         Console.Write("{0} ", minor[i, j]);
  88.                     }
  89.                     Console.WriteLine();
  90.                 }
  91.             }
  92.             else Console.WriteLine("Минор матрицы ещё неопределен");
  93.         }
  94.  
  95.         }
  96.         class Program
  97.         {
  98.             static void Main(string[] args)
  99.             {
  100.                 double[,] a = Matrix.GetMatrix(3,3);
  101.                 double det = Matrix.GetDeterminant(a);
  102.                 Matrix.GetMinorMatrix(a, 1, 1);
  103.                 Console.WriteLine("\nОпределитель введенной матрицы {0}", det);
  104.                 Matrix.ShowMinor();
  105.                 Console.ReadLine();
  106.             }
  107.         }
  108. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы