Определитель матрицы

Публикация № 237976 28.11.13

Разработка - Математика и алгоритмы

Определитель матрица

Представлена программная реализация вычисления определителя матрицы посредством языка запросов 1С. Даны два метода:
1) прямой, на основе определения
2) метод Гаусса, приведение к диагональному виду с вычислением произведения диагональных элементов.

В обновленной версии в случае целочисленных элементов для метода Гаусса проводится полная факторизация всех чисел, участвующих в вычислениях.

Не озабочиваясь областью применения,  предлагаю ознакомиться с прилагаемой Обработкой "Определитель матрицы".

Описание

Исходная матрица А порядка n задается естественным образом в виде квадратной таблицы элементов. Предусмотрена генерация случайных элементов с опциями: диапазон значений элементов, только неотрицательные, единичная матрица.

Матрицу можно выгрузить в формате Excel стандартным способом и загрузить обратно. (Я применял данную выгрузку для проверки правильности вычислений, загружая в пакет Mathematica.)

Расчет можно проводить двумя методами, для каждого из которых опционально рассмотрены 2 технических способа.

Предусмотрено сравнение результатов расчета.

Работа с матрицами ведется в формате временных таблиц структуры i,j,elem, где i,j - индексы элемента матрицы, elem - значение элемента. Начало данному представлению положено в статье  Умножение матриц пакетным запросом.

 Алгоритмы

 I. Прямой метод.

 Основной запрос,  формируемый (n-1)  раз в цикле, имеет вид

	"ВЫБРАТЬ  
	| Таб1.iA  Как iA, Таб1.jA  Как jA, Таб2.i КАК i, Таб2.j КАК j, Таб2.elem КАК elem , Таб1.Произведение * Таб2.elem Как Произведение,
	| Таб1.ПерестановкаИндексовСтрока + Таб1.jСтрока как ПерестановкаИндексовСтрока, Таб2.jСтрока как jСтрока,
	| Выбор Когда Таб2.jНовый > Таб1.jНовый Тогда Таб2.jНовый-1 Иначе Таб2.jНовый Конец  КАК jНовый,
	| Выбор Когда ВЫРАЗИТЬ((Таб1.jНовый)/2 КАК ЧИСЛО(15, 0)) = (Таб1.jНовый)/2 Тогда -1 Иначе 1 Конец * Таб1.Знак как Знак
	| Поместить Миноры 
	| ИЗ Миноры_Предок Как Таб1 Внутреннее соединение Миноры_Предок Как Таб2 
	| По Таб1.i = &i И Таб1.ПерестановкаИндексовСтрока = Таб2.ПерестановкаИндексовСтрока И Таб1.j <> Таб2.j И Таб1.i <> Таб2.i;"

Завершающий запрос, сумма произведений элементов строки на  их алгебраические дополнения:

	"Выбрать  Выбор Когда ВЫРАЗИТЬ((Миноры.iA)/2 КАК ЧИСЛО(15, 0)) = (Миноры.iA)/2 Тогда -1 Иначе 1 Конец * 
	| Сумма(Миноры.Знак * Миноры.Произведение * Миноры0.elem ) Как Значение 
	| Поместить Определитель
	| из Миноры как Миноры 
	| Левое соединение Миноры0 Как Миноры0 По Миноры.iA = Миноры0.iA И Миноры.jA = Миноры0.jA
	| Сгруппировать по Миноры.iA" 

В представленном коде соединение таблиц осуществляетя по строковому полю ПерестановкаИндексовСтрока, получаемому при помощи конкатенации строковых представлений индексов столбцов j:  Таб1.ПерестановкаИндексовСтрока + Таб1.jСтрока.
Опционально можно заменить Соединение на другое, по числовому полю ( Таб1.ПерестановкаИндексов *10 + Таб1.j)  как ПерестановкаИндексов. Но в этом случае вычисления ограничены 10-м порядком.

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

Эффективность метода в интервале n < 11 (для матриц с единичными по модулю элементами; при увеличении модулей эффективный интервал уменьшается).  Около этой границы начинаются тормоза и переполнение памяти. Видимо, это связано с тем, что количество слагаемых, входящих в определение детерминанта, равно факториалу порядка матрицы n!. То есть 10! = 3 628 800, 11! =39 916 800  и т.п. операций\строк.

II. Метод Гаусса.

Запрос не выношу в статью, поскольку слабо читаем.
К тому же, здесь не обошлось без применения менеджера временных таблиц и обработки результатов запросов.
Кому интересно - код обработки открыт.

Данный метод сводит исходную матрицу к треугольной и подсчитывает произведение диагональных элементов.
На самом деле в результате преобразований получается "почти треугольная матрица", которую можно сделать треугольной, проведя перестановку строк в конце процедуры, за одним подсчитав число инверсий этой перестановки. Нам нужно даже не число этих инверсий, а четность\нечетность этого числа. И все для того, чтобы сделать последнюю операцию - коррекцию знака определителя (+\-), так как произведение диагональных элементов уже подсчитано в процессе "диагонализации".
Метод нахождения инверсий дан в статье Инверсии перестановок.

Оба метода должны работать для матриц с любыми вещественными элементами. (Однако в обработке стоит ограничение только на целые числа.)

Для порядков более 12 подсчет становится проблематичным и для метода Гаусса из-за "ошибки переполнения", хотя и дает в некоторых случаях лучшие результаты по сравнению с прямым методом.

Для частного случая целочисленных элементов матрицы можно еще несколько улучшить результат, используя вынесение общего множителя элементов строки, с последующим домножением в конце итерации. Для этого каждый из элементов строки раскладывается в произведение простых делителей.
Метод нахождения простых делителей числа дан в статье Факторизация числа.
В этом случае становятся ощутимо доступны для вычисления еще несколько порядков. (Все выводы даются на основе статистики только по матрицам с элементами -1,0,1,;  для больших величин результаты ухудшаются)

Благодаря этому становится возможным вычислить такие фантастические примеры как на нижепредставленном скрине, где n = 25, со временем вычисления 150 сек (105сек. в Версии 1.1). Однако, такие случаи редки.

 


 

Думаю, предложенные алгоритмы можно оптимизировать, улучшив показатели времени вычисления, читаемости кода и т.п. Однако, это дело времени и энтузиазма. А пока, кому интересно, прошу смотреть, эксперементировать, рационализировать!

Версия1.0. 
Рассчет определителя матрицы А прямым способом и методом Гаусса.
Для случая целочисленных элементов матрицы в методе Гаусса предусмотрена факторизация, с целью избежать ошибок переполения при больших порядках матрицы\больших значениях исходных элементов.
Факторизация проводится частично только для элементов преобразованной на каждом шаге матрицы.

Версия1.1. 
Добавлено сравнение результатов вычисления по методам Прямой - Гаусса, для отладки, с целью проверки правильности вычислений.
Факторизация в методе Гаусса проводится полностью для всех целых чисел, участвующих в вычислениях.

 

 


 

P.S.: Большой респект автору tezin за разработку консоли запросов //infostart.ru/public/72969/ , без которой бы данная работа не состоялась.

Скачать файлы

Наименование Файл Версия Размер
Определитель матрицы

.epf 24,83Kb
16
.epf 1.1 24,83Kb 16 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. WKBAPKA 214 28.11.13 13:13 Сейчас в теме
всегда даю плюсы за не понятные мне вещи :)
y22-k; bulpi; cleaner_it; +3 Ответить
2. bayce 41 01.03.14 22:19 Сейчас в теме
(1) WKBAPKA,
полностью с вами согласен
3. jigourt 31 01.03.14 22:47 Сейчас в теме
(1) WKBAPKA, (2) bayce, программисты не знающие математику? ))
LuxVeritatis; pumbaE; +2 Ответить
4. pumbaE 01.03.14 23:19 Сейчас в теме
5. jigourt 31 01.03.14 23:35 Сейчас в теме
(4) pumbaE, ну я же спросил, если бы был уверен, что программисты, тогда утверждал бы )
6. LuxVeritatis 18.11.14 15:23 Сейчас в теме
В свое время делал на С++, ввод/вывод в командной строке. Потом кому-то помогал делать на Делфи. У одной знакомой видел в Excele. Нет, круто конечно, но бесполезно
7. zaxarovsky 108 18.11.14 15:41 Сейчас в теме
(6) Obscurus, ну может пригодится кому игрушечка :)
Оставьте свое сообщение

См. также

"Жизнь" Конвея и другие клеточные автоматы

Игры Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Я думаю, нет нужды представлять математика Джона Конвея и его "Game of Life" - игру "Жизнь". Предлагаю вспомнить эту игру, а также другие "жизне"-подобные клеточные автоматы. К статье приложен файл с реализацией этой игры.

1 стартмани

22.03.2023    3481    6    Alxby    16    

17

АВС-анализ и табличное программирование

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Абонемент ($m)

Представлен простейший алгоритм решения задачи АВС-анализа. На данном примере продемонстрирован метод табличного программирования, описанный в книге "Совершенный код. Мастер-класс", автор Стив Макконнелл.

2 стартмани

16.12.2022    2176    RustIG    6    

15

Почему НДС отличается на одну копейку: решение с помощью таблицы значений

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 НДС Абонемент ($m)

Почему все-таки иногда НДС может на одну копейку быть больше или же быть меньше, неужели это все ошибки программистов, которые написали неправильный алгоритм? в этом решении постараюсь вас приблизить к бинарному алгоритму, который считает после запятой тысячными или сотыми, как и обещал, не ради денег и не ради славы, а для продвижения индустрии компьютерных технологий!

1 стартмани

12.12.2022    2436    0    kucar_ip    5    

2

Если хочется низко-низкоуровневого программирования с битами и байтами

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

Все знают, что подавляющее большинство современных компьютеров работает в двоичном коде, т.е. оперирует всего двумя значениями - битами - "0" и "1". Потом из них складываются байты, слова, кило-, мега- и гигабайты etc. Но что происходит внутри процессора, как именно обрабатываются двоичные числа, например выполняются арифметические операции? Об этом — в публикации. Статья, я думаю, будет особенно интересна тем читателям, у которых во время обучения не было соответствующих курсов.

1 стартмани

01.12.2022    984    Alxby    16    

10

Найди слова

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример примитивной автоматизации с помощью 1С (и не только).

3 стартмани

11.08.2022    3113    0    SerVer1C    10    

5

Если хочется ООП с наследованием и полиморфизмом

Математика и алгоритмы Языки и среды Платформа 1С v8.3 Абонемент ($m)

Объектно-ориентированное программирование (ООП), как методология или парадигма, в 1С отсутствует. И не похоже, чтобы в ближайшем будущем оно появилась. Однако со стороны сообщества не прекращаются попытки привнести в процесс разработки некоторые его элементы и подходы. Предлагаю вашему вниманию свой вариант эмуляции ООП. Основной упор в статье сделан на обеспечение наследования и полиморфизма (вызов методов, определенных в классах-потомках, из методов классов-предков и наоборот).

1 стартмани

21.07.2022    3909    1    Alxby    11    

10

Если хочется функционального программирования с функциями высшего порядка и map, filter, reduce

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Абонемент ($m)

Как известно, 1С не поддерживает парадигму функционального программирования (если не учитывать обработчики оповещений). Но часть элементов этого самого функционального программирования можно эмулировать. В статье рассмотрен способ такой эмуляции и приложена конфигурация с реализацией.

1 стартмани

07.07.2022    2575    Alxby    42    

19

IDN и Punycode в 1С

Универсальные функции Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка "Punycode конвертер".

1 стартмани

01.05.2022    3519    2    SpaceOfMyHead    2    

8

Реализация задачки с собеседования: найти максимальное число, но не более, чем ограничено параметром

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация небольшой задачки с собеседования: найти максимальное число в матрице чисел размерностью M*N, заполненной случайными числами, но не большее, чем задано ограничивающим параметром. Сразу скажу, это не с моего собеседования. Просто интересно было решить ее на платформе 1С.

1 стартмани

31.03.2022    3962    0    serverstar    15    

2

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    6155    6    kalyaka    11    

36

Вычисление хеша по алгоритму fnv1a

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Вычисление средствами платформы хеш суммы по алгоритму fnv1a 32/64.

1 стартмани

01.02.2022    3772    0    dim_zal    0    

5

Решение задачи Эйнштейна на 1С (управляемые формы)

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Пример решения классической задачи Эйнштейна с задаваемыми условиями и с выводом итераций на управляемых формах.

1 стартмани

13.08.2021    5178    2    VGorkunov    4    

8

Работа с абстрактным массивом

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Россия Абонемент ($m)

Абстрактные типы данных и алгоритмы уверенно набирают популярность в языках общего назначения. Встроенный язык 1С является предметно-ориентированным и не спешит развиваться в сторону поддержки абстракций. Однако потребность в них существует, т.к. задачи, решаемые на платформе, не уступают разнообразию из других ЯП. Предлагаю рассмотреть вариант реализации абстрактного массива в 1С.

1 стартмани

07.07.2021    6677    kalyaka    57    

31

Разработка с учетом Показателей

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Время от времени приходится разрабатывать алгоритмы расчета с некоторыми условными значениями. Я их называю Показателями. Данная статья предлагает один из методов работы с Показателями.

1 стартмани

04.06.2021    5207    0    blockcode    1    

1

Машинное обучение и анализ данных

Математика и алгоритмы Идеи и тренды в разработке Платформа 1С v8.3 Абонемент ($m)

Данная конфигурация предназначена для автоматизации процесса машинного обучения и анализа данных средствами 1С.

1 стартмани

04.05.2021    8477    19    cdrw3    11    

15

Алгоритм и обработка для проведения розыгрыша среди анкет

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Описанный алгоритм (и приложенная обработка) позволяют организовать проведение розыгрыша среди анкет практически на любой управляемой конфигурации и платформе 1С 8.

1 стартмани

12.03.2021    4828    0    delta    2    

2

Алгоритм Карацубы

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализация метода Карацубы - функции быстрого умножения, которая позволяет перемножать два n-значных числа с битовой вычислительной сложностью (реализация на платформе 1С:Предприятие 8.3 (8.3.9.2233))

1 стартмани

31.08.2020    4810    2    Tatsiana    3    

3

Решение задачи Эйнштейна на платформе 1с

Математика и алгоритмы Платформа 1С v8.3 Абонемент ($m)

Недавно мне попалась интересная задача по созданию обработки, которая будет решать "задачу Эйнштейна". Изначально кажется, что можно просто прописать все явные и неявные условия через "Если", но это не верно. При таком подходе задачу решает ваш мозг, а решить задачу должна сама обработка основываясь только на условиях явно прописанных в тексте. Разработчик не должен делать никаких выводов и прописывать косвенные условия вытекающие из условия задачи. Условия задачи в коде должны переставляться в любом сочетании и это не должно влиять на решение.

1 стартмани

12.08.2020    6293    4    itmind    2    

7

Пример программирования методом Конечных автоматов на базе написания парсера CSV

Математика и алгоритмы Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Способ реализации программирования методом Конечного автомата на примере написания парсера CSV-файла с обработкой двойных кавычек и многострочным текстом в ячейках.

1 стартмани

17.06.2020    7055    0    Salimbek    3    

3

Расчет времени циклов солнца

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Расчет времени восхода, полдня, заката и прочих стадий движения светила на горизонте.

1 стартмани

25.05.2020    3989    0    116hrus    0    

2

Treemapping. Демонстрационная обработка

Математика и алгоритмы Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример реализации диаграммы вида Treemap на 1С

1 стартмани

27.02.2020    8911    19    randomus    4    

30

Генератор случайных чисел по заданному закону распределения

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Для реализации проекта по имитационному моделированию возникла необходимость в функции, которые бы создавали массив случайных чисел, сгенерированных по определенным законам. Предлагаю обработку, которая содержит необходимые функции и средства визуализации. Работает в любой конфигурации.

1 стартмани

06.01.2020    5001    5    WalterFOX    1    

3

Алгоритмы поиска пути в графе. Часть 2

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Новые возможности, ранее реализованных алгоритмов поиска пути в графе на платформе 1С 8.3.

1 стартмани

13.08.2019    13878    11    RonX01    10    

92

10 способов получить модуль числа (а может, и больше)

Математика и алгоритмы Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пишем функцию вычисления модуля числа. Сколько способов существует? Давайте посчитаем!

1 стартмани

11.07.2019    26654    sam441    38    

56

Алгоритмы поиска пути в графе

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Реализуем алгоритмы поиска пути в графе на платформе 1С 8.3, такие как алгоритм А*, поиск в ширину, жадный поиск, алгоритм Дейкстры и вконце волновой.

1 стартмани

09.07.2019    29617    14    RonX01    11    

116

Собственный алгоритм нумерации документов определенного вида

Математика и алгоритмы Платформа 1С v8.3 1С:Бухгалтерия 3.0 Россия Абонемент ($m)

Создание собственного, отличного от платформенного алгоритма нумерации документов определенного вида.

1 стартмани

11.04.2019    7205    xan333    12    

5

Сортировка кучей (пирамидальная сортировка, heap sort)

Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Алгоритм сортировки массива кучей (пирамидальная сортировка).

1 стартмани

29.03.2019    6885    4    FirstSmart    0    

5

Случайная неслучайная скидка

Ценообразование, анализ цен Математика и алгоритмы Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Абонемент ($m)

Найти случайное число, но сделать так, чтобы чем меньше значение, тем чаще выпадало это число (с обратной экспоненциальной зависимостью).

1 стартмани

24.01.2019    4593    0    Hokum    1    

1

Основы компьютерной графики (Часть 2)

Математика и алгоритмы Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Статья является продолжением публикации "Основы компьютерной графики". Во второй части будут рассмотрены следующие темы: 1. Преобразования в трехмерном пространстве. 2. Ортографическая проекция трехмерного изображения на экран. 3. Определение, какой поверхностью (лицевой/задней) проецируется грань на экран. 4. Перспективная проекция.

1 стартмани

03.08.2018    7018    HAMMER_59    13    

14

Основы компьютерной графики

Математика и алгоритмы Работа с интерфейсом Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Статья предназначена для тех, кто совсем не знаком с компьютерной графикой. В статье даны следующие преобразования: перемещение, поворот, масштабирование, проекцирование, переход между различными системами координат. Пример работы с графикой реализован во внешней 1С обработке.

1 стартмани

30.07.2018    8841    HAMMER_59    39    

25

Любое число больше 7 можно разложить на сумму троек и пятерок

Математика и алгоритмы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Наткнулся в интернете на школьную задачу: "Докажите, что любое число больше 7 можно представить в качестве суммы чисел 3 и 5". Представляю решение на 1С. (есть рекурсия, пример работы с событием ИзменениеТекстаРедактирования).

1 стартмани

06.07.2018    7251    Eskimos    6    

6

Итераторы выборки

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обход результата запроса можно сделать по группировкам и по полям. В первом случае используются итоговые записи, во втором - линейный список. Еще можно обходить коллекцию элементов строк, однако в этом случае никаких дополнительных средств обхода, кроме детального, платформа не предоставляет. В статье рассматривается решение, расширяющее возможности стандартных средств обхода результата запроса, а также применимое для обхода коллекции строк.

1 стартмани

16.05.2018    10468    kalyaka    10    

9

Строим "фасады" в 1С

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Как реализовать функционал, чтобы не было “мучительно больно” при расширении требований.

1 стартмани

04.05.2018    19009    ktb    41    

67