Умножение на матрици
Шаблон:Обработка Шаблон:Експерт В математиката, умножение на матрици е бинарна операция, при която от две матрици се изчислява нова матрица. Число от реалните или комплексни числа може да бъде умножено според елементарната аритметика. От друга страна, матриците са масиви от числа, така че не съществува един-единствен начин да се дефинира „умножението“ на матрици. Затова терминът „умножение на матрици“ се отнася до различни начини за умножение на матрици. Основните особености на което и да е умножение на матрици включва: броят на редовете и колоните на изходните матрици (наричат се „размер“, „ред“ или „измерение“), и упоменават как клетките на матрицата генерират новата матрица.
Както векторите, матрици с какъвто и да е размер могат да бъдат умножени по скалари, което се свежда до умножаване на всяка една от клетките по едно и също число. Подобно на определението за добавяне или изваждане на матрици, се прави и умножението на две матрици с еднакъв размер на съответните клетки и резултатът се нарича произведение на Адамар. Другият начин е да се получи произведение на Крокенер от две матрици, за да се получи матрица с блочна форма.
Могат да бъдат изведени още много определения. Най-полезната дефиниция може да бъде продиктувана от линейно уравнение и линейна трансформация на вектори, които имат приложение в математиката, физиката, и инженерството. Това определение често се нарича матрично произведение.[1][2] С други думи, ако Шаблон:Math е Шаблон:Math матрица и Шаблон:Math е Шаблон:Math матрица, тяхното матрично произведение Шаблон:Math еШаблон:Math матрица, в която Шаблон:Math клетките по редовете Шаблон:Math се умножават с Шаблон:Math клетките по колоните Шаблон:Math.
Тази дефиниция не е комутативна, въпреки че запазва своята асоциативност и дистрибутивност при събирането на матричните клетки. Единичният елемент на матричното произведение (аналогично на умножаване на числа по едно), и квадратна матрица могат да имат обратима матрица (аналогично на реципрочна стойност на число). Последствие от матричното произведение е детерминантна мултипликативност. Получаването на матрично произведение е важна операция в линейните трансформации, матрична група и теорията за групова репрезентация и редуцибилната репрезентация.
Изчисляването на матрични произведения е основна операция в много числови алгоритмии има вероятност да е времеотнемаща, което я прави един от най-изучаваните проблеми в цифровите изчисления. Измислени са различни алгоритми за изчисляване на Шаблон:Math, особено за големи матрици.
Тази статия спазва следните конвенции: матриците са представени от главни букви с удебелен шрифт, например Шаблон:Math, вектори с малки букви с удебелен шрифт, например Шаблон:Math, а клетките на векторите и матриците са с наклонен шрифт (тъй като са скалари), например Шаблон:Math и Шаблон:Math. Индексната нотация често е най-ясният начин да се изразят определенията, и е приета като стандарт в литературата. Клетката Шаблон:Math на матрица Шаблон:Math се обозначава отШаблон:Math или Шаблон:Math, докато a цифрово обозначение (не матрична клетка) в колекция от матрици само е подчертано, например: Шаблон:Math, и т.н.
Скаларно умножение
Най-простата форма на умножение на матрици е скаларното умножение, което е частен случай на произведението на Кронекер.
Лявото скаларно умножение на матрица Шаблон:Math със скаларен множител Шаблон:Math дава друга матрица Шаблон:Math със същия размер като Шаблон:Math. се определя с уравнението Шаблон:Math:
подробно:
По подобен начин, дясното скаларно умножение на матрица Шаблон:Math със скаларен множител Шаблон:Math е
подробно:
Когато подстоящият пръстен е комутативен, например, реално или комплексното число поле, тези две умножения са еквивалентни, и се наричат скаларно умножение. За матрици в по-общ пръстен които не са комутативни, каквито са кватернионите, те може да не са равни.
При реален скаларен множител и матрица:
При скаларен множител кватернион и матрици:
където Шаблон:Math са кватернионите. Некомутативността на умножението на кватерниони не позволява прехода на Шаблон:Math към Шаблон:Math.
Произведение на матрици (две матрици)
Да допуснем че две матрици ще бъдат умножени (по-долу се разглежда случай, сведен до каквото и да е число).
Обща дефиниция на матрично произведение

Ако Шаблон:Math е Шаблон:Math матрица и Шаблон:Math е Шаблон:Math матрица,
матричното произведение Шаблон:Math (обозначено без знаци за умножение или точки) представлява Шаблон:Math матрица[3][4][5][6]
където всяка Шаблон:Math клетка се получава при умножаването на клетките Шаблон:Math (хоризонтален ред Шаблон:Math на Шаблон:Math) по клетките Шаблон:Math (вертикална колона Шаблон:Math на Шаблон:Math), за Шаблон:Math, и сумирането на резултатите в Шаблон:Math:
По този начин произведението Шаблон:Math се определя само ако броят на колоните в Шаблон:Math е равен на броя на редовете в Шаблон:Math, в този случай Шаблон:Math. Клетките могат да бъдат изчислявани една по една. Понякога, конвенцията за сумиране на Айнщайн се използва, за да се разбере сумата на повтарящия се индекс Шаблон:Math. За да се избегне двусмислие, конвенцията няма да бъде засегната в тази статия.
Обикновено клетките са цифри или изрази, но могат самите те да бъдат матрици (виж блок матрици). И в този случай матричното произведение пак се изчислява по същия начин. Може да се види подробно по-долу как матричното произведение може да бъде изчислено на базата на блокове, които приемат формата на редове и колони.
Илюстриране

Фигурата отдясно илюстрира чрез диаграма произведението на две матрици Шаблон:Math and Шаблон:Math, и показва как всеки отрязък в матричното произведение отговаря на ред от Шаблон:Math и колона от Шаблон:Math.
Стойностите на отрязъците обозначени с кръгове са:
Примери за произведение на матрици
Ако
техните матрични произведения са:
и
Обърнете внимание, че Шаблон:Math и Шаблон:Math са две различни матрици: първата е Шаблон:Math матрица докато втората е Шаблон:Math матрица. Такива изрази се срещат при реални стойности в Евклидови вектори в Декартова координатна системаи, представени като матрици с редове и колони, при което Шаблон:Math е матричната форма на тяхното скаларно произведение, докато Шаблон:Math е матричната форма на тяхното диадно или тензорно произведение.
Квадратна матрица и вектор колона
Ако
матричното произведение е:
при което Шаблон:Math не е определено.
До произведението на квадратна матрица умножена по матрица от колона се достига естествено в линейната алгебра; за решаване на линейни уравнения и представянето им като линейни трансформации.
Квадратни матрици
Ако
техните матрични произведения са:
и
В този случай, и двете произведения Шаблон:Math and Шаблон:Math са дефинирани, и клетките показват, че Шаблон:Math и Шаблон:Math по принцип не са равни.
Умножението на квадратни матрици, които представят линейни transformations отговаря на composite transformation (за детайли виж по-долу).
Вектор ред, квадратна матрица, и вектор колона
Ако
тяхното матрично произведение е:
Шаблон:Math не е дефинирано. Обърнете внимание, че Шаблон:Math, това е едно от мнгото общи свойства, които са описани по-долу. Изрази като Шаблон:Math се срещат когато се изчислява вътрешното произведение на два вектора, представени като вектор ред и вектор колона в произволна координатна система, и метричен тензор в тези координати обозначени като квадратна матрица.
Четириъгълни матрици
Ако
техните матрични произведения са:
и
Свойства на матричното произведение (две матрици)
Подобно на числоа (елементи на поле), матриците отговарят на следните общи свойства general properties, въпреки че съществува една особеност, която се дължи на природата на умножението на матрици.[7][8]
Всички матрици
Само квадратни матрици
Произведение на матрици (произволен брой)
Умножението на матрици може да бъде разширено до случая, в който участват повече от две матрици, като всяка една двойка матрици трябва да удовлетворява предварителното условие за размерността.
Произведението на Шаблон:Math матрици Шаблон:Math с резмерности Шаблон:Math (където Шаблон:Math са положителни числа, като индексите съответстват на тези на матриците), матрицата с размерност Шаблон:Math :
Разписано с индекси:
Свойства на матричното произведение (произволен брой)
Свойствата са в сила, докато редът на матриците не е променен. Някои от предишните свойства, валидни за две матрици, могат да бъдат обобщени както следва.
Операции, произлизащи от умножението на матрици
Повечето операции върху квадратни матрици могат да бъдат дефинирани посредством умножението на матрици. Например степенуването и коренуването на матрица могат да бъдат представени чрез многократно прилагане на умножението на матрици, матричната експонента може да бъде дефинирана чрез степенни редове, матричния логаритъм е обратната операция на матричната експоненто и т.н.
Степенуване на матрица
Квадратните матрици могат да бъдат умножени една с друга многократно по подобие на числата, защото те винаги запазват своя брой на редове и колони. Това многократно умножение може да се представи като степенуване на матрица, специален случай на умножението на матрици. От друга страна, правоъгълните матрици нямат същия брой на редове и колони и поради тази причина те никога не могат да бъдат повдигнати на степен. Матрица Шаблон:Math с размерност Шаблон:Math, повдигната на степен Шаблон:Math цяло число, се дефинира по следния начин
и следните свойства са в сила, където Шаблон:Math е скалар:
1. Нулева степен:
където I е единичната матрица. Това е съпоставимо с повдигането на степен нула на кое и да е число, което е равно на единица.
2. Умножение със скалар:
3. Детерминанта:
Наивният подход при степенуване на матрица е матрицата Шаблон:Math да се умножи Шаблон:Math пъти. Този метод б могъл да бъде оптимизиран чрез използване на алгоритъм за бързо пресмятане на степен – метод предимно използван за скалари. За матрици, които са подобни на диагоналните, още по-добър вариант е да се използва спектралната декомпозиция на Шаблон:Math. Друг метод, базиран на теоремата на Хамилтон-Кейли намира по-ефективно уравнение за Шаблон:Math, в което даден скалар се повдига на нужната степен отколкото цялата матрица.
Специален случай е степенуването на диагонална матрица. Понеже умножаването на диагонални матрици се състои просто в умножение на съответните диагонални елементи, диагоналната матрица Шаблон:Math на степен Шаблон:Math ще се състои от елементи, повдигнати на степента. По-подробно;
което означава, че степенуването на диагонална матрица е лесна операция. При степенуване на произволна матрица (не е нужно да бъде диагонална), в много случаи е полезно да се използва това свойство.
Приложения на умножението на матрици
Линейни трансформации
Матриците предоставят сбит начин на представяне на линейни изображения между векторни пространства и умножението на матрици съответства на композицията на линейни изображения. Произведението на две матрици може да бъде дефинирано, когато елементите им принадлежат на същия пръстен пръстен и следователно може да бъде добавян и умножаван.
Нека Шаблон:Math, и Шаблон:Math са линейни пространства над едно и също поле с дадени базиси, Шаблон:Math и Шаблон:Math са линейни изображения и Шаблон:Math е тяхната композиция.
Да предположим, че Шаблон:Math, и Шаблон:Math са матриците, представящи изображенията Шаблон:Math, и Шаблон:Math спрямо дадените базиси.
Тогава матрицата Шаблон:Math, композицията (или произведението) на линейни изображения е произведението на техните матрици спрямо дадените базиси.
Система линейни уравнения
Система линейни уравнения с еднакъв брой уравнения и неизвестни може да бъде решена чрез съставянето на матрица от коефициентите на уравненията.
Сходна процедура може да бъде използвана при решаването на линейни диференциални уравнения.
Векторно и диадно произведение
При дадени два вектор стълба Шаблон:Math и Шаблон:Math, скаларното произведение и диадното произведение са най-простите случаи на матрично произведение.
Скаларно произведение
Скаларното произведение на два вектора в матричен вид е еквивалентно на вектор стълб, умножен от лявата си страна с вектор ред:
където Шаблон:Math е транспонираната матрица на a.
Матричното произведение може да се представи под форма на скаларно произведение. Да предположим, че матрицата A с размерност Шаблон:Math е представена чрез вектор редовете Шаблон:Math, а матрицата Шаблон:Math с размерност Шаблон:Math е представена чрез вектор стълбовете Шаблон:Math:
където
Тогава:
Също така е възможно дадено матрично произведение да се изрази под формата на произведение на матрици и вектор ред или стълб.:
Тези преобразувания са особено полезни за матрици, които са представени като конкатенации на различни типове вектор редове или вектор колони. Например ортогоналните матрици (чиито редове са ортогонални един на друг) и матриците на Марков (при които сумата от редовете или колоните е равна на единица).
Диадно произведение
Диадното произведение (също познато като тензорно произведение) на два вектора в матричен вид е еквивалентно на вектор ред, умножен от ляво с вектор стълб:
Умножението на матрици може да се представи под форма на диадно произведение. Матрицата Шаблон:Math е представена чрез вектор стълбовете Шаблон:Math, а матрицата Шаблон:Math – чрез вектор редовете Шаблон:Math:
където този път
Този метод подчертава ефекта от отделните стълб/ред двойки в резултата.
Алгоритми за ефективно умножение на матрици

Времето за умножение на квадратни матрици с наивен алгоритъм е Шаблон:Math. Времето за умножение на правоъгълни матрици (една Шаблон:Math-матрица с една Шаблон:Math-матрица) е Шаблон:Math, Все пак съществуват и по-ефективни алгоритми за целта, например алгоритъм на Страсен, разработен през 1969 г. от Volker Strassen и често срещан под името „бързо умножение на матрици“. Той се базира на определен начин на умножение на две Шаблон:Math-матрици, изискващ само 7 умножения (вместо обичайните 8) за сметка на няколко допълнителни операции по събиране и изваждане. Използването на това чрез рекурсия дава като резултат сложност . Алгоритъмът на Страсен е по-сложен, а неговата числена стабилност е по-ниска в сравнение с тази на наивния алгоритъм.[9] Въпреки това, последния е включен в няколко библиотеки като BLAS, където той е чувствително по-ефективен за матрици с размери над 100,[10] и освен това е много полезен за големи матрици над точните области като крайни полета, където числената стабилност не е проблем.
Настоящият Шаблон:Math алгоритъм с възможно най-ниската експонента Шаблон:Math е обобщение на алгоритъм на Копърсмит-Виноград с асимптотична сложност Шаблон:Math, създаден от Франсоа Ле Гал.[11] Този алгоритъм, заедно с алгоритъм на Копърсмит-Виноград на който е базиран, са близки до алгоритъма на Страсен: намерен е начин за умножение на две Шаблон:Math-матрици с по-малко от Шаблон:Math умножения, и след това тази техника е приложена рекурсивно. Въпреки това, константния коефициент, скрит зад голямата О нотация, е толкова голям, че тези алгоритми си струва да бъдат прилагани само за матрици, които са твърде големи за обработка със съвременната изчислителна техника.[12][13]
Тъй като всеки алгоритъм за умножение на две Шаблон:Math-матрици трябва да обработи Шаблон:Math-елемента, има асимптотична долна граница от Шаблон:Math операции. През 2002 г. Раз доказва че стойността на долната граница за аритметични вериги със свързани коефициенти е по-ниска Шаблон:Math от тази при реални или сложни числа.
През 2003 – 2005 г. Коун и други слагат методиките на алгоритмите на Страсен и Копърсмит-Виноград в напълно различен, групово-теоретичен контекст. Това става чрез употребата на тройки от подмножества на крайни групи, които нямат общи елементи, наречено още свойство на тройното произведение (TPP). Те показват, че ако семействата на кръглите произведения на Абелови групи със симетрични групи дава семейства от тройки подмножества с еднаква версия на тяхното TPP, това значи че има алгоритми за умножение на матрици с приблизително квадратична сложност. Повечето изследователи вярват в че това е вярно.[14] Въпреки това, Алон, Шпилка и Крис Уманс доказват, че при някои от тези предположения бързото умножението на матрици е несъвместимо с друго предположение – това на слънчогледа.[15]
Алгоритъмът на Фрайвалдс е обикновен Монте Карло алгоритъм, който, при дадени матрици Шаблон:Math се изпълнява за Шаблон:Math време, ако Шаблон:Math.

Паралелно умножение на матрици
Поради природата на операциите с матрици и разположението на матриците в паметта, обикновено е възможно постигането на чувствително подобрение на производителността с помощта на паралелизация и векторизация. Съществуват няколко приложими алгоритми, сред които са и разделяй и владей алгоритмите, базирани на разлагането на матриците на блокове.
които лежат и в основата на алгоритъма на Страсен. Тук Шаблон:Math, Шаблон:Math и Шаблон:Math вземат за квадратни Шаблон:Mvar by Шаблон:Mvar матрици, а Шаблон:Math и т.н. са Шаблон:Math by Шаблон:Math подматрици. От това разлагане се получава[16]
което се състои от осем умножения на деойки подматрици, всички от които могат да бъдат изпълнявани паралелно, последвани от допълнителна стъпка. Ако това се приложи рекурсивно и събиранията се изпълнят отново паралелно, получения алгоритъм отнема Шаблон:Math време на идеална машина с безкраен брой процесори, и има максимална възможна скорост Шаблон:Math на всички реални компютри (въпреки че алгоритъма не е практичен, негов по-практичен вариант постига Шаблон:Math скорост).[16]
Трябва да бъде отбелязано това, че някои алгоритми с по-ниска времева сложност на хартия, може да имат индиректно добавена допълнителна сложност по време при работа на реални машини.
Разпределени алгоритми и алгоритми избягващи комуникация
При модерните архитектури с йерархична памет, цената на зареджане и съхранение на данните от матричните елементи е по=висока от тази на изчисленията. За една машина това е количеството данни, пренасяно между RAM паметта и кеша, докато при многовъзловите машини с разпределена памет това е количеството данни, премасяно междъ отделните възли. И в двата случая това се нарича ширина на потока за комуникация. Наивните алгоритми, ползващи три вложени цикъла използват Шаблон:Math широчина на комуникационния поток.
Алгоритъма на Канон, познат още като 2D алгоритъм, разделя всяка входна матрица на блокове чиито елементи са подматрици с големина Шаблон:Math by Шаблон:Math, където Шаблон:Math е размера на бързата памет.[17] След това за блоковете от матрици се прилага наивния алгоритъм, който изчислява произведенията на подматриците изцяло в бързата памет. Това намалява широчината на комуникационния канал до Шаблон:Math, което е асимптотично оптимално (за алгоритми с изчислителна производителност Шаблон:Math).[18][19]
В разпределена среда с Шаблон:Math процесора подредени в Шаблон:Math на Шаблон:Math 2D мрежа, към всеки процесор може да бъде зачислена една подматрица, а произведението – да бъде изчислено с всеки процесор, предавайки Шаблон:Math думи. Това е асимптотично оптимално, ако се предположи че всеки изчислителен възел съхранява минимум Шаблон:Math елементи.[19] Това може да бъде подобрено от 3D алгоритъм, който подрежда процесорите в 3D мрежа с форма на куб, давайки всяко произведение на две подматрици на един процесор. Получените в резултат подматрици след това се генерират посредством изваждане на всеки ред.[20] Този алгоритъм предава Шаблон:Math думи на процесор, което е асимптотично оптимално.[19] Все пак, това изисква репликиране на всеки елемент от входящите матрици Шаблон:Math пъти, и следователно изисква фактор от Шаблон:Math пъти повече памет, в сравнение с нужната за съхранението на входните данни. Този алгоритъм може да се комбинира с алгоритъма на Страсен с цел да се намали още повече времето за изпълнение.[20] „2.5D“ алгоритмите предоставят баланс между ползването на памет и широчината на комуникационния канал.[21] За съвременните разпределени компютърни среди като MapReduce са създадени специализирани алгоритми за умножение.[22]
Други форми на умножение
По-долу са представени няколко други начина за умножение на матрици. Всъщност, някои от тях са по-прости от дефиницията по-горе.
Произведение на Адамар
Произведението на Адамар е предназначено за две матрици с еднакви размерности. За две матрици Шаблон:Math и Шаблон:Math с еднакви размерности произведението на Адамар Шаблон:Math е матрица от същата размерност, като Шаблон:Math-тия елемент на Шаблон:Math е умножен с Шаблон:Math-тия елемент на Шаблон:Math, което изглежда по следния начин:
разписано пълно:
Тази операция е идентична с това да се умножат много числа едновременно. Следователно произведението Адамар e комутативно, асоциативно и дистрибутивно. Също така е основна подматрица от произведението на Крьонекер. Съдържа се в алгоритми за компресия като JPEG.
Произведение на Фробениус
Произведението на Фробениус, понякога отбелязвано като Шаблон:Math, е произведение на две матрици. То също така представлява сумата от елементите от произведението на Адамар. Подробно,
където „tr“ означава следата на матрица, а vec означава векторизацията.
Произведение на Крьонекер
За две матрици Шаблон:Math и Шаблон:Math с произволни размерности съответно Шаблон:Math и Шаблон:Math (без каквито и да е било изисквания върху размерността на матриците), произведението на Крьоникер е матрицата
с размерност Шаблон:Math. Това е приложението на най-общото тензорно произведение върху матрици.
Бележки
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite book
- ↑ Шаблон:Cite journal
- ↑ Press 2007, p. 108.
- ↑ Шаблон:Cite book. Оригиналния алгоритъм е представен от Дон Копърсмит и Шмуел Виноград през 1990 г. и има асимптотична сложност Шаблон:Math. Подобрен е през 2013 г. до Шаблон:Math от Виргиния Василевска Уилиамс, като времето за изпълнение е малко по-високо от подобрението на Ле Гал: Шаблон:Cite web
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Robinson, 2005.
- ↑ Alon, Shpilka, Umans, On Sunflowers and Matrix Multiplication
- ↑ 16,0 16,1 Шаблон:Cite book
- ↑ Lynn Elliot Cannon, A cellular computer to implement the Kalman Filter Algorithm, Technical report, Ph.D. Thesis, Montana State University, 14 юли 1969.
- ↑ Шаблон:Cite journal
- ↑ 19,0 19,1 19,2 Шаблон:Cite journal
- ↑ 20,0 20,1 Шаблон:Cite journal
- ↑ Шаблон:Cite journal
- ↑ Шаблон:Cite book