Дана квадратная матрица размерности n*n вычислить ее определитель - C#

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

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

Дана квадратная матрица размерности n*n вычислить ее определитель. Нужна помощь в написании кода, за ранее спасибо

Решение задачи: «Дана квадратная матрица размерности n*n вычислить ее определитель»

textual
Листинг программы
  1. using System;
  2. using System.Linq;
  3. using System.Text;
  4.  
  5. namespace ConsoleApplication
  6. {
  7.     class Program
  8.     {
  9.         public class Matrix
  10.         {
  11.             public float[,] matrix = null;
  12.  
  13.             public int CountColumn { get; private set; }
  14.             public int CountRow { get; private set; }
  15.  
  16.             public Matrix(int x = 1, int y = 1)
  17.             {
  18.                 matrix = new float[x, y];
  19.  
  20.                 CountColumn = y;
  21.                 CountRow = x;
  22.             }
  23.  
  24.             public float this[int x, int y]
  25.             {
  26.                 get { return matrix[x, y]; }
  27.                 set { matrix[x, y] = value; }
  28.             }
  29.  
  30.  
  31.             public float[] GetRow(int row)
  32.             {
  33.                 if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
  34.                 float[] ret = new float[CountColumn];
  35.                 for (int i = 0; i < CountColumn; i++)
  36.                     ret[i] = matrix[row, i];
  37.  
  38.                 return ret;
  39.             }
  40.  
  41.             public void SetRow(float[] values, int row)
  42.             {
  43.                 if (row >= CountRow) throw new IndexOutOfRangeException("Индекс строки не принадлежит массиву.");
  44.                 for (int i = 0; i < (CountColumn > values.Length ? values.Length : CountColumn); i++)
  45.                     matrix[row, i] = values[i];
  46.             }
  47.  
  48.             public float Determinant()
  49.             {
  50.                 if (CountColumn != CountRow) throw new ArgumentException("Вычисление определителя возможно только для квадратных матриц.");
  51.                 Matrix _matrix = new Matrix(CountRow, CountColumn);
  52.                 _matrix.matrix = (float[,])this.matrix.Clone();
  53.  
  54.                 float det = 1;
  55.                 int order = CountRow;
  56.  
  57.                 for (int i = 0; i < order - 1; i++)
  58.                 {
  59.                     float[] masterRow = _matrix.GetRow(i);
  60.                     det *= masterRow[i];
  61.                     if (det == 0) return 0;
  62.                     for (int t = i + 1; t < order; t++)
  63.                     {
  64.                         float[] slaveRow = _matrix.GetRow(t);
  65.                         float[] tmp = MulArrayConst(masterRow, slaveRow[i] / masterRow[i]);
  66.                         float[] source = _matrix.GetRow(t);
  67.                         _matrix.SetRow(SubArray(source, tmp), t);
  68.                     }
  69.                 }
  70.                 det *= _matrix[order - 1, order - 1];
  71.                 return det;
  72.             }
  73.  
  74.             public override string ToString()
  75.             {
  76.                 StringBuilder ret = new StringBuilder();
  77.                 if (matrix == null) return ret.ToString();
  78.  
  79.                 for (int i = 0; i < CountRow; i++)
  80.                 {
  81.                     for (int t = 0; t < CountColumn; t++)
  82.                     {
  83.                         ret.Append(matrix[i, t]);
  84.                         ret.Append("\t");
  85.                     }
  86.                     ret.Append("\n");
  87.                 }
  88.                 return ret.ToString();
  89.             }
  90.  
  91.             float[] SubArray(float[] A, float[] B)
  92.             {
  93.                 float[] ret = (float[])A.Clone();
  94.                 for (int i = 0; i < (A.Length > B.Length ? A.Length : B.Length); i++)
  95.                     ret[i] -= B[i];
  96.                 return ret;
  97.             }
  98.  
  99.             float[] MulArrayConst(float[] array, float number)
  100.             {
  101.                 float[] ret = (float[])array.Clone();
  102.                 for (int i = 0; i < ret.Length; i++)
  103.                     ret[i] *= number;
  104.                 return ret;
  105.             }
  106.  
  107.             void generator(int x, int y, int startGen)
  108.             {
  109.                 matrix = new float[x, y];
  110.                 Random rnd = new Random(startGen);
  111.  
  112.                 for (int i = 0; i < x * y; i++)
  113.                 {
  114.                     int X = i / y;
  115.                     int Y = i - y * X;
  116.                     matrix[X, Y] = rnd.Next(-10, 10);
  117.                 }
  118.             }
  119.         }
  120.  
  121.         static void Main()
  122.         {
  123.             Matrix m1 = new Matrix(3, 3);
  124.             Console.WriteLine(m1.Determinant());
  125.         }
  126.     }
  127. }

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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