Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623

Есть ли нерекурсивный алгоритм вычисления детерминанта квадратной матрицы nxn?

02.11.2012, 22:48. Показов 3444. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я в алгебре очень слаб. В голове есть идея вычислить детерминант по перестановкам, но в голову не приходит алгоритм перебора всех перестановок. Есть идея разложить все по первой строке, но тогда придется делать это рекурсивно до тех пор, пока не встретится определитель 2x2, что выглядит не очень красиво, хотя я вряд ли буду вычислять определители выше 6 порядка. Но хотелось бы решить это элегантно. Есть ли у кого какие наработки?
У меня пока идея такова:
Заводим double det = 0; в которой будем хранить детерминант
для каждого элемента первой строки создать стэк "вычеркиваемых" строк/столбцов и до тех пор пока размер стэка не станет равным (n-2) ложить в него самый верхний левый элемент, среди "невычеркнутых" строк/столбцов. Когда стэк станет таким, то вычисляем этот простейший определитель и прибавляем к переменной det, далее удаляем вершину стэка и пытаемся сместиться относительно новой вершины правее, так чтобы эта столбец не был "зачеркнут", если ничего не выходит, то просто удаляем вершину и делаем все это до тех пор пока стэк не опустеет и первая строка, по которой мы производим разложение, не закончится

Добавлено через 16 минут
точнее здесь вместо стэка лучше подходит список, ведь в стэке нельзя производить поиск по значению
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2012, 22:48
Ответы с готовыми решениями:

Алгоритм вычисления определителя квадратной матрицы
Помогите с алгоритмом вычисления определителя матрицы nxn. Может у кого-то уже есть код на с++. Заранее благодарю.......

Алгоритм вычисления среднего арифметического элементов квадратной матрицы размером 5 на 5
Привет. Уезжаю срочно и далеко. Нужна помощь. Посмотрите также другие темы, если не сложно. Опишите на русском языке или одном из...

Разработать алгоритм и программу вычисления функции для элементов блока квадратной матрицы [A]
Дана задача, не могу понять, что в ней надо сделать:wall: Разработать алгоритм и программу вычисления функции для элементов блока...

6
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
07.11.2012, 14:52
Цитата Сообщение от Buckstabue Посмотреть сообщение
Есть ли нерекурсивный алгоритм вычисления детерминанта квадратной матрицы nxn?
Есть. Основан на методу Гаусса. Смысл в том, чтобы превратить нашу матрицу в верхне- или нижнетреугольную, применив к ней прямой ход метода Гаусса. Тогда определитель будет равен произведению всех элементов на её главной диагонали (потому что все остальные миноры при стандартном вычислении определителя через разложение на миноры будут умножаться на 0).

Добавлено через 3 минуты
А, ну ещё можно провести LU-разложение, которое достаточно похоже приведённый выше метод. В итоге исходная матрица разложится на две - L (нижнетреугольную) и U (верхнетреугольную). Определитель исходной матрицы равен произведению определителей L- и U-матрицы. Их же определители, как я сказал выше, равны произведению элементов на главных диагоналях.
0
 Аватар для Buckstabue
179 / 127 / 25
Регистрация: 12.01.2012
Сообщений: 623
07.11.2012, 18:31  [ТС]
silent_1991, я уже думал об приведении к диагональной, но боюсь погрешности будут скапливаться. Для их снижения придется еще проектировать класс дробей. А ни кто не располагает достаточно качественным, желательно шаблонным, классом дробей? Было бы супер
0
21 / 13 / 5
Регистрация: 04.11.2012
Сообщений: 89
Записей в блоге: 1
07.11.2012, 18:38
Для уменьшения погрешностей, которые будут накапливаться при вычислениях, могу могу посоветовать метод выбора ведущего элемента.

Основной алгоритм - метод Гаусса, но перед каждой итерацией вы выбираете самый большой элемент в столбике и меняете соответствующие строки местами. Очень хорошо ведет себя даже при слабо обусловленных матрицах)
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
07.11.2012, 18:55
Buckstabue, Вот тут
Найти все возможные перестановки цифр
есть алгоритмы перестановок. И рекурсивные, и не.
1
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
08.11.2012, 10:13
Цитата Сообщение от hoob Посмотреть сообщение
меняете соответствующие строки местами
Главное при этом не забыть, что каждая перестановка меняет знак определителя на противоположный.
0
21 / 13 / 5
Регистрация: 04.11.2012
Сообщений: 89
Записей в блоге: 1
08.11.2012, 13:00
Цитата Сообщение от silent_1991 Посмотреть сообщение
Главное при этом не забыть, что каждая перестановка меняет знак определителя на противоположный.
Это само собой, так же еще нужно учитывать на что делим и умножаем)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.11.2012, 13:00
Помогаю со студенческими работами здесь

Число элементов выше главной диагонали квадратной матрицы NxN
есть матрица NxN, нужно определить число элементов выше ее главной диагонали( не включая диагональ). Подскажите формулу, не могу вывести.

Подсчет суммы элементов квадратной матрицы размера NxN, находящихся выше главной диагонали
Помогите написать программу для подсчета суммы элементов квадратной матрицы размера NxN, находящихся выше главной диагонали.

Ошибка "Нарушение доступа для записи" при выделение памяти для поиска детерминанта квадратной матрицы
Добрый день! Делаю простое приложение по поиску детерминанта квадратной матрицы. Чтобы искать детерминант матрицы с размерностью больше...

Составить алгоритм и программу для нахождения элементов матрицы размерностью NxN
Составить алгоритм и программу для нахождения элементов матрицы размерностью NxN и Найти количество нулевых элементов матрицы, стоящих ниже...

Алгоритм Дейкстры для матрицы смежности А размером NxN, нарисовать блок-схему по коду
Здравствуйте! Помогите, пожалуйста, сделать блок -схему по готовому коду: #include "stdafx.h" #include <iostream> ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru