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

От testwiki
Направо към навигацията Направо към търсенето

Шаблон:Обработка Шаблон:Експерт В математиката, умножение на матрици е бинарна операция, при която от две матрици се изчислява нова матрица. Число от реалните или комплексни числа може да бъде умножено според елементарната аритметика. От друга страна, матриците са масиви от числа, така че не съществува един-единствен начин да се дефинира „умножението“ на матрици. Затова терминът „умножение на матрици“ се отнася до различни начини за умножение на матрици. Основните особености на което и да е умножение на матрици включва: броят на редовете и колоните на изходните матрици (наричат се „размер“, „ред“ или „измерение“), и упоменават как клетките на матрицата генерират новата матрица.

Както векторите, матрици с какъвто и да е размер могат да бъдат умножени по скалари, което се свежда до умножаване на всяка една от клетките по едно и също число. Подобно на определението за добавяне или изваждане на матрици, се прави и умножението на две матрици с еднакъв размер на съответните клетки и резултатът се нарича произведение на Адамар. Другият начин е да се получи произведение на Крокенер от две матрици, за да се получи матрица с блочна форма.

Могат да бъдат изведени още много определения. Най-полезната дефиниция може да бъде продиктувана от линейно уравнение и линейна трансформация на вектори, които имат приложение в математиката, физиката, и инженерството. Това определение често се нарича матрично произведение.[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:

(λ𝐀)ij=λ(𝐀)ij,

подробно:

λ𝐀=λ(A11A12A1mA21A22A2mAn1An2Anm)=(λA11λA12λA1mλA21λA22λA2mλAn1λAn2λAnm).

По подобен начин, дясното скаларно умножение на матрица Шаблон:Math със скаларен множител Шаблон:Math е

(𝐀λ)ij=(𝐀)ijλ,

подробно:

𝐀λ=(A11A12A1mA21A22A2mAn1An2Anm)λ=(A11λA12λA1mλA21λA22λA2mλAn1λAn2λAnmλ).

Когато подстоящият пръстен е комутативен, например, реално или комплексното число поле, тези две умножения са еквивалентни, и се наричат скаларно умножение. За матрици в по-общ пръстен които не са комутативни, каквито са кватернионите, те може да не са равни.

При реален скаларен множител и матрица:

λ=2,𝐀=(abcd)
2𝐀=2(abcd)=(2a2b2c2d)=(a2b2c2d2)=(abcd)2=𝐀2.

При скаларен множител кватернион и матрици:

λ=i,𝐀=(i00j)
i(i00j)=(i200ij)=(100k)(100k)=(i200ji)=(i00j)i,

където Шаблон:Math са кватернионите. Некомутативността на умножението на кватерниони не позволява прехода на Шаблон:Math към Шаблон:Math.

Произведение на матрици (две матрици)

Да допуснем че две матрици ще бъдат умножени (по-долу се разглежда случай, сведен до каквото и да е число).

Обща дефиниция на матрично произведение

Arithmetic process of multiplying numbers (solid lines) in row Шаблон:Math in matrix Шаблон:Math and column Шаблон:Math in matrix Шаблон:Math, then adding the terms (dashed lines) to obtain entry Шаблон:Math in the final matrix.

Ако Шаблон:Math е Шаблон:Math матрица и Шаблон:Math е Шаблон:Math матрица,

𝐀=(A11A12A1mA21A22A2mAn1An2Anm),𝐁=(B11B12B1pB21B22B2pBm1Bm2Bmp)

матричното произведение Шаблон:Math (обозначено без знаци за умножение или точки) представлява Шаблон:Math матрица[3][4][5][6]

𝐀𝐁=((𝐀𝐁)11(𝐀𝐁)12(𝐀𝐁)1p(𝐀𝐁)21(𝐀𝐁)22(𝐀𝐁)2p(𝐀𝐁)n1(𝐀𝐁)n2(𝐀𝐁)np)

където всяка Шаблон:Math клетка се получава при умножаването на клетките Шаблон:Math (хоризонтален ред Шаблон:Math на Шаблон:Math) по клетките Шаблон:Math (вертикална колона Шаблон:Math на Шаблон:Math), за Шаблон:Math, и сумирането на резултатите в Шаблон:Math:

(𝐀𝐁)ij=k=1mAikBkj.

По този начин произведението Шаблон:Math се определя само ако броят на колоните в Шаблон:Math е равен на броя на редовете в Шаблон:Math, в този случай Шаблон:Math. Клетките могат да бъдат изчислявани една по една. Понякога, конвенцията за сумиране на Айнщайн се използва, за да се разбере сумата на повтарящия се индекс Шаблон:Math. За да се избегне двусмислие, конвенцията няма да бъде засегната в тази статия.

Обикновено клетките са цифри или изрази, но могат самите те да бъдат матрици (виж блок матрици). И в този случай матричното произведение пак се изчислява по същия начин. Може да се види подробно по-долу как матричното произведение може да бъде изчислено на базата на блокове, които приемат формата на редове и колони.

Илюстриране

Фигурата отдясно илюстрира чрез диаграма произведението на две матрици Шаблон:Math and Шаблон:Math, и показва как всеки отрязък в матричното произведение отговаря на ред от Шаблон:Math и колона от Шаблон:Math.

[a11a12a31a32]4×2 matrix[b12b13b22b23]2×3 matrix=[x12x13x32x33]4×3 matrix

Стойностите на отрязъците обозначени с кръгове са:

x12=a11b12+a12b22x13=a11b13+a12b23x32=a31b12+a32b22x33=a31b13+a32b23

Примери за произведение на матрици

Ако

𝐀=(abc),𝐁=(xyz),

техните матрични произведения са:

𝐀𝐁=(abc)(xyz)=ax+by+cz,

и

𝐁𝐀=(xyz)(abc)=(xaxbxcyaybyczazbzc).

Обърнете внимание, че Шаблон:Math и Шаблон:Math са две различни матрици: първата е Шаблон:Math матрица докато втората е Шаблон:Math матрица. Такива изрази се срещат при реални стойности в Евклидови вектори в Декартова координатна системаи, представени като матрици с редове и колони, при което Шаблон:Math е матричната форма на тяхното скаларно произведение, докато Шаблон:Math е матричната форма на тяхното диадно или тензорно произведение.

Квадратна матрица и вектор колона

Ако

𝐀=(abcpqruvw),𝐁=(xyz),

матричното произведение е:

𝐀𝐁=(abcpqruvw)(xyz)=(ax+by+czpx+qy+rzux+vy+wz),

при което Шаблон:Math не е определено.

До произведението на квадратна матрица умножена по матрица от колона се достига естествено в линейната алгебра; за решаване на линейни уравнения и представянето им като линейни трансформации.

Квадратни матрици

Ако

𝐀=(abcpqruvw),𝐁=(αβγλμνρστ),

техните матрични произведения са:

𝐀𝐁=(abcpqruvw)(αβγλμνρστ)=(aα+bλ+cρaβ+bμ+cσaγ+bν+cτpα+qλ+rρpβ+qμ+rσpγ+qν+rτuα+vλ+wρuβ+vμ+wσuγ+vν+wτ),

и

𝐁𝐀=(αβγλμνρστ)(abcpqruvw)=(αa+βp+γuαb+βq+γvαc+βr+γwλa+μp+νuλb+μq+νvλc+μr+νwρa+σp+τuρb+σq+τvρc+σr+τw).

В този случай, и двете произведения Шаблон:Math and Шаблон:Math са дефинирани, и клетките показват, че Шаблон:Math и Шаблон:Math по принцип не са равни.

Умножението на квадратни матрици, които представят линейни transformations отговаря на composite transformation (за детайли виж по-долу).

Вектор ред, квадратна матрица, и вектор колона

Ако

𝐀=(abc),𝐁=(αβγλμνρστ),𝐂=(xyz),

тяхното матрично произведение е:

𝐀𝐁𝐂=(abc)[(αβγλμνρστ)(xyz)]=[(abc)(αβγλμνρστ)](xyz)=(abc)(αx+βy+γzλx+μy+νzρx+σy+τz)=(aα+bλ+cρaβ+bμ+cσaγ+bν+cτ)(xyz)=aαx+bλx+cρx+aβy+bμy+cσy+aγz+bνz+cτz,

Шаблон:Math не е дефинирано. Обърнете внимание, че Шаблон:Math, това е едно от мнгото общи свойства, които са описани по-долу. Изрази като Шаблон:Math се срещат когато се изчислява вътрешното произведение на два вектора, представени като вектор ред и вектор колона в произволна координатна система, и метричен тензор в тези координати обозначени като квадратна матрица.

Четириъгълни матрици

Ако

𝐀=(abcxyz),𝐁=(αρβσγτ),

техните матрични произведения са:

𝐀𝐁=(abcxyz)(αρβσγτ)=(aα+bβ+cγaρ+bσ+cτxα+yβ+zγxρ+yσ+zτ),

и

𝐁𝐀=(αρβσγτ)(abcxyz)=(αa+ρxαb+ρyαc+ρzβa+σxβb+σyβc+σzγa+τxγb+τyγc+τz).

Свойства на матричното произведение (две матрици)

Подобно на числоа (елементи на поле), матриците отговарят на следните общи свойства general properties, въпреки че съществува една особеност, която се дължи на природата на умножението на матрици.[7][8]

Всички матрици

Шаблон:Ordered list

Шаблон:For

Само квадратни матрици

Шаблон:Основна

Шаблон:Ordered list

Произведение на матрици (произволен брой)

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

Произведението на Шаблон:Math матрици Шаблон:Math с резмерности Шаблон:Math (където Шаблон:Math са положителни числа, като индексите съответстват на тези на матриците), матрицата с размерност Шаблон:Math :

i=1n𝐀i=𝐀1𝐀2𝐀n

Разписано с индекси:

(𝐀1𝐀2𝐀n)i0in=i1=1s1i2=1s2in1=1sn1(𝐀1)i0i1(𝐀2)i1i2(𝐀3)i2i3(𝐀n1)in2in1(𝐀n)in1in

Свойства на матричното произведение (произволен брой)

Свойствата са в сила, докато редът на матриците не е променен. Някои от предишните свойства, валидни за две матрици, могат да бъдат обобщени както следва.

Шаблон:Ordered list

Операции, произлизащи от умножението на матрици

Повечето операции върху квадратни матрици могат да бъдат дефинирани посредством умножението на матрици. Например степенуването и коренуването на матрица могат да бъдат представени чрез многократно прилагане на умножението на матрици, матричната експонента може да бъде дефинирана чрез степенни редове, матричния логаритъм е обратната операция на матричната експоненто и т.н.

Степенуване на матрица

Квадратните матрици могат да бъдат умножени една с друга многократно по подобие на числата, защото те винаги запазват своя брой на редове и колони. Това многократно умножение може да се представи като степенуване на матрица, специален случай на умножението на матрици. От друга страна, правоъгълните матрици нямат същия брой на редове и колони и поради тази причина те никога не могат да бъдат повдигнати на степен. Матрица Шаблон:Math с размерност Шаблон:Math, повдигната на степен Шаблон:Math цяло число, се дефинира по следния начин

𝐀k=𝐀𝐀𝐀ktimes

и следните свойства са в сила, където Шаблон:Math е скалар:

1. Нулева степен:

𝐀0=𝐈

където I е единичната матрица. Това е съпоставимо с повдигането на степен нула на кое и да е число, което е равно на единица.

2. Умножение със скалар:

(λ𝐀)k=λk𝐀k

3. Детерминанта:

det(𝐀k)=det(𝐀)k

Наивният подход при степенуване на матрица е матрицата Шаблон:Math да се умножи Шаблон:Math пъти. Този метод б могъл да бъде оптимизиран чрез използване на алгоритъм за бързо пресмятане на степен – метод предимно използван за скалари. За матрици, които са подобни на диагоналните, още по-добър вариант е да се използва спектралната декомпозиция на Шаблон:Math. Друг метод, базиран на теоремата на Хамилтон-Кейли намира по-ефективно уравнение за Шаблон:Math, в което даден скалар се повдига на нужната степен отколкото цялата матрица.

Специален случай е степенуването на диагонална матрица. Понеже умножаването на диагонални матрици се състои просто в умножение на съответните диагонални елементи, диагоналната матрица Шаблон:Math на степен Шаблон:Math ще се състои от елементи, повдигнати на степента. По-подробно;

𝐀k=(A11000A22000Ann)k=(A11k000A22k000Annk)

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

Приложения на умножението на матрици

Линейни трансформации

Шаблон:Main

Матриците предоставят сбит начин на представяне на линейни изображения между векторни пространства и умножението на матрици съответства на композицията на линейни изображения. Произведението на две матрици може да бъде дефинирано, когато елементите им принадлежат на същия пръстен пръстен и следователно може да бъде добавян и умножаван.

Нека Шаблон:Math, и Шаблон:Math са линейни пространства над едно и също поле с дадени базиси, Шаблон:Math и Шаблон:Math са линейни изображения и Шаблон:Math е тяхната композиция.

Да предположим, че Шаблон:Math, и Шаблон:Math са матриците, представящи изображенията Шаблон:Math, и Шаблон:Math спрямо дадените базиси.

Тогава матрицата Шаблон:Math, композицията (или произведението) на линейни изображения е произведението на техните матрици спрямо дадените базиси.

Система линейни уравнения

Система линейни уравнения с еднакъв брой уравнения и неизвестни може да бъде решена чрез съставянето на матрица от коефициентите на уравненията.

Сходна процедура може да бъде използвана при решаването на линейни диференциални уравнения.

Векторно и диадно произведение

При дадени два вектор стълба Шаблон:Math и Шаблон:Math, скаларното произведение и диадното произведение са най-простите случаи на матрично произведение.

Скаларно произведение

Скаларното произведение на два вектора в матричен вид е еквивалентно на вектор стълб, умножен от лявата си страна с вектор ред:

𝐚𝐛=𝐚T𝐛=(a1a2an)(b1b2bn)=a1b1+a2b2++anbn=i=1naibi,

където Шаблон:Math е транспонираната матрица на a.

Матричното произведение може да се представи под форма на скаларно произведение. Да предположим, че матрицата A с размерност Шаблон:Math е представена чрез вектор редовете Шаблон:Math, а матрицата Шаблон:Math с размерност Шаблон:Math е представена чрез вектор стълбовете Шаблон:Math:

𝐀=(A11A12A1mA21A22A2mAn1An2Anm)=(𝐚1𝐚2𝐚n),
𝐁=(B11B12B1pB21B22B2pBm1Bm2Bmp)=(𝐛1𝐛2𝐛p)

където

𝐚i=(Ai1Ai2Aim),𝐛i=(B1iB2iBmi)

Тогава:

𝐀𝐁=(𝐚1𝐚2𝐚n)(𝐛1𝐛2𝐛p)=((𝐚1𝐛1)(𝐚1𝐛2)(𝐚1𝐛p)(𝐚2𝐛1)(𝐚2𝐛2)(𝐚2𝐛p)(𝐚n𝐛1)(𝐚n𝐛2)(𝐚n𝐛p))

Също така е възможно дадено матрично произведение да се изрази под формата на произведение на матрици и вектор ред или стълб.:

𝐀𝐁=(𝐀𝐛1𝐀𝐛2𝐀𝐛p)=(𝐚1𝐁𝐚2𝐁𝐚n𝐁)

Тези преобразувания са особено полезни за матрици, които са представени като конкатенации на различни типове вектор редове или вектор колони. Например ортогоналните матрици (чиито редове са ортогонални един на друг) и матриците на Марков (при които сумата от редовете или колоните е равна на единица).

Диадно произведение

Диадното произведение (също познато като тензорно произведение) на два вектора в матричен вид е еквивалентно на вектор ред, умножен от ляво с вектор стълб:

𝐚𝐛=𝐚𝐛T=(a1a2an)(b1b2bn)=(a1b1a1b2a1bna2b1a2b2a2bnanb1anb2anbn).

Умножението на матрици може да се представи под форма на диадно произведение. Матрицата Шаблон:Math е представена чрез вектор стълбовете Шаблон:Math, а матрицата Шаблон:Math – чрез вектор редовете Шаблон:Math:

𝐀𝐁=(𝐚¯1𝐚¯2𝐚¯m)(𝐛¯1𝐛¯2𝐛¯m)=𝐚¯1𝐛¯1+𝐚¯2𝐛¯2++𝐚¯m𝐛¯m=i=1m𝐚¯i𝐛¯i

където този път

𝐚¯i=(A1iA2iAni),𝐛¯i=(Bi1Bi2Bip).

Този метод подчертава ефекта от отделните стълб/ред двойки в резултата.

(123456789)(adbecf)=(147)(ad)+(258)(be)+(369)(cf)=(1a1d4a4d7a7d)+(2b2e5b5e8b8e)+(3c3f6c6f9c9f)=(1a+2b+3c1d+2e+3f4a+5b+6c4d+5e+6f7a+8b+9c7d+8e+9f).

Алгоритми за ефективно умножение на матрици

Шаблон:Main

Граници на Шаблон:Math във времето.

Времето за умножение на квадратни матрици с наивен алгоритъм е Шаблон:Math. Времето за умножение на правоъгълни матрици (една Шаблон:Math-матрица с една Шаблон:Math-матрица) е Шаблон:Math, Все пак съществуват и по-ефективни алгоритми за целта, например алгоритъм на Страсен, разработен през 1969 г. от Volker Strassen и често срещан под името „бързо умножение на матрици“. Той се базира на определен начин на умножение на две Шаблон:Math-матрици, изискващ само 7 умножения (вместо обичайните 8) за сметка на няколко допълнителни операции по събиране и изваждане. Използването на това чрез рекурсия дава като резултат сложност O(nlog27)O(n2.807). Алгоритъмът на Страсен е по-сложен, а неговата числена стабилност е по-ниска в сравнение с тази на наивния алгоритъм.[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.

Умножение на блокове матрици. При 2D алгоритъмът всеки процесор отговаря за една подматрица Шаблон:Math. При 3D алгоритъмът, умножението на всеки чифт подматрици от Шаблон:Math и Шаблон:Math се подава на един процесор..

Паралелно умножение на матрици

Поради природата на операциите с матрици и разположението на матриците в паметта, обикновено е възможно постигането на чувствително подобрение на производителността с помощта на паралелизация и векторизация. Съществуват няколко приложими алгоритми, сред които са и разделяй и владей алгоритмите, базирани на разлагането на матриците на блокове.

𝐂=(𝐂11𝐂12𝐂21𝐂22)=(𝐀11𝐀12𝐀21𝐀22)(𝐁11𝐁12𝐁21𝐁22)=𝐀𝐁

които лежат и в основата на алгоритъма на Страсен. Тук Шаблон:Math, Шаблон:Math и Шаблон:Math вземат за квадратни Шаблон:Mvar by Шаблон:Mvar матрици, а Шаблон:Math и т.н. са Шаблон:Math by Шаблон:Math подматрици. От това разлагане се получава[16]

(𝐀11𝐀12𝐀21𝐀22)(𝐁11𝐁12𝐁21𝐁22)=(𝐀11𝐁11+𝐀12𝐁21𝐀11𝐁12+𝐀12𝐁22𝐀21𝐁11+𝐀22𝐁21𝐀21𝐁12+𝐀22𝐁22)

което се състои от осем умножения на деойки подматрици, всички от които могат да бъдат изпълнявани паралелно, последвани от допълнителна стъпка. Ако това се приложи рекурсивно и събиранията се изпълнят отново паралелно, получения алгоритъм отнема Шаблон: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]

Други форми на умножение

По-долу са представени няколко други начина за умножение на матрици. Всъщност, някои от тях са по-прости от дефиницията по-горе.

Произведение на Адамар

Шаблон:Main

Произведението на Адамар е предназначено за две матрици с еднакви размерности. За две матрици Шаблон:Math и Шаблон:Math с еднакви размерности произведението на Адамар Шаблон:Math е матрица от същата размерност, като Шаблон:Math-тия елемент на Шаблон:Math е умножен с Шаблон:Math-тия елемент на Шаблон:Math, което изглежда по следния начин:

(𝐀𝐁)ij=AijBij,

разписано пълно:

𝐀𝐁=(A11A12A1mA21A22A2mAn1An2Anm)(B11B12B1mB21B22B2mBn1Bn2Bnm)=(A11B11A12B12A1mB1mA21B21A22B22A2mB2mAn1Bn1An2Bn2AnmBnm)

Тази операция е идентична с това да се умножат много числа едновременно. Следователно произведението Адамар e комутативно, асоциативно и дистрибутивно. Също така е основна подматрица от произведението на Крьонекер. Съдържа се в алгоритми за компресия като JPEG.

Произведение на Фробениус

Произведението на Фробениус, понякога отбелязвано като Шаблон:Math, е произведение на две матрици. То също така представлява сумата от елементите от произведението на Адамар. Подробно,

𝐀:𝐁=i,jAijBij=vec(𝐀)𝖳vec(𝐁)=tr(𝐀𝖳𝐁)=tr(𝐀𝐁𝖳),

където „tr“ означава следата на матрица, а vec означава векторизацията.

Произведение на Крьонекер

Шаблон:Main

За две матрици Шаблон:Math и Шаблон:Math с произволни размерности съответно Шаблон:Math и Шаблон:Math (без каквито и да е било изисквания върху размерността на матриците), произведението на Крьоникер е матрицата

𝐀𝐁=(A11𝐁A12𝐁A1n𝐁A21𝐁A22𝐁A2n𝐁Am1𝐁Am2𝐁Amn𝐁).

с размерност Шаблон:Math. Това е приложението на най-общото тензорно произведение върху матрици.

Бележки

  1. Шаблон:Cite book
  2. Шаблон:Cite book
  3. Шаблон:Cite book
  4. Шаблон:Cite book
  5. Шаблон:Cite book
  6. Шаблон:Cite book
  7. Шаблон:Cite book
  8. Шаблон:Cite book
  9. Шаблон:Cite journal
  10. Press 2007, p. 108.
  11. Шаблон:Cite book. Оригиналния алгоритъм е представен от Дон Копърсмит и Шмуел Виноград през 1990 г. и има асимптотична сложност Шаблон:Math. Подобрен е през 2013 г. до Шаблон:Math от Виргиния Василевска Уилиамс, като времето за изпълнение е малко по-високо от подобрението на Ле Гал: Шаблон:Cite web
  12. Шаблон:Cite journal
  13. Шаблон:Cite journal
  14. Robinson, 2005.
  15. Alon, Shpilka, Umans, On Sunflowers and Matrix Multiplication
  16. 16,0 16,1 Шаблон:Cite book
  17. Lynn Elliot Cannon, A cellular computer to implement the Kalman Filter Algorithm, Technical report, Ph.D. Thesis, Montana State University, 14 юли 1969.
  18. Шаблон:Cite journal
  19. 19,0 19,1 19,2 Шаблон:Cite journal
  20. 20,0 20,1 Шаблон:Cite journal
  21. Шаблон:Cite journal
  22. Шаблон:Cite book