когда можно перемножать матрицы

Матричное умножение. Медленное достижение мифической цели

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


Математики стремятся к достижению мифической цели — второй степени (exponent two), то есть к умножению пары матриц n х n всего за n 2 шагов. Исследователи подбираются все ближе к своей цели, но получится ли у них когда-нибудь достичь ее?

Для специалистов в области Computer Science и математиков сама идея о «второй степени» связана с представлениями о совершенном мире.

«Трудно разграничить научное мышление и беспочвенные мечтания», — признается Крис Уманс из Калифорнийского технологического института. «Я хочу, чтобы степень была равна двум, потому что это красиво».

С точки зрения необходимого количества шагов «вторая степень» — это идеальная скорость выполнения одной из самых фундаментальных математических операций — матричного умножения. Если вторая степень достижима, то матричное умножение получится выполнять максимально быстро, насколько это физически возможно. Если это не так, то мы застряли в мире, который не соответствует нашим мечтам.

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

И хотя никто точно не знает, можно ли этого достичь, исследователи продолжают продвигаться в этом направлении.

Статья, опубликованная в октябре, подбирается к цели еще ближе и описывает самый быстрый на данный момент метод умножения двух матриц. Результат, который получили Джош Алман, докторант Гарвардского университета, и Вирджиния Василевска Уильямс из Массачусетского технологического института, уменьшает степень предыдущего лучшего показателя примерно на одну стотысячную. Это действительно большое достижение в данной области, добытое кропотливым трудом.

Чтобы получше разобраться в этом процессе и понять, как его можно усовершенствовать, давайте начнем с пары матриц 2 х 2, A и B. При вычислении каждого элемента их произведения вы используете соответствующую строку из A и соответствующий столбец из B. Чтобы получить верхний правый элемент, умножьте первое число в первой строке A на первое число во втором столбце B, затем умножьте второе число в первой строке A на второе число во втором столбце B и сложите эти два произведения.


Самуэль Веласко / Quanta Magazine

Эта операция известна как получение «скалярного произведения» строки со столбцом (иногда называется «внутренним произведением»). Чтобы вычислить другие элементы в произведении матриц, повторите процедуру с соответствующими строками и столбцами.

В целом, классический метод умножения матриц 2 х 2 состоит из восьми умножений и нескольких сложений. Как правило, этот способ умножения двух матриц размера n х n требует n 3 умножений.

С увеличением размера матриц количество умножений, необходимых для нахождения их произведения, растет намного быстрее, чем количество сложений. Чтобы найти произведение матриц 2 х 2 требуется всего восемь промежуточных умножений, а чтобы найти произведение матриц 4 х 4 их требуется уже 64. Однако количество сложений, необходимых для получения суммы этих матриц, не так значительно отличается. Обычно количество сложений равно количеству элементов в матрице, то есть четыре для матриц 2 х 2 и 16 для матриц 4 х 4. Эта разница между сложением и умножением позволяет понять, почему исследователи измеряют скорость умножения матриц исключительно с точки зрения количества требуемых умножений.

«Умножения — это наше всё, — утверждает Уманс, — Показатель степени в итоге полностью зависит только от количества умножений. Сложения в некотором смысле исчезают».

На протяжении веков люди считали, что n 3 — это самый быстрый способ умножения матриц. По имеющимся сведениям, в 1969 году Фолькер Штрассен намеревался доказать, что невозможно умножить матрицы 2 х 2, используя менее восьми умножений. Видимо, он все-таки не смог найти доказательства, а через некоторое время и понял почему: на самом деле, существует способ сделать это с помощью семи умножений!

Читайте также:  можно ли хомяку салат листья

Штрассен придумал сложный набор соотношений, которые позволили заменить одно из этих восьми умножений 14 дополнительными сложениями. Может показаться, что разница совершенно незначительна, но она оправдывает себя, так как умножение вносит больший вклад, чем сложение. Найдя способ избавиться от одного умножения для маленьких матриц 2 х 2, Штрассен открыл возможность, которую он мог использовать при умножении бOльших матриц.

«Это крошечное изменение приводит к огромным улучшениям в работе с большими матрицами», — говорит Уильямс.


Вирджиния Василевска Уильямс из Массачусетского технологического института и Джош Алман из Гарвардского университета открыли самый быстрый способ перемножения двух матриц за n 2.3728596 шагов. Джаред Чарни; Ричард Т.К. Хоук

Предположим, вы хотите перемножить пару матриц 8 х 8. Один из способов сделать это — разбить каждую большую матрицу на четыре матрицы размером 4 х 4 так, чтобы каждая имела по четыре элемента. Поскольку элементы матрицы также могут являться матрицами, вы можете считать исходные матрицы парой матриц 2 х 2, каждый из четырех элементов которых сам по себе является матрицей 4 х 4. Посредством некоторых манипуляций каждая из этих матриц размером 4 х 4 может быть разбита на четыре матрицы размером 2 х 2.

Смысл этого многократного разбиения больших матриц на более мелкие заключается в том, что можно снова и снова применять алгоритм Штрассена к меньшим матрицам и с помощью его метода сокращать количество шагов на каждом этапе. В целом алгоритм Штрассена увеличил скорость умножения матриц с n 3 до n 2.81 мультипликативных шагов.

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

Умножение матриц и эта задача, связанная с тензорами, в определенном смысле эквивалентны друг другу, но для решения последней исследователи уже имели более быстрые процедуры. Таким образом, перед ними встала задача определить «обменный курс» между ними: Матрицы какого размера можно перемножить при тех же вычислительных затратах, которые требуются для решения тензорной задачи?

«Это очень распространенная в теоретической информатике концепция: преобразовывать задачи и проводить аналогию между ними, чтобы показать, что они одинаково простые или сложные», — сказал Алман.

В 1981 году Арнольд Шёнхаге использовал этот подход, чтобы доказать, что умножение матриц возможно выполнить за n 2.522 шагов. Позднее Штрассен назвал этот подход «лазерным методом» (laser method).

За последние несколько десятилетий каждое улучшение в процессе умножения матриц происходило за счет усовершенствования лазерного метода, поскольку исследователи находили все более эффективные способы трансформации задачи. В своем новом доказательстве Алман и Уильямс стирают различие между 2 задачами и показывают, что уменьшить число умножений возможно. «В целом Джош и Вирджиния нашли способ применить машинные вычисления в рамках лазерного метода и получили лучшие на настоящий момент результаты», — сказал Генри Кон из Microsoft Research.

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

«Маловероятно, что получится приблизиться ко второй степени, используя это семейство методов», — отметил Уманс.

Для этого потребуется открытие новых методов и стойкая вера в то, что это вообще возможно.
Уильямс вспоминает один из разговоров со Штрассеном об этом: «Я спросила его, считает ли он, что возможно получить вторую степень для матричного умножения, и он ответил: «Нет, нет, нет, никогда!».

Читайте также:  лоперамид с антибиотиками можно ли пить

Источник

Действия с матрицами

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

Я буду стараться минимизировать теоретические выкладки, кое-где возможны объяснения «на пальцах» и использование ненаучных терминов. Любители основательной теории, пожалуйста, не занимайтесь критикой, наша задача – научиться выполнять действия с матрицами.

Для СВЕРХБЫСТРОЙ подготовки по теме (у кого «горит») есть интенсивный pdf-курс Матрица, определитель и зачёт!

Матрица – это прямоугольная таблица каких-либо элементов. В качестве элементов мы будем рассматривать числа, то есть числовые матрицы. ЭЛЕМЕНТ – это термин. Термин желательно запомнить, он будет часто встречаться, не случайно я использовал для его выделения жирный шрифт.

Обозначение: матрицы обычно обозначают прописными латинскими буквами

Пример: рассмотрим матрицу «два на три»:

Данная матрица состоит из шести элементов:

Все числа (элементы) внутри матрицы существуют сами по себе, то есть ни о каком вычитании речи не идет:

Это просто таблица (набор) чисел!

Также договоримся не переставлять числа, если иного не сказано в объяснениях. У каждого числа свое местоположение, и перетасовывать их нельзя!

Рассматриваемая матрица имеет две строки:

и три столбца:

СТАНДАРТ: когда говорят о размерах матрицы, то сначала указывают количество строк, а только потом – количество столбцов. Мы только что разобрали по косточкам матрицу «два на три».

Если количество строк и столбцов матрицы совпадает, то матрицу называют квадратной, например: – матрица «три на три».

Если в матрице один столбец или одна строка , то такие матрицы также называют векторами.

На самом деле понятие матрицы мы знаем еще со школы, рассмотрим, например точку с координатами «икс» и «игрек»: . По существу, координаты точки записаны в матрицу «один на два». Кстати, вот Вам и пример, почему порядок чисел имеет значение: и – это две совершенно разные точки плоскости.

Теперь переходим непосредственно к изучению действий с матрицами:

1) Действие первое. Вынесение минуса из матрицы (внесение минуса в матрицу).

Вернемся к нашей матрице . Как вы наверняка заметили, в данной матрице слишком много отрицательных чисел. Это очень неудобно с точки зрения выполнения различных действий с матрицей, неудобно писать столько минусов, да и просто в оформлении некрасиво выглядит.

Вынесем минус за пределы матрицы, сменив у КАЖДОГО элемента матрицы знак:

У нуля, как Вы понимаете, знак не меняется, ноль – он и в Африке ноль.

Обратный пример: . Выглядит безобразно.

Внесем минус в матрицу, сменив у КАЖДОГО элемента матрицы знак:

Ну вот, гораздо симпатичнее получилось. И, самое главное, выполнять какие-либо действия с матрицей будет ПРОЩЕ. Потому что есть такая математическая народная примета: чем больше минусов – тем больше путаницы и ошибок.

2) Действие второе. Умножение матрицы на число.

Всё просто, для того чтобы умножить матрицу на число, нужно каждый элемент матрицы умножить на данное число. В данном случае – на тройку.

Еще один полезный пример:

– умножение матрицы на дробь

Сначала рассмотрим то, чего делать НЕ НАДО:

Вносить дробь в матрицу НЕ НУЖНО, во-первых, это только затрудняет дальнейшие действия с матрицей, во-вторых, затрудняет проверку решения преподавателем (особенно, если – окончательный ответ задания).

И, тем более, НЕ НАДО делить каждый элемент матрицы на минус семь:

Из статьи Математика для чайников или с чего начать, мы помним, что десятичных дробей с запятой в высшей математике стараются всячески избегать.

Единственное, что желательно сделать в этом примере – это внести минус в матрицу:

А вот если бы ВСЕ элементы матрицы делились на 7 без остатка, то тогда можно (и нужно!) было бы поделить.

Читайте также:  Файл xlsx что это такое

В этом случае можно и НУЖНО умножить все элементы матрицы на , так как все числа матрицы делятся на 2 без остатка.

Примечание: в теории высшей математики школьного понятия «деление» нет. Вместо фразы «это поделить на это» всегда можно сказать «это умножить на дробь». То есть, деление – это частный случай умножения.

3) Действие третье. Транспонирование матрицы.

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

Транспонировать матрицу

Строка здесь всего одна и, согласно правилу, её нужно записать в столбец:

– транспонированная матрица.

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

Транспонировать матрицу

Сначала переписываем первую строку в первый столбец:

Потом переписываем вторую строку во второй столбец:

И, наконец, переписываем третью строку в третий столбец:

Готово. Образно говоря, транспонировать – это значит взять матрицу за правый верхний угол и аккуратно повернуть её «на себя» по диагонали, «стряхивая» числа в столбцы транспонированной матрицы. Такая вот у меня ассоциация.

4) Действие четвертое. Сумма (разность) матриц.

Сумма матриц действие несложное.
НЕ ВСЕ МАТРИЦЫ МОЖНО СКЛАДЫВАТЬ. Для выполнения сложения (вычитания) матриц, необходимо, чтобы они были ОДИНАКОВЫМИ ПО РАЗМЕРУ.

Например, если дана матрица «два на два», то ее можно складывать только с матрицей «два на два» и никакой другой!

Сложить матрицы и

Для того чтобы сложить матрицы, необходимо сложить их соответствующие элементы:

Для разности матриц правило аналогичное, необходимо найти разность соответствующих элементов.

Найти разность матриц ,

А как решить данный пример проще, чтобы не запутаться? Целесообразно избавиться от лишних минусов, для этого внесем минус в матрицу :

Примечание: в теории высшей математики школьного понятия «вычитание» нет. Вместо фразы «из этого вычесть это» всегда можно сказать «к этому прибавить отрицательное число». То есть, вычитание – это частный случай сложения.

5) Действие пятое. Умножение матриц.

Чем дальше в лес, тем толще партизаны. Скажу сразу, правило умножения матриц выглядит очень странно, и объяснить его не так-то просто, но я все-таки постараюсь это сделать, используя конкретные примеры.

Какие матрицы можно умножать?

Чтобы матрицу можно было умножить на матрицу нужно, чтобы число столбцов матрицы равнялось числу строк матрицы .

Пример:
Можно ли умножить матрицу на матрицу ?

, значит, умножать данные матрицы можно.

А вот если матрицы переставить местами, то, в данном случае, умножение уже невозможно!

, следовательно, выполнить умножение невозможно:

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

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

Как умножить матрицы?

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

Начнем с самого простого:

Умножить матрицу на матрицу
Я буду сразу приводить формулу для каждого случая:

– попытайтесь сразу уловить закономерность.

Умножить матрицу на матрицу

Формула:

В результате получена так называемая нулевая матрица.

Попробуйте самостоятельно выполнить умножение (правильный ответ ).

Обратите внимание, что ! Это почти всегда так!

Таким образом, при умножении переставлять матрицы нельзя!

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

Переходим к матрицам третьего порядка:

Умножить матрицу на матрицу

Формула очень похожа на предыдущие формулы:

А теперь попробуйте самостоятельно разобраться в умножении следующих матриц:

Умножьте матрицу на матрицу

Вот готовое решение, но постарайтесь сначала в него не заглядывать!

Данная тема достаточно обширна, и я вынес этот пункт на отдельную страницу.

А пока спектакль закончен.

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

Автор: Емелин Александр

(Переход на главную страницу)

«Всё сдал!» — онлайн-сервис помощи студентам

Источник

Строительный портал