С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/41: Рейтинг темы: голосов - 41, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
1

Нахождение обратной матрицы

26.09.2013, 00:19. Показов 8341. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток! Хотел бы проконсультироваться с Вами по поводу нахождения обратной матрицы для определенной заданной. Стоит задача написать алгоритм шифрования методом Хилла. Для генерации ключа шифрования необходимо создать матрицу размерностью nxn, но для генерации ключа расшифрования необходимо найти обратную матрицу. Естественно, обе матрицы должны содержать значения, меньшие нежели кол-во символов в выбранном алфавите(в моем случае это число - 31), а так же эти значения всегда должны быть целыми. Как раз в этом заключается моя проблема. Когда я нахожу обратную матрицу, ее значения в большинстве своем не являются целыми числами. Не могли бы вы подсказать как найти обратную матрицу к исходной, ранее задав определенный модуль?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
26.09.2013, 00:19
Ответы с готовыми решениями:

Нахождение обратной матрицы N*N
Помогите пожалуйста написать программу для нахождения обратной матрицы N*N. Определитель матрицы я...

Нахождение обратной матрицы
есть матрица NxN нужно было много что с ней интересного сделать, сделал =) осталось только...

Нахождение обратной матрицы
Есть класс матрица (double), помогите написать код, для нахождения обратной матрицы NxN типа

Нахождение обратной матрицы в методе шифрования Хилла
Написал класс матрицу и метод нахождения(недописал) обратной матрицы - inverseMatrix Проблема в...

12
Заблокирован
26.09.2013, 08:35 2
Цитата Сообщение от Писарев Иван Посмотреть сообщение
не являются целыми числами
а не надо недоделанную обратную матрицу раньше времени на определитель делить, сначала умножить на старое произведение, а уж потом делить
Цитата Сообщение от Писарев Иван Посмотреть сообщение
в моем случае это число - 31
что за народности алфавит? 26+10 и то больше получается
0
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
30.09.2013, 20:47  [ТС] 3
Не совсем понял, что значит недоделанную?
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.09.2013, 20:53 4
MansMI, на константу можно умножать в любой момент, от этого произведение не поменяется.

Писарев Иван, что значит "задав определенный модуль"?
0
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
30.09.2013, 20:57  [ТС] 5
Матрица берется над кольцом целых чисел, притом элементы матрицы должны принадлежать диапозону от 0 до N, где N мы задаем сами.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.09.2013, 21:03 6
Писарев Иван, покажите вашу матрицу и как вы находите обратную

Добавлено через 1 минуту
А вообще в общем случае они не целые.
0
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
30.09.2013, 21:10  [ТС] 7
Обратная матрица и криптосистема Хилла обратную матрицу я нахожу по данному алгоритму. Но загвоздка вот в чем:

Цитата Сообщение от iifat Посмотреть сообщение
Нам надо https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac19 заменить умножением на какое-то число. Поэтому надо найти x такое, чтобы https://www.cyberforum.ru/cgi-bin/latex.cgi?9x=1 в исчислении остатков по модулю, в нашем случае, 26. Соответственно, ищем (в данном случае -- подбором) 3*9=27.

Hе всегда можно найти такой x.

Добавлено через 1 минуту
Могу кинуть весь код нахождения обратной матрицы.
0
Заблокирован
30.09.2013, 21:12 8
Цитата Сообщение от Psilon Посмотреть сообщение
на константу можно умножать в любой момент
можно, но ТС почему то нужны целые числа в обратной матрице
0
Администратор
Эксперт .NET
9624 / 4768 / 762
Регистрация: 17.04.2012
Сообщений: 9,620
Записей в блоге: 14
30.09.2013, 21:13 9
Цитата Сообщение от Писарев Иван Посмотреть сообщение
Могу кинуть весь код нахождения обратной матрицы
Да, будем рады.
Цитата Сообщение от Писарев Иван Посмотреть сообщение
Hе всегда можно найти такой x
х можно найти всегда, кроме случая
https://www.cyberforum.ru/cgi-bin/latex.cgi?0x=n, n\neq 0
0
0 / 0 / 0
Регистрация: 05.09.2012
Сообщений: 44
30.09.2013, 21:16  [ТС] 10
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
static int Opredelitel(int[,] matrix, int N)
        {
            int opredelitel = 0;
            if (N != 1)
            {
                for (int i = 0; i < N; i++)
                {
                    if (i % 2 == 0) opredelitel += matrix[0, i] * Opredelitel(CopyMatrix(matrix, N, 0, i), N - 1);
                    else opredelitel -= matrix[0, i] * Opredelitel(CopyMatrix(matrix, N, 0, i), N - 1);
                }
            }
            else return (matrix[0, 0]);
            return (opredelitel);
        }
 
        static int[,] MatrixMinor(int[,] fmatrix, int N)
        {
            int[,] smatrix = new int[N, N];
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    smatrix[i, j] = Opredelitel(CopyMatrix(fmatrix, N, i, j), N - 1);
                }
            }
            return (smatrix);
        }
 
        static int[,] Transponiruem(int[,] fmatrix, int N)
        {
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    if ((i + j) % 2 != 0) fmatrix[i, j] *= (-1);
                }
            }
            int[,] smatrix = new int[N, N];
            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    smatrix[j, i] = fmatrix[i, j];
                }
            }
            return (smatrix);
        }
 
        public static int ConvertTo31(int value)
        {
            int cel = value / Alpthavit.CountAlphavit;
            if (value > 0)
            {
                value -= cel * Alpthavit.CountAlphavit;
            }
            else
            {
                if (Math.Abs(cel) != 0) value += (Math.Abs(cel) + 1) * Alpthavit.CountAlphavit;
                else value = 0;
            }
            return (value);
        }
 
        public static void ConvertMatrixTo31(ref int[,] matrix, int N)
        {
            for(int i=0; i<N; i++)
            {
                for(int j=0; j<N; j++)
                {
                    matrix[i, j] = ConvertTo31(matrix[i, j]);
                }
            }
        }
 
        static int PoiskOpr(int opr)
        {
            for(int i=0; i<10000000; i++)
            {
                if ((i * opr) % Alpthavit.CountAlphavit == 1) return (i);
            }
            return (-1);
        }
 
        static int[,] ObrMatrix(int[,] matrix, int N, int opr)
        {
            opr = PoiskOpr(opr);
            if (opr == -1) return (null);
            for(int i=0; i<N; i++)
            {
                for(int j=0; j<N; j++)
                {
                    matrix[i, j] *= opr;
                }
            }
            ConvertMatrixTo31(ref matrix, N);
            return (matrix);
        }
 
        public static int[,] FindingInverseMatrix(int[,] Matrix, int Count)
        {
            int opredelitel = ConvertTo31(Opredelitel(Matrix, Count));
            if (opredelitel == -1) return (null);
            if (opredelitel == 0) return (null);
            int[,] Mmatrix = MatrixMinor(Matrix, Count);
            int[,] TMmatrix = Transponiruem(Mmatrix, Count);
            int[,] obrMatrix = ObrMatrix(TMmatrix, Count, opredelitel);
            return (obrMatrix);
        }
Добавлено через 56 секунд
Alpthavit.CountAlphavit - кол-во символов в алфавите
0
4256 / 2952 / 688
Регистрация: 08.06.2007
Сообщений: 9,859
Записей в блоге: 4
30.09.2013, 21:21 11
Цитата Сообщение от Писарев Иван Посмотреть сообщение
Матрица берется над кольцом целых чисел, притом элементы матрицы должны принадлежать диапозону от 0 до N, где N мы задаем сами.
Это ваше заблуждение. Матрица берется над кольцом https://www.cyberforum.ru/cgi-bin/latex.cgi?{\mathbb Z}_n Почитайте сначала матчасть, а потом ставьте задание программистам.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
01.10.2013, 18:37 12
palva, ну кольцо целых это и есть Z. Человек оговорился или описался, потому что половина фразы верно построена
0
4256 / 2952 / 688
Регистрация: 08.06.2007
Сообщений: 9,859
Записей в блоге: 4
01.10.2013, 18:54 13
В том-то и дело, что мы работаем не с кольцом целых чисел, а с кольцом вычетов по модулю n.
Приведу пример: n=3. Кольцо состоит из трех вычетов 0,1 и 2. Следующая матрица
(12)
(02)
будет обратна самой себе. Любая матрица, определитель которой не равен нулю и взаимно прост с n, имеет обратную. В целых числах эта матрица обратной не имеет (будут дробные числа.)
2
01.10.2013, 18:54
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
01.10.2013, 18:54
Помогаю со студенческими работами здесь

Вечный "?" Создание обратной матрицы. Нахождение детерминанта
Возможно у кого- нибудь есть нормальный готовый код. Буду рад если дадите. Суть вот в чём. Я уже...

Вычислить матрицу обратную заданной и найти произведение обратной матрицы и исходной матрицы
Вычислить обратную матрицу заданной и найти произведение обратной матрицы исходной матрицы ....

Подскажите метод нахождения обратной матрицы и определителя матрицы
Подскажите метод нахождения обратной матрицы и определителя матрицы на С#

Нахождение обратной матрицы (перенести консольный код в форму)
Необходимо найти обратную матрицу { public partial class Form1 : Form { ...

Работа с Excel: функции - умножение матриц и нахождение обратной матрицы
Здравствуйте, подскажите, как подключить Excel к С# и достать от туда две функции это умножение...

Умножение матрицы на матрицу, и нахождение обратной матрицы
Здравствуйте! нужно написать программу, которая могла бы производить всякие операции над матрицами...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Блоги программистов
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­тиби­тный асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
Сравнение микросервисов и монолита
cpp_developer 03.01.2025
Достоинства и недостатки микросервисной архитектуры Микросервисная архитектура представляет собой современный подход к построению программных систем, где приложение разбивается на набор небольших. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru