2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 14:50 


17/09/10
5
Здравствуйте, уважаемые форумчане.

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

Спасибо.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 15:17 
Заслуженный участник


08/04/08
8556
Считать так же, но по модулю 2 (для каждого числа брать остаток от деления на 2). Если у Вас обратная матрица целочисленная, можно взять ее элементы по модулю 2, получится то, что надо, иначе - нет.

-- Пт сен 17, 2010 16:18:57 --

Соответствующий скрипт мне не известен.
Ручками легко $8 \times 8$ сосчитать самому.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 17:19 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Sonic86 в сообщении #353383 писал(а):
Ручками легко $8 \times 8$ сосчитать самому.

Угу. Метод Гаусса над полем $\mathbb{Z}_2$, за полчаса легко программируется.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 17:19 


17/09/10
5
Sonic86 в сообщении #353383 писал(а):
Считать так же, но по модулю 2

а если при вычислении мне надо что-то вычитать из чего-то - это нормально? Например, при попытке вычислить алгебраическое дополнение элемента получил (-1)+(-1) - надо их смело сложить по модулю 2 и получить ноль?

Sonic86 в сообщении #353383 писал(а):
Если у Вас обратная матрица целочисленная, можно взять ее элементы по модулю 2, получится то, что надо, иначе - нет.

Обратную пока так и не получил. то, что выдают скрипты - не целочисленное.
Брать все четные - 0, все нечетные - 1. Но если число меньше нуля, взять его модуль?

Sonic86 в сообщении #353383 писал(а):
Ручками легко $8 \times 8$ сосчитать самому.

А каким методом посоветуете?
Методом Гаусса - не получается чего-то. Да и строки надо складывать все по тому же модулю 2? перемножать их можно?
Через союзную матрицу - это надо посчитать 64 алгебраических дополнений (не назвал бы метод быстрым :-) ). И определитель, если не равен нулю, то равен 1, так?


P.S. А если взять то, что выдает мне стандартный скрипт, считающий методом Гаусса, домножить матрицу настолько, чтобы она стала целочисленной и привести ее элементы к виду "по модулю два" - выгорит?

-- Пт сен 17, 2010 18:20:49 --

Профессор Снэйп в сообщении #353412 писал(а):
Sonic86 в сообщении #353383 писал(а):
Ручками легко $8 \times 8$ сосчитать самому.

Угу. Метод Гаусса над полем $\mathbb{Z}_2$, за полчаса легко программируется.


в том-то и проблема, что я не разу не программист. К своему стыду.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 17:23 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
totor в сообщении #353414 писал(а):
Методом Гаусса - не получается чего-то.

Элементарно должно получаться. Если матрица, конечно, невырожденная :-)

-- Пт сен 17, 2010 21:29:03 --

totor в сообщении #353414 писал(а):
Да и строки надо складывать все по тому же модулю 2?

Конечно, само собой!!!

Просто забудьте про другие числа, кроме $0$ и $1$. И дополнительное равенство $1 + 1 = 0$ имейте в виду. Вычитание и сложение --- одна и та же операция.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 17:30 


17/09/10
5
Профессор Снэйп в сообщении #353419 писал(а):
totor в сообщении #353414 писал(а):
Методом Гаусса - не получается чего-то.

Элементарно должно получаться. Если матрица, конечно, невырожденная :-)



Невырожденная. Вроде я пока не совсем умом тронулся.:)
Вообще суть метода Гаусса - крутить-вертеть и попытаться чуть ли не интуитивно получить единичную матрицу, или есть какой-то общий алгоритм? Я просто уже года 4, как за это не брал в руки этих шашек - забыл напрочь.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 17:34 
Заслуженный участник


08/04/08
8556
Профессор Снэйп писал(а):
Sonic86 писал(а):
Ручками легко $8 \times 8$ сосчитать самому.

Угу. Метод Гаусса над полем $\mathbb{Z}_2$, за полчаса легко программируется.


(Оффтоп)

Я просто не люблю программировать, тем более метод Гаусса :-) там довольно много исключительных состояний.


totor писал(а):
а если при вычислении мне надо что-то вычитать из чего-то - это нормально? Например, при попытке вычислить алгебраическое дополнение элемента получил (-1)+(-1) - надо их смело сложить по модулю 2 и получить ноль?

Да, конечно. В любом кольце можно преспокойно складывать, вычитать и умножать.
totor писал(а):
А каким методом посоветуете?
Методом Гаусса - не получается чего-то. Да и строки надо складывать все по тому же модулю 2? перемножать их можно?

Метод Гаусса там лучше всего. Через алгебраические дополнения не надо, убиться можно.

totor писал(а):
P.S. А если взять то, что выдает мне стандартный скрипт, считающий методом Гаусса, домножить матрицу настолько, чтобы она стала целочисленной и привести ее элементы к виду "по модулю два" - выгорит?

Да, должно, если Вы ее умножаете на нечетное число (на него же потом поделить надо будет, а в $\mathbb{Z}_2$ это сделать нельзя)

Можете здесь попробовать написать от фонаря 0-1 матрицу $3 \times 3$ и обратить, а мы подскажем если что.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение17.09.2010, 18:00 


17/09/10
5
Sonic86 в сообщении #353425 писал(а):
Да, должно, если Вы ее умножаете на нечетное число (на него же потом поделить надо будет, а в это сделать нельзя)

Не понял. Вроде как на все умножать можно, пока все числа не станут целыми. Зачем потом на него делить, если это будет нельзя?

Sonic86 в сообщении #353425 писал(а):
Можете здесь попробовать написать от фонаря 0-1 матрицу и обратить, а мы подскажем если что.

Знаете, да. Действительно, надо просто поэкспериментировать. О результатах в понедельник, если получится, доложу. Спасибо.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 10:18 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
totor в сообщении #353422 писал(а):
Вообще суть метода Гаусса - крутить-вертеть и попытаться чуть ли не интуитивно получить единичную матрицу, или есть какой-то общий алгоритм?

Конечно же, есть общий алгоритм :-)

Элементарное преобразование --- домножение строки на ненулевое число, вычитание одной строки из другой.

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

P. S. Какого-то Вы плохого мнения о Гауссе. Король математиков туфту не придумает :-)

-- Сб сен 18, 2010 14:22:49 --

totor в сообщении #353435 писал(а):
Не понял. Вроде как на все умножать можно, пока все числа не станут целыми. Зачем потом на него делить, если это будет нельзя?

Если изначальная матрица была невырожденной по модулю $2$, то определитель --- нечётное число, и на чётные умножать/делить не понадобится.

-- Сб сен 18, 2010 14:24:07 --

Sonic86 в сообщении #353425 писал(а):
Я просто не люблю программировать, тем более метод Гаусса там довольно много исключительных состояний.

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

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 10:28 
Заслуженный участник


11/05/08
32166
Sonic86 в сообщении #353425 писал(а):
Да, должно, если Вы ее умножаете на нечетное число (на него же потом поделить надо будет, а в $\mathbb{Z}_2$ это сделать нельзя)

Можно. Это ведь не только кольцо, но ещё и поле.

Мне кажется, что тут какая-то путаница в обсуждении... А-а Профессор Снэйп меня уже опередил:

Профессор Снэйп в сообщении #353632 писал(а):
Если изначальная матрица была невырожденной по модулю $2$, то определитель --- нечётное число, и на чётные умножать/делить не понадобится.

Только не "то", а "тогда и только тогда".

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 10:30 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Кстати, такой естественный вопрос: сколько всего невырожденных бинарных матриц размера $n \times n$. Ясно, что
$$
(2^n - 1) \cdot (2^n - 2) \cdot (2^n - 4) \cdot \ldots \cdot (2^n - 2^{n-1})
$$
Как-нибудь к человеческому виду это произведение можно привести?

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 10:57 
Заслуженный участник


28/04/09
1933
Профессор Снэйп
Профессор Снэйп в сообщении #353637 писал(а):
Как-нибудь к человеческому виду это произведение можно привести?
Разве что так: $\prod\limits_{k=1}^{n-1}(2^n-2^k)=(-1)^n\cdot 2^{\frac{n(n-1)}{2}}\cdot (2;2)_n$, где $(a;q)_k$ - q-Pochhammer symbol.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 11:22 


24/03/07
321
метод Гаусса для бинарных матриц это вообще элементарщина. Нужно только складывать по модулю 2 и переставлять строки. Если матрицы не очень большие, то в C/C++ (да и других языках) можно использовать операцию XOR для побитового сложения по мод 2: a^b.
Т.е. алгоритм такой - строки матрицы кодируем целыми числами, а дальше используем XORы и перестановки в соответствии с методом Гаусса.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 11:27 
Заслуженный участник


11/05/08
32166
Dandan в сообщении #353661 писал(а):
можно использовать операцию XOR для побитового сложения по мод 2

Это так с точки зрения эффективности, но не очень наглядно -- в этом случае ещё маски придётся использовать и изменять.

 Профиль  
                  
 
 Re: Как найти обратную матрицу от бинарной?
Сообщение18.09.2010, 11:37 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Переставлять строки не обязательно, достаточно складывать :-)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group