Умножение матриц: различия между версиями
[непроверенная версия] | [отпатрулированная версия] |
→Алгоритмы быстрого перемножения матриц: человечество не стоит на месте! |
|||
(не показана 31 промежуточная версия 20 участников) | |||
Строка 39: | Строка 39: | ||
</math> |
</math> |
||
в которой: |
в которой: |
||
: <math> c_{ij} = \sum_{r=1}^m a_{ir}b_{rj} \;\;\; \left(i=1, 2, \ldots l;\; j=1, 2, \ldots n \right).</math> |
|||
: |
|||
называется их ''произведением''. |
называется их ''произведением''. |
||
Строка 101: | Строка 101: | ||
: <math>v'_i = \sum\limits_j A_{ij} v_j</math> |
: <math>v'_i = \sum\limits_j A_{ij} v_j</math> |
||
То есть линейный оператор оказывается представлен матрицей, векторы — векторами-столбцами, а действие оператора на вектор — матричным умножением вектора-столбца слева на матрицу оператора (это частный случай матричного умножения, когда одна из матриц — вектор-столбец — имеет размер <math>n\times 1</math>). |
То есть [[Линейное отображение|линейный оператор]] оказывается представлен матрицей, векторы — векторами-столбцами, а действие оператора на вектор — матричным умножением вектора-столбца слева на матрицу оператора (это частный случай матричного умножения, когда одна из матриц — вектор-столбец — имеет размер <math>n\times 1</math>). |
||
(Равно переход к любому новому базису при смене координат представляется полностью аналогичным выражением, только <math>v'_i</math> в этом случае уже не компоненты нового вектора в старом базисе, а компоненты старого вектора в новом базисе; при этом <math>A_{ij}</math> — элементы матрицы перехода к новому базису). |
(Равно переход к любому новому базису при смене координат представляется полностью аналогичным выражением, только <math>v'_i</math> в этом случае уже не компоненты нового вектора в старом базисе, а компоненты старого вектора в новом базисе; при этом <math>A_{ij}</math> — элементы [[Матрица перехода|матрицы перехода]] к новому базису). |
||
Рассмотрев последовательное действие на вектор двух операторов: сначала ''A'', а потом ''B'' (или преобразование базиса ''A'', а затем преобразование базиса ''B''), дважды применив нашу формулу, получим: |
Рассмотрев последовательное действие на вектор двух операторов: сначала ''A'', а потом ''B'' (или преобразование базиса ''A'', а затем преобразование базиса ''B''), дважды применив нашу формулу, получим: |
||
Строка 109: | Строка 109: | ||
= \sum\limits_k \sum\limits_j (B_{ij} A_{jk}) v_k, </math> |
= \sum\limits_k \sum\limits_j (B_{ij} A_{jk}) v_k, </math> |
||
откуда видно, что композиции ''BA'' действия линейных операторов ''A'' и ''B'' (или аналогичной композиции преобразований базиса) соответствует матрица, вычисляемая по правилу произведения соответствующих матриц: |
откуда видно, что композиции ''BA'' действия линейных операторов ''A'' и ''B'' (или аналогичной композиции преобразований базиса) соответствует матрица, вычисляемая по [[Правило произведения|правилу произведения]] соответствующих матриц: |
||
: <math> (BA)_{ik} = \sum\limits_j B_{ij} A_{jk}.</math> |
: <math> (BA)_{ik} = \sum\limits_j B_{ij} A_{jk}.</math> |
||
Строка 161: | Строка 161: | ||
== Алгоритмы быстрого перемножения матриц == |
== Алгоритмы быстрого перемножения матриц == |
||
Сложность вычисления произведения матриц по определению составляет <math>\ O(n^3)</math>, однако существуют более эффективные алгоритмы<ref>Кибернетический сборник. Новая серия. Вып. 25. Сб. статей 1983 — 1985 гг.: Пер. с англ. — М.: Мир, 1988 — В.Б. Алекссев. Сложность умножения матриц. Обзор.</ref>, применяющиеся для больших матриц. Вопрос о предельной скорости умножения больших матриц, также как и вопрос о построении наиболее быстрых и устойчивых практических алгоритмов умножения больших матриц остаётся одной из нерешённых проблем [[Линейная алгебра|линейной алгебры]]. |
Сложность вычисления произведения матриц по определению составляет <math>\ O(n^3)</math>, однако существуют более эффективные алгоритмы<ref>Кибернетический сборник. Новая серия. Вып. 25. Сб. статей 1983 — 1985 гг.: Пер. с англ. — М.: Мир, 1988 — В.Б. Алекссев. Сложность умножения матриц. Обзор.</ref>, применяющиеся для больших матриц. Вопрос о предельной скорости умножения больших матриц, также как и вопрос о построении наиболее быстрых и устойчивых практических алгоритмов умножения больших матриц остаётся одной из [[нерешённые проблемы математики|нерешённых проблем]] [[Линейная алгебра|линейной алгебры]]. |
||
* '''[[Алгоритм Штрассена]] (1969)''' |
* '''[[Алгоритм Штрассена]] (1969)''' |
||
: Первый алгоритм быстрого умножения больших матриц был разработан [[Штрассен, Фолькер|Фолькером Штрассеном]]{{source-ref|Q21694537}} в 1969. В основе алгоритма лежит рекурсивное разбиение матриц на блоки ''' |
: Первый алгоритм быстрого умножения больших матриц был разработан [[Штрассен, Фолькер|Фолькером Штрассеном]]{{source-ref|Q21694537}} в 1969 году. В основе алгоритма лежит рекурсивное разбиение матриц на блоки '''2×2'''. Штрассен доказал, что матрицы '''2×2''' можно некоммутативно перемножить с помощью семи умножений, поэтому на каждом этапе рекурсии выполняется семь умножений вместо восьми. В результате асимптотическая сложность этого алгоритма составляет <math>O( n^{\log_{2}7}) \approx O(n^{2.81})</math>. Недостатком данного метода является бо́льшая сложность программирования по сравнению со стандартным алгоритмом, слабая численная устойчивость и больший объём используемой памяти. Разработан ряд алгоритмов на основе метода Штрассена, которые улучшают численную устойчивость, скорость по константе и другие его характеристики. Тем не менее, в силу простоты алгоритм Штрассена остаётся одним из практических алгоритмов умножения больших матриц. Штрассен также выдвинул следующую [[Гипотеза Штрассена|гипотезу Штрассена]]: для сколь угодно малого <math>\varepsilon > 0</math> существует алгоритм, при достаточно больших [[натуральное число|натуральных]] ''n'' гарантирующий перемножение двух матриц размера <math>n \times n</math> за <math>O(n^{2+\varepsilon})</math> операций. |
||
* '''Дальнейшие улучшения показателя степени ω для скорости матричного умножения''' |
* '''Дальнейшие улучшения показателя степени ω для скорости матричного умножения''' |
||
[[Файл: |
[[Файл:MatrixMultComplexity_svg.svg|thumb|400px|right|Хронология улучшения оценок показателя степени ω для вычислительной сложности матричного умножения <math>O(n^\omega)</math>.]] |
||
: В дальнейшем оценки скорости умножения больших матриц многократно улучшались. Однако эти алгоритмы носили теоретический, в основном приближённый характер. В силу неустойчивости алгоритмов приближённого умножения в настоящее время они не используются на практике. |
: В дальнейшем оценки скорости умножения больших матриц многократно улучшались. Однако эти алгоритмы носили теоретический, в основном приближённый характер. В силу неустойчивости алгоритмов приближённого умножения в настоящее время они не используются на практике. |
||
:* '''Алгоритм Пана (1978)''' |
:* '''Алгоритм Пана (1978)''' |
||
:: В 1978 Пан<ref>Pan V. Ya, Strassen’s algorithm is not optimal — trilinear technique of aggregating uniting and canceling for constructing fast algorithms for matrix operations. — Proc. 19th Annual Symposium on Foundations of Computer Science, Ann Arbor, Mich., 1978</ref> предложил свой метод умножения матриц, сложность которого составила '''Θ(n<sup>2.78041</sup>)'''. |
:: В 1978 году Пан<ref>Pan V. Ya, Strassen’s algorithm is not optimal — trilinear technique of aggregating uniting and canceling for constructing fast algorithms for matrix operations. — Proc. 19th Annual Symposium on Foundations of Computer Science, Ann Arbor, Mich., 1978</ref> предложил свой метод умножения матриц, сложность которого составила '''Θ(n<sup>2.78041</sup>)'''. |
||
:* '''Алгоритм Бини (1979)''' |
:* '''Алгоритм Бини (1979)''' |
||
:: В 1979 группа итальянских учёных во главе с Бини<ref>Bini D., Capovani M., Lotti G., Romani F. — <math>O( n^{2.7799} )</math> complexity for approximate matrix multiplication. — Inform. Process. Lett., 1979</ref> разработала алгоритм умножения матриц с использованием тензоров. Его сложность составляет '''Θ(n<sup>2.7799</sup>)'''. |
:: В 1979 году группа итальянских учёных во главе с Бини<ref>Bini D., Capovani M., Lotti G., Romani F. — <math>O( n^{2.7799} )</math> complexity for approximate matrix multiplication. — Inform. Process. Lett., 1979</ref> разработала алгоритм умножения матриц с использованием тензоров. Его сложность составляет '''Θ(n<sup>2.7799</sup>)'''. |
||
:* '''Алгоритмы Шёнхаге (1981)''' |
:* '''Алгоритмы Шёнхаге (1981)''' |
||
:: В 1981 Шёнхаге<ref>Schonhage A. Partial and total matrix multiplication. — SIAM J. Comput., 1981</ref> представил метод, работающий со скоростью '''Θ(n<sup>2.695</sup>)'''. Оценка получена с помощью подхода, названного ''частичным матричным умножением''. Позже ему удалось получить оценку '''Θ(n<sup>2.6087</sup>)'''. |
:: В 1981 году Шёнхаге<ref>Schonhage A. Partial and total matrix multiplication. — SIAM J. Comput., 1981</ref> представил метод, работающий со скоростью '''Θ(n<sup>2.695</sup>)'''. Оценка получена с помощью подхода, названного ''частичным матричным умножением''. Позже ему удалось получить оценку '''Θ(n<sup>2.6087</sup>)'''. |
||
:: Затем Шёнхаге на базе ''метода прямых сумм'' получил оценку сложности '''Θ(n<sup>2.548</sup>)'''. Романи сумел понизить оценку до '''Θ(n<sup>2.5166</sup>)''', а Пан — до '''Θ(n<sup>2.5161</sup>)'''. |
:: Затем Шёнхаге на базе ''метода прямых сумм'' получил оценку сложности '''Θ(n<sup>2.548</sup>)'''. Романи сумел понизить оценку до '''Θ(n<sup>2.5166</sup>)''', а Пан — до '''Θ(n<sup>2.5161</sup>)'''. |
||
* '''[[Алгоритм Копперсмита — Винограда]] (1990)''' |
* '''[[Алгоритм Копперсмита — Винограда]] (1990)''' |
||
: В 1990 Копперсмит и Виноград<ref>Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic progressions. ''Journal of Symbolic Computation'', 9:251-280, 1990.</ref> опубликовали алгоритм, |
: В 1990 году Копперсмит и Виноград<ref>Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic progressions. ''Journal of Symbolic Computation'', 9:251-280, 1990.</ref> опубликовали алгоритм, асимптотическая сложность которого составляла '''O(n<sup>2.3755</sup>)'''. Этот алгоритм использует идеи, схожие с алгоритмом Штрассена. На сегодняшний день модификации алгоритма Копперсмита—Винограда являются наиболее [[Теория сложности вычислений#Асимптотическая сложность|асимптотически]] быстрыми. В последней модификации (2024) сложность алгоритма составляет '''O(n<sup>2.371339</sup>)'''<ref>{{Cite arXiv|author1=Josh Alman|author2= Ran Duan|author3= Virginia Vassilevska Williams|author4= Yinzhan Xu|author5= Zixuan Xu|author6= Renfei Zhou|title=More Asymmetry Yields Faster Matrix Multiplication|eprint=2404.16349 |class=cs.DS |year=2024}}</ref>. Известно, что широкий класс модификаций этого алгоритма в принципе не может достичь сложность лучше, чем '''O(n<sup>2.3078</sup>)'''<ref>{{Cite web |url=https://www.quantamagazine.org/new-breakthrough-brings-matrix-multiplication-closer-to-ideal-20240307/ |title=New Breakthrough Brings Matrix Multiplication Closer to Ideal |website=Quanta Magazine |access-date=2024-03-07 |archive-date=2024-03-07 |archive-url=https://web.archive.org/web/20240307163317/https://www.quantamagazine.org/new-breakthrough-brings-matrix-multiplication-closer-to-ideal-20240307/ |url-status=live }}</ref>. Алгоритм Копперсмита—Винограда эффективен только на матрицах астрономического размера и на практике применяться не может. |
||
* '''Связь с теорией групп (2003)''' |
* '''Связь с теорией групп (2003)''' |
||
: В 2003 Кох и др. рассмотрели в своих работах<ref> |
: В 2003 году Кох и др. рассмотрели в своих работах<ref>{{Cite web |url=http://www.cs.caltech.edu/~umans/papers/CKSU05.pdf |title=Group-theoretic Algorithms for Matrix Multiplication |access-date=2009-09-26 |archive-date=2011-08-06 |archive-url=https://web.archive.org/web/20110806121526/http://www.cs.caltech.edu/~umans/papers/CKSU05.pdf |deadlink=no }}</ref> алгоритмы Штрассена и Копперсмита-Винограда в контексте [[Теория групп|теории групп]]. Они показали, что гипотеза Штрассена справедлива (т.е. минимальная сложность ограничена <math>O(n^{2+\varepsilon})</math> для любого <math>\varepsilon</math>) , если выполняется одна из гипотез теории групп<ref>{{Cite web |url=http://www.siam.org/pdf/news/174.pdf |title=Toward an Optimal Algorithm for Matrix Multiplication |accessdate=2009-09-26 |archiveurl=https://web.archive.org/web/20100331095603/http://www.siam.org/pdf/news/174.pdf |archivedate=2010-03-31 |deadlink=yes }}</ref>. |
||
== Степени матриц == |
== Степени матриц == |
||
Строка 201: | Строка 201: | ||
: <math> \det(\mathbf{A}^k) = \det(\mathbf{A})^k </math> |
: <math> \det(\mathbf{A}^k) = \det(\mathbf{A})^k </math> |
||
Наиболее простой способ вычисления степени матрицы — это умножать {{math|''k''}} раз матрицу {{math|'''A'''}} на результат предыдущего умножения, начиная с единичной матрицы, как это часто делают для скаляров. |
|||
Для [[Диагонализируемая матрица|диагонализируемых матриц]] существует лучший метод, основанный на использовании [[Спектральное разложение|спектрального разложения]] матрицы {{math|'''A'''}}. |
Для [[Диагонализируемая матрица|диагонализируемых матриц]] существует лучший метод, основанный на использовании [[Спектральное разложение|спектрального разложения]] матрицы {{math|'''A'''}}. |
||
Ещё один метод, основанный на [[Теорема Гамильтона — Кэли|теореме Гамильтона — Кэли]], строит более эффективное выражение для {{math|'''A'''<sup>''k''</sup>}}, в котором в требуемую степень возводится ''скаляр'', а не вся ''матрица''. |
Ещё один метод, основанный на [[Теорема Гамильтона — Кэли|теореме Гамильтона — Кэли]], строит более эффективное выражение для {{math|'''A'''<sup>''k''</sup>}}, в котором в требуемую степень возводится ''скаляр'', а не вся ''матрица''. |
||
Строка 225: | Строка 225: | ||
При возведении произвольной матрицы (не обязательно диагональной) в степень часто полезным оказывается использовать сначала свойства [[Диагонализируемая матрица|диагонализируемых матриц]]. |
При возведении произвольной матрицы (не обязательно диагональной) в степень часто полезным оказывается использовать сначала свойства [[Диагонализируемая матрица|диагонализируемых матриц]]. |
||
Используя умножение матриц и возведение матриц в степень, можно определить другие операции над матрицами. Например, [[матричная экспонента]] может быть определена через [[степенной ряд]], |
Используя умножение матриц и возведение матриц в степень, можно определить другие операции над матрицами. Например, [[матричная экспонента]] может быть определена через [[степенной ряд]], [[матричный логарифм]] — как обратная к матричной [[Экспонента|экспоненте]] функция и так далее. |
||
== См. также == |
== См. также == |
||
* [[Произведение Кронекера]] |
* [[Произведение Кронекера]] |
||
* [[Произведение Адамара]] |
|||
== Литература == |
== Литература == |
||
Строка 238: | Строка 239: | ||
{{Векторы и матрицы}} |
{{Векторы и матрицы}} |
||
[[Категория:Алгоритмы]] |
[[Категория:Алгоритмы умножения матриц]] |
||
[[Категория:Матрицы]] |
[[Категория:Матрицы]] |
||
[[Категория:Численные методы линейной алгебры]] |
[[Категория:Численные методы линейной алгебры]] |
Текущая версия от 09:16, 13 ноября 2024
Умноже́ние ма́триц — одна из основных операций над матрицами. Матрица, получаемая в результате операции умножения, называется произведе́нием ма́триц. Элементы новой матрицы получаются из элементов старых матриц в соответствии с правилами, проиллюстрированными ниже .
Матрицы и могут быть перемножены, если они совместимы в том смысле, что число столбцов матрицы равно числу строк .
Матрицы обладают многими алгебраическими свойствами умножения, присущими обычным числам, за исключением коммутативности .
Для квадратных матриц, помимо умножения, может быть введена операция возведения матрицы в степеньобратная матрица .
иТогда как матрицы используются для описания, в частности, преобразований математических пространств (поворот, отражение, растяжение и другие), произведение матриц будет описывать композицию преобразований .
Определение
[править | править код]Пусть даны две прямоугольные матрицы и размерности и соответственно:
Тогда матрица размерностью :
в которой:
называется их произведением.
Операция умножения двух матриц выполнима только в том случае, если число столбцов в первом сомножителе равно числу строк во втором; в этом случае говорят, что матрицы согласованы. В частности, умножение всегда выполнимо, если оба сомножителя — квадратные матрицы одного и того же порядка.
Таким образом, из существования произведения вовсе не следует существование произведения
Иллюстрация
[править | править код]Произведение матриц AB состоит из всех возможных комбинаций скалярных произведений вектор-строк матрицы A и вектор-столбцов матрицы B. Элемент матрицы AB с индексами i, j есть скалярное произведение i-ой вектор-строки матрицы A и j-го вектор-столбца матрицы B.
Иллюстрация справа демонстрирует вычисление произведения двух матриц A и B, она показывает как каждые пересечения в произведении матриц соответствуют строкам матрицы A и столбцам матрицы B. Размер результирующей матрицы всегда максимально возможный, то есть для каждой строки матрицы A и столбца матрицы B есть всегда соответствующее пересечение в произведении матрицы.
Значения на пересечениях, отмеченных кружочками, будут:
В общем случае, произведение матриц не является коммутативной операцией. К примеру:
Элемент произведения матриц, приведённых выше, вычисляется следующим образом
Первая координата в обозначении матрицы обозначает строку, вторая координата — столбец; этот порядок используют как при индексации, так и при обозначении размера. Элемент на пересечении строки и столбца результирующей матрицы является скалярным произведением -й строки первой матрицы и -го столбца второй матрицы. Это объясняет почему ширина и высота умножаемых матриц должны совпадать: в противном случае скалярное произведение не определено.
Обсуждение
[править | править код]Увидеть причины описанного правила матричного умножения легче всего, рассмотрев умножение вектора на матрицу.
Последнее естественно вводится исходя из того, что при разложении векторов по базису действие (любого) линейного оператора A даёт выражение компонент вектора v' = Av:
То есть линейный оператор оказывается представлен матрицей, векторы — векторами-столбцами, а действие оператора на вектор — матричным умножением вектора-столбца слева на матрицу оператора (это частный случай матричного умножения, когда одна из матриц — вектор-столбец — имеет размер ).
(Равно переход к любому новому базису при смене координат представляется полностью аналогичным выражением, только в этом случае уже не компоненты нового вектора в старом базисе, а компоненты старого вектора в новом базисе; при этом — элементы матрицы перехода к новому базису).
Рассмотрев последовательное действие на вектор двух операторов: сначала A, а потом B (или преобразование базиса A, а затем преобразование базиса B), дважды применив нашу формулу, получим:
откуда видно, что композиции BA действия линейных операторов A и B (или аналогичной композиции преобразований базиса) соответствует матрица, вычисляемая по правилу произведения соответствующих матриц:
Определённое таким образом произведение матриц оказывается совершенно естественным и очевидно полезным (даёт простой и универсальный способ вычисления композиций произвольного количества линейных преобразований).
Свойства
[править | править код]Сочетательное свойство, ассоциативность:
Распределительное свойство, дистрибутивность относительно сложения:
- .
Произведение матрицы на единичную матрицу подходящего порядка равно самой матрице:
Произведение матрицы на нулевую матрицу подходящей размерности равно нулевой матрице:
Если и — квадратные матрицы одного и того же порядка, то произведение матриц обладает ещё рядом свойств.
Умножение матриц в общем случае некоммутативно:
Если , то матрицы и называются коммутирующими между собой.
Простейшие примеры коммутирующих матриц:
- любая квадратная матрица — с самой собой: (возведение матрицы в квадрат);
- любая квадратная матрица — с единичной матрицей того же порядка: ;
- любая квадратная матрица — с нулевой матрицей того же порядка: ;
- любая невырожденная квадратная матрица — со своей обратной матрицей: .
Определитель и след произведения не зависят от порядка умножения матриц:
Обратная матрица
[править | править код]Квадратная матрица называется неособенной (невырожденной), если она имеет единственную обратную матрицу такую, что выполняется условие:
В противном случае матрица называется особенной (вырожденной).
Матрица порядка является невырожденной в том и только в том случае, если в этом случае есть квадратная матрица того же порядка
где — алгебраическое дополнение элемента в определителе
Алгоритмы быстрого перемножения матриц
[править | править код]Сложность вычисления произведения матриц по определению составляет , однако существуют более эффективные алгоритмы[1], применяющиеся для больших матриц. Вопрос о предельной скорости умножения больших матриц, также как и вопрос о построении наиболее быстрых и устойчивых практических алгоритмов умножения больших матриц остаётся одной из нерешённых проблем линейной алгебры.
- Алгоритм Штрассена (1969)
- Первый алгоритм быстрого умножения больших матриц был разработан Фолькером Штрассеном[2] в 1969 году. В основе алгоритма лежит рекурсивное разбиение матриц на блоки 2×2. Штрассен доказал, что матрицы 2×2 можно некоммутативно перемножить с помощью семи умножений, поэтому на каждом этапе рекурсии выполняется семь умножений вместо восьми. В результате асимптотическая сложность этого алгоритма составляет . Недостатком данного метода является бо́льшая сложность программирования по сравнению со стандартным алгоритмом, слабая численная устойчивость и больший объём используемой памяти. Разработан ряд алгоритмов на основе метода Штрассена, которые улучшают численную устойчивость, скорость по константе и другие его характеристики. Тем не менее, в силу простоты алгоритм Штрассена остаётся одним из практических алгоритмов умножения больших матриц. Штрассен также выдвинул следующую гипотезу Штрассена: для сколь угодно малого существует алгоритм, при достаточно больших натуральных n гарантирующий перемножение двух матриц размера за операций.
- Дальнейшие улучшения показателя степени ω для скорости матричного умножения
- В дальнейшем оценки скорости умножения больших матриц многократно улучшались. Однако эти алгоритмы носили теоретический, в основном приближённый характер. В силу неустойчивости алгоритмов приближённого умножения в настоящее время они не используются на практике.
- Алгоритм Пана (1978)
- В 1978 году Пан[3] предложил свой метод умножения матриц, сложность которого составила Θ(n2.78041).
- Алгоритм Бини (1979)
- В 1979 году группа итальянских учёных во главе с Бини[4] разработала алгоритм умножения матриц с использованием тензоров. Его сложность составляет Θ(n2.7799).
- Алгоритмы Шёнхаге (1981)
- В 1981 году Шёнхаге[5] представил метод, работающий со скоростью Θ(n2.695). Оценка получена с помощью подхода, названного частичным матричным умножением. Позже ему удалось получить оценку Θ(n2.6087).
- Затем Шёнхаге на базе метода прямых сумм получил оценку сложности Θ(n2.548). Романи сумел понизить оценку до Θ(n2.5166), а Пан — до Θ(n2.5161).
- В 1990 году Копперсмит и Виноград[6] опубликовали алгоритм, асимптотическая сложность которого составляла O(n2.3755). Этот алгоритм использует идеи, схожие с алгоритмом Штрассена. На сегодняшний день модификации алгоритма Копперсмита—Винограда являются наиболее асимптотически быстрыми. В последней модификации (2024) сложность алгоритма составляет O(n2.371339)[7]. Известно, что широкий класс модификаций этого алгоритма в принципе не может достичь сложность лучше, чем O(n2.3078)[8]. Алгоритм Копперсмита—Винограда эффективен только на матрицах астрономического размера и на практике применяться не может.
- Связь с теорией групп (2003)
- В 2003 году Кох и др. рассмотрели в своих работах[9] алгоритмы Штрассена и Копперсмита-Винограда в контексте теории групп. Они показали, что гипотеза Штрассена справедлива (т.е. минимальная сложность ограничена для любого ) , если выполняется одна из гипотез теории групп[10].
Степени матриц
[править | править код]Квадратные матрицы можно многократно умножать сами на себя так же, как обычные числа, так как у них одинаковое число строк и столбцов. Такое последовательное умножение можно назвать возведением матрицы в степень — это будет частный случай обычного умножения нескольких матриц. У прямоугольных матриц число строк и столбцов разное, поэтому их никогда нельзя возводить в степень. Матрица A размерности n × n, возведённая в степень, определяется формулой
и обладает следующими свойствами (λ — некоторый скаляр):
Нулевая степень:
где E - единичная матрица. Это аналог того факта, что нулевая степень любого числа равна единице.
Умножение на скаляр:
Определитель:
Наиболее простой способ вычисления степени матрицы — это умножать k раз матрицу A на результат предыдущего умножения, начиная с единичной матрицы, как это часто делают для скаляров. Для диагонализируемых матриц существует лучший метод, основанный на использовании спектрального разложения матрицы A. Ещё один метод, основанный на теореме Гамильтона — Кэли, строит более эффективное выражение для Ak, в котором в требуемую степень возводится скаляр, а не вся матрица.
Особый случай составляют диагональные матрицы. Так как произведение диагональных матриц сводится к умножению соответствующих диагональных элементов, то k-ая степень диагональной матрицы A состоит из элементов, возведённых в требуемую степень:
Таким образом, возвести диагональную матрицу в степень несложно. При возведении произвольной матрицы (не обязательно диагональной) в степень часто полезным оказывается использовать сначала свойства диагонализируемых матриц.
Используя умножение матриц и возведение матриц в степень, можно определить другие операции над матрицами. Например, матричная экспонента может быть определена через степенной ряд, матричный логарифм — как обратная к матричной экспоненте функция и так далее.
См. также
[править | править код]Литература
[править | править код]- Корн Г., Корн Т. Алгебра матриц и матричное исчисление // Справочник по математике. — 4-е издание. — М.: Наука, 1978. — С. 392—394.
Примечания
[править | править код]- ↑ Кибернетический сборник. Новая серия. Вып. 25. Сб. статей 1983 — 1985 гг.: Пер. с англ. — М.: Мир, 1988 — В.Б. Алекссев. Сложность умножения матриц. Обзор.
- ↑ Strassen V. Gaussian Elimination is not Optimal (англ.) // Numerische Mathematik / F. Brezzi — Springer Science+Business Media, 1969. — Vol. 13, Iss. 4. — P. 354—356. — ISSN 0029-599X; 0945-3245 — doi:10.1007/BF02165411
- ↑ Pan V. Ya, Strassen’s algorithm is not optimal — trilinear technique of aggregating uniting and canceling for constructing fast algorithms for matrix operations. — Proc. 19th Annual Symposium on Foundations of Computer Science, Ann Arbor, Mich., 1978
- ↑ Bini D., Capovani M., Lotti G., Romani F. — complexity for approximate matrix multiplication. — Inform. Process. Lett., 1979
- ↑ Schonhage A. Partial and total matrix multiplication. — SIAM J. Comput., 1981
- ↑ Don Coppersmith and Shmuel Winograd. Matrix multiplication via arithmetic progressions. Journal of Symbolic Computation, 9:251-280, 1990.
- ↑ Josh Alman; Ran Duan; Virginia Vassilevska Williams; Yinzhan Xu; Zixuan Xu; Renfei Zhou (2024). "More Asymmetry Yields Faster Matrix Multiplication". arXiv:2404.16349 [cs.DS].
- ↑ New Breakthrough Brings Matrix Multiplication Closer to Ideal . Quanta Magazine. Дата обращения: 7 марта 2024. Архивировано 7 марта 2024 года.
- ↑ Group-theoretic Algorithms for Matrix Multiplication . Дата обращения: 26 сентября 2009. Архивировано 6 августа 2011 года.
- ↑ Toward an Optimal Algorithm for Matrix Multiplication . Дата обращения: 26 сентября 2009. Архивировано из оригинала 31 марта 2010 года.