Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2020, 18:19   #1
Крис2001
Новичок
Джуниор
 
Регистрация: 19.04.2020
Сообщений: 2
По умолчанию Определитель матрицы 8х8

Привет ребят) подскажите как рассчитать определитель матрицы 8х8, желательно с примером
Крис2001 вне форума Ответить с цитированием
Старый 20.04.2020, 10:57   #2
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

А как это в математике делается знаете?
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 20.04.2020, 21:26   #3
Крис2001
Новичок
Джуниор
 
Регистрация: 19.04.2020
Сообщений: 2
По умолчанию

Mad_Cat, Знаю, сложно делается
Крис2001 вне форума Ответить с цитированием
Старый 20.04.2020, 21:44   #4
dirty socks 2007
Новичок
Джуниор
 
Регистрация: 20.04.2020
Сообщений: 2
Стрелка Есть ссылка на сайт, если я тебя правильно понял

https://matworld.ru/calculator/matri...ant-online.php
Должно помочь
dirty socks 2007 вне форума Ответить с цитированием
Старый 26.04.2020, 22:35   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Код:
using System;
using System;
using System.Diagnostics;
using System.Text;
 
namespace Matrices {
    static class Matrix {
        /// <summary>
        /// Метод выполняющий перестановку в массиве целых чисел
        /// </summary>
        /// <param name="numList"></param>
        /// <remarks>Массив изначально должен быть отсортирован по возрастанию.</remarks>
        /// <returns></returns>
        static public bool NextPermutation(int[] numList) {
            /*
             Knuths
             1. Ищем максимальный индекс j такой, что a[j] < a[j + 1]. Если такого индекса нет, то перестановка последняя.
             2. Найти наибольший индекс l такой, что a[j] < a[l]. Т.к. j + 1 при этом существует, 
             * то l всегда удовлетворяет условию j < l
             3. Меняем местами a[j] и a[l].
             4. Разворачиваем последовательность, начиная a[j + 1] пока не войдёт последний элементa[n].
             */
 
            //1.
            int largestIndex = -1;
            for (int i = numList.Length - 2; i >= 0; i--) {
                if (numList[i] < numList[i + 1]) {
                    largestIndex = i;
                    break;
                }
            }
 
            if (largestIndex < 0) return false;
            //2.
            int largestIndex2 = -1;
            for (var i = numList.Length - 1; i >= 0; i--) {
                if (numList[largestIndex] < numList[i]) {
                    largestIndex2 = i;
                    break;
                }
            }
            //3.
            int tmp = numList[largestIndex];
            numList[largestIndex] = numList[largestIndex2];
            numList[largestIndex2] = tmp;
            //4.
            for (int i = largestIndex + 1, j = numList.Length - 1; i < j; i++, j--) {
                tmp = numList[i];
                numList[i] = numList[j];
                numList[j] = tmp;
            }
 
            return true;
        }
 
        /// <summary>
        /// Метод вычисления определителя матрицы по основному определению.
        /// </summary>
        static public double GetDeterminant(double[,] m) {
            if (m.GetLength(0) != m.GetLength(1))
                throw new ArgumentException("Для поиска определителя матрица должна быть квадратной.");
 
            double result = 0, prod = 1;
            /// Массив индексов. Выполняя в нём перестановки
            /// будем получать все возможные комбинации для произведения элементов матрицы
            int[] indices = IndicesMatrix(m.GetLength(0));
 
            int sign = 0;
            /// Для вывода результирующей строки
            StringBuilder sb = new StringBuilder();
 
            do {
                for (int i = 0; i < m.GetLength(0); i++) {
                    sb.AppendFormat("{0}m{1}{2}", (i == 0 ? string.Empty : "*"), i, indices[i]);
                    prod *= m[i, indices[i]];
                }
 
                sign = (int)Math.Pow(-1, Inversions(indices));
                result += sign * prod;
 
                sb.AppendFormat(" {0} ", sign > 0 ? "+" : "-");
 
                prod = 1;
            } while (NextPermutation(indices));
 
            sb.Remove(sb.Length - 3, 3);
            Debug.WriteLine("result = {0}", sb);
 
            return result;
        }
 
        /// <summary>
        /// Метод для получения исходного массива индексов
        /// </summary>
        /// <param name="n">Размерность массива индексов</param>
        static private int[] IndicesMatrix(int n) {
            int[] result = new int[n];
            for (int i = 0; i < n; i++) result[i] = i;
            return result;
        }
 
        /// <summary>
        /// Метод для определения чётности или нечётности перестановки
        /// </summary>
        /// <remarks>Перестановка называется чётной, если число инверсий в ней чётно,
        /// и нечётной — в противном случае. Инверсию образуют два числа в перестановке,
        /// когда меньшее из них расположено правее большего</remarks>
        static private int Inversions(int[] m) {
            int result = 0;
            for (int i = 0; i < m.Length; i++)
                for (int j = i + 1; j < m.Length; j++)
                    if (m[i] > m[j]) result++;
            return result;
        }
    }
}
Пример использования
Код:
using System;
using System.Collections.Generic;
using Matrices;
 
namespace ConsoleApplication1 {
    class Program {
 
        static void Main(string[] args) {
            double[,] m = new double[5, 5];
            FillMatrix(m);
            PrintMatrix(m);
            double det = Matrix.GetDeterminant(m);
            Console.WriteLine("Определитель равен {0}.", det);
            Console.Read();
        }
 
        /// <summary>
        /// Заполнение матрицы случайными числами
        /// </summary>
        static void FillMatrix(double[,] m) {
            int n = m.Length;
            Random rnd = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < m.GetLength(0); i++) {
                for (int j = 0; j < m.GetLength(1); j++) {
                    m[i, j] = rnd.Next(n);
                }
            }
        }
 
        /// <summary>
        /// Вывод матрицы на экран.
        /// </summary>
        static void PrintMatrix(double[,] m) {
            for (int i = 0; i < m.GetLength(0); i++) {
                for (int j = 0; j < m.GetLength(1); j++)
                    Console.Write("{0,-4}", m[i, j]);
                Console.WriteLine();
            }
        }
    }
}
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определитель матрицы пхп Гюргий Паскаль, Turbo Pascal, PascalABC.NET 4 26.12.2017 19:54
Определитель матрицы nxn Andrew2012 Паскаль, Turbo Pascal, PascalABC.NET 4 09.05.2015 18:08
Определитель матрицы на С GT_NiNo Помощь студентам 0 21.10.2011 18:53
Определитель матрицы Rekky Свободное общение 10 24.05.2011 20:40
Определитель матрицы на PHP DenisShash Помощь студентам 1 11.01.2011 08:30