예제 #1
0
        /// <summary>
        /// Вычисляет определитель матрицы
        /// </summary>
        /// <param name="array">Объект матрицы типа SqMatrix</param>
        /// <returns>det - определитель матрицы</returns>
        public static int Determinant(SqMatrix array)
        {
            int n   = array.N;
            int det = 0;

            if (n < 3)
            {
                det = array.Table[0, 0] * array.Table[1, 1] - array.Table[1, 0] * array.Table[0, 1];
                return(det);
            }
            else
            {
                for (int i = 0; i < n; i++)
                {
                    int result = array.Table[0, i] * Determinant(GetMinor(array, i));
                    if (i % 2 == 0)
                    {
                        det += result;
                    }
                    else
                    {
                        det -= result;
                    }
                }
                return(det);
            }
        }
예제 #2
0
 /// <summary>
 /// Читает возвращает прочитанную из файла матрицу в виде объекта SqMatrix
 /// </summary>
 /// <param name="path">Путь к файлу</param>
 /// <returns>Объект SqMatrix</returns>
 public static SqMatrix ReadFromFile(string path)
 {
     using (StreamReader ts = new StreamReader(path))
     {
         int      i      = 0;
         int      n      = Convert.ToInt32(ts.ReadLine());
         SqMatrix matrix = new SqMatrix(n);
         while (ts.Peek() >= 0)
         {
             var str = ts.ReadLine().Split(' ');
             int j   = 0;
             foreach (var item in str)
             {
                 matrix.Table[i, j++] = Convert.ToInt32(item);
             }
             ++i;
         }
         return(matrix);
     };
 }
예제 #3
0
        /// <summary>
        /// Возвращает минорную матрицу n-1 порядка по первой строке и заданному столбцу
        /// </summary>
        /// <param name="array">Исходная матрица</param>
        /// <param name="row">текущий(исключаемый) столбец</param>
        /// <param name="n">Порядкок исходной матрицы</param>
        /// <returns>minor - минорная матрица тип SqMatrix</returns>
        public static SqMatrix GetMinor(SqMatrix array, int row)
        {
            int n = array.N;

            if (n > 2)
            {
                SqMatrix minor = new SqMatrix(n - 1);

                int s = 0; int r = 0;
                for (int i = 1; i < n; i++)
                {
                    int j = 0;
                    do
                    {
                        if (j != row)
                        {
                            minor.Table[s, r] = array.Table[i, j];
                            ++j; ++r;
                        }
                        else
                        {
                            ++j;
                            continue;
                        }
                    } while (j < n);
                    ++s; r = 0;
                }
                //minor.Print();
                return(minor);
            }
            else
            {
                Console.WriteLine("Для данной матрицы не может быть вычислена минорная - порядок меньше 3");
                return(array);
            }
        }