Метод для вычисления минорной матрицы для заданного элемента - 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();
            }
        }
}

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


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

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

11   голосов , оценка 3.636 из 5
Похожие ответы