Направо към съдържанието

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

от Уикипедия, свободната енциклопедия

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

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

Могат да бъдат изведени още много определения. Най-полезната дефиниция може да бъде продиктувана от линейно уравнение и линейна трансформация на вектори, които имат приложение в математиката, физиката, и инженерството. Това определение често се нарича матрично произведение.[1][2] С други думи, ако A е n × m матрица и B е m × p матрица, тяхното матрично произведение AB еn × p матрица, в която m клетките по редовете A се умножават с m клетките по колоните B.

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

Изчисляването на матрични произведения е основна операция в много числови алгоритмии има вероятност да е времеотнемаща, което я прави един от най-изучаваните проблеми в цифровите изчисления. Измислени са различни алгоритми за изчисляване на C = AB, особено за големи матрици.

Тази статия спазва следните конвенции: матриците са представени от главни букви с удебелен шрифт, например A, вектори с малки букви с удебелен шрифт, например a, а клетките на векторите и матриците са с наклонен шрифт (тъй като са скалари), например A и a. Индексната нотация често е най-ясният начин да се изразят определенията, и е приета като стандарт в литературата. Клетката i, j на матрица A се обозначава от(A)ij или Aij, докато a цифрово обозначение (не матрична клетка) в колекция от матрици само е подчертано, например: A1, A2, и т.н.

Скаларно умножение

[редактиране | редактиране на кода]

Най-простата форма на умножение на матрици е скаларното умножение, което е частен случай на произведението на Кронекер.

Лявото скаларно умножение на матрица A със скаларен множител λ дава друга матрица λA със същия размер като A. се определя с уравнението λA:

подробно:

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

подробно:

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

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

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

където i, j, k са кватернионите. Некомутативността на умножението на кватерниони не позволява прехода на ij = +k към ji = −k.

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

[редактиране | редактиране на кода]

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

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

[редактиране | редактиране на кода]
Arithmetic process of multiplying numbers (solid lines) in row i in matrix A and column j in matrix B, then adding the terms (dashed lines) to obtain entry ij in the final matrix.

Ако A е n × m матрица и B е m × p матрица,

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

където всяка i, j клетка се получава при умножаването на клетките Aik (хоризонтален ред i на A) по клетките Bkj (вертикална колона j на B), за k = 1, 2, ..., m, и сумирането на резултатите в k:

По този начин произведението AB се определя само ако броят на колоните в A е равен на броя на редовете в B, в този случай m. Клетките могат да бъдат изчислявани една по една. Понякога, конвенцията за сумиране на Айнщайн се използва, за да се разбере сумата на повтарящия се индекс k. За да се избегне двусмислие, конвенцията няма да бъде засегната в тази статия.

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

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

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

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

[редактиране | редактиране на кода]

Ако

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

и

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

Ако

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

при което BA не е определено.

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

Ако

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

и

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

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

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

[редактиране | редактиране на кода]

Ако

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

CBA не е дефинирано. Обърнете внимание, че A(BC) = (AB)C, това е едно от мнгото общи свойства, които са описани по-долу. Изрази като ABC се срещат когато се изчислява вътрешното произведение на два вектора, представени като вектор ред и вектор колона в произволна координатна система, и метричен тензор в тези координати обозначени като квадратна матрица.

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

[редактиране | редактиране на кода]

Ако

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

и

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

[редактиране | редактиране на кода]

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

Шаблон:Ordered list

Шаблон:For

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

[редактиране | редактиране на кода]

Шаблон:Ordered list

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

[редактиране | редактиране на кода]

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

Произведението на n матрици A1, A2, ..., An с резмерности s0 × s1, s1 × s2, ..., sn × 1 × sn (където s0, s1, s2, ..., sn са положителни числа, като индексите съответстват на тези на матриците), матрицата с размерност s0 × sn :

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

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

[редактиране | редактиране на кода]

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

Шаблон:Ordered list

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

[редактиране | редактиране на кода]

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

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

[редактиране | редактиране на кода]

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

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

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

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

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

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

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

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

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

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

[редактиране | редактиране на кода]

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

[редактиране | редактиране на кода]

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

Нека U, V, и W са линейни пространства над едно и също поле с дадени базиси, S: V > W и T: U > V са линейни изображения и ST: U > W е тяхната композиция.

Да предположим, че A, B, и C са матриците, представящи изображенията S, T, и ST спрямо дадените базиси.

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

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

[редактиране | редактиране на кода]

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

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

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

[редактиране | редактиране на кода]

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

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

[редактиране | редактиране на кода]

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

където aT е транспонираната матрица на a.

Матричното произведение може да се представи под форма на скаларно произведение. Да предположим, че матрицата A с размерност n × m е представена чрез вектор редовете ai, а матрицата B с размерност m × p е представена чрез вектор стълбовете bi:

където

Тогава:

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

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

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

[редактиране | редактиране на кода]

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

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

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

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

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

[редактиране | редактиране на кода]
Граници на ω във времето.

Времето за умножение на квадратни матрици с наивен алгоритъм е O(n3). Времето за умножение на правоъгълни матрици (една m × p-матрица с една p × n-матрица) е O(mnp), Все пак съществуват и по-ефективни алгоритми за целта, например алгоритъм на Страсен, разработен през 1969 г. от Volker Strassen и често срещан под името „бързо умножение на матрици“. Той се базира на определен начин на умножение на две 2 × 2-матрици, изискващ само 7 умножения (вместо обичайните 8) за сметка на няколко допълнителни операции по събиране и изваждане. Използването на това чрез рекурсия дава като резултат сложност . Алгоритъмът на Страсен е по-сложен, а неговата числена стабилност е по-ниска в сравнение с тази на наивния алгоритъм.[9] Въпреки това, последния е включен в няколко библиотеки като BLAS, където той е чувствително по-ефективен за матрици с размери над 100,[10] и освен това е много полезен за големи матрици над точните области като крайни полета, където числената стабилност не е проблем.

Настоящият O(nk) алгоритъм с възможно най-ниската експонента k е обобщение на алгоритъм на Копърсмит-Виноград с асимптотична сложност O(n2.3728639), създаден от Франсоа Ле Гал.[11] Този алгоритъм, заедно с алгоритъм на Копърсмит-Виноград на който е базиран, са близки до алгоритъма на Страсен: намерен е начин за умножение на две k ? k-матрици с по-малко от k3 умножения, и след това тази техника е приложена рекурсивно. Въпреки това, константния коефициент, скрит зад голямата О нотация, е толкова голям, че тези алгоритми си струва да бъдат прилагани само за матрици, които са твърде големи за обработка със съвременната изчислителна техника.[12][13]

Тъй като всеки алгоритъм за умножение на две n × n-матрици трябва да обработи 2 × n2-елемента, има асимптотична долна граница от Ω(n2) операции. През 2002 г. Раз доказва че стойността на долната граница за аритметични вериги със свързани коефициенти е по-ниска Ω(n2 log(n)) от тази при реални или сложни числа.

През 2003 – 2005 г. Коун и други слагат методиките на алгоритмите на Страсен и Копърсмит-Виноград в напълно различен, групово-теоретичен контекст. Това става чрез употребата на тройки от подмножества на крайни групи, които нямат общи елементи, наречено още свойство на тройното произведение (TPP). Те показват, че ако семействата на кръглите произведения на Абелови групи със симетрични групи дава семейства от тройки подмножества с еднаква версия на тяхното TPP, това значи че има алгоритми за умножение на матрици с приблизително квадратична сложност. Повечето изследователи вярват в че това е вярно.[14] Въпреки това, Алон, Шпилка и Крис Уманс доказват, че при някои от тези предположения бързото умножението на матрици е несъвместимо с друго предположение – това на слънчогледа.[15]

Алгоритъмът на Фрайвалдс е обикновен Монте Карло алгоритъм, който, при дадени матрици A, B, C се изпълнява за Θ(n2) време, ако AB = C.

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

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

[редактиране | редактиране на кода]

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

които лежат и в основата на алгоритъма на Страсен. Тук A, B и C вземат за квадратни n by n матрици, а C11 и т.н. са n/2 by n/2 подматрици. От това разлагане се получава[16]

което се състои от осем умножения на деойки подматрици, всички от които могат да бъдат изпълнявани паралелно, последвани от допълнителна стъпка. Ако това се приложи рекурсивно и събиранията се изпълнят отново паралелно, получения алгоритъм отнема Θ(log2 n) време на идеална машина с безкраен брой процесори, и има максимална възможна скорост Θ(n3/(log2 n)) на всички реални компютри (въпреки че алгоритъма не е практичен, негов по-практичен вариант постига Θ(n2) скорост).[16]

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

Разпределени алгоритми и алгоритми избягващи комуникация

[редактиране | редактиране на кода]

При модерните архитектури с йерархична памет, цената на зареджане и съхранение на данните от матричните елементи е по=висока от тази на изчисленията. За една машина това е количеството данни, пренасяно между RAM паметта и кеша, докато при многовъзловите машини с разпределена памет това е количеството данни, премасяно междъ отделните възли. И в двата случая това се нарича ширина на потока за комуникация. Наивните алгоритми, ползващи три вложени цикъла използват Ω(n3) широчина на комуникационния поток.

Алгоритъма на Канон, познат още като 2D алгоритъм, разделя всяка входна матрица на блокове чиито елементи са подматрици с големина M/3 by M/3, където M е размера на бързата памет.[17] След това за блоковете от матрици се прилага наивния алгоритъм, който изчислява произведенията на подматриците изцяло в бързата памет. Това намалява широчината на комуникационния канал до O(n3/M), което е асимптотично оптимално (за алгоритми с изчислителна производителност Ω(n3)).[18][19]

В разпределена среда с p процесора подредени в p на p 2D мрежа, към всеки процесор може да бъде зачислена една подматрица, а произведението – да бъде изчислено с всеки процесор, предавайки O(n2/p) думи. Това е асимптотично оптимално, ако се предположи че всеки изчислителен възел съхранява минимум O(n2/p) елементи.[19] Това може да бъде подобрено от 3D алгоритъм, който подрежда процесорите в 3D мрежа с форма на куб, давайки всяко произведение на две подматрици на един процесор. Получените в резултат подматрици след това се генерират посредством изваждане на всеки ред.[20] Този алгоритъм предава O(n2/p2/3) думи на процесор, което е асимптотично оптимално.[19] Все пак, това изисква репликиране на всеки елемент от входящите матрици p1/3 пъти, и следователно изисква фактор от p1/3 пъти повече памет, в сравнение с нужната за съхранението на входните данни. Този алгоритъм може да се комбинира с алгоритъма на Страсен с цел да се намали още повече времето за изпълнение.[20] „2.5D“ алгоритмите предоставят баланс между ползването на памет и широчината на комуникационния канал.[21] За съвременните разпределени компютърни среди като MapReduce са създадени специализирани алгоритми за умножение.[22]

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

[редактиране | редактиране на кода]

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

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

[редактиране | редактиране на кода]

Произведението на Адамар е предназначено за две матрици с еднакви размерности. За две матрици A и B с еднакви размерности произведението на Адамар AB е матрица от същата размерност, като i, j-тия елемент на A е умножен с i, j-тия елемент на B, което изглежда по следния начин:

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

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

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

[редактиране | редактиране на кода]

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

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

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

[редактиране | редактиране на кода]

За две матрици A и B с произволни размерности съответно m × n и p × q (без каквито и да е било изисквания върху размерността на матриците), произведението на Крьоникер е матрицата

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

  1. Lerner, R. G., Trigg, G. L. Encyclopaedia of Physics. 2nd. VHC publishers, 1991. ISBN 3-527-26954-1.
  2. Parker, C. B. McGraw Hill Encyclopaedia of Physics. 2nd. 1994. ISBN 0-07-051400-3.
  3. Lipschutz, S., Lipson, M. Linear Algebra. 4th. McGraw Hill (USA), 2009. ISBN 978-0-07-154352-1. с. 30 – 31.
  4. Riley, K. F., Hobson, M. P., Bence, S. J. Mathematical methods for physics and engineering. Cambridge University Press, 2010. ISBN 978-0-521-86153-3.
  5. Adams, R. A. Calculus, A Complete Course. 3rd. Addison Wesley, 1995. ISBN 0 201 82823 5. с. 627.
  6. Horn, Johnson. Matrix Analysis. 2nd. Cambridge University Press, 2013. ISBN 978 0 521 54823 6. с. 6.
  7. 2 // Linear Algebra. 4th. McGraw Hill (USA), 2009. ISBN 978-0-07-154352-1.
  8. Horn, Johnson. 0 // Matrix Analysis. 2nd. Cambridge University Press, 2013. ISBN 978 0 521 54823 6.
  9. Miller, Webb. Computational complexity and numerical stability // SIAM News 4. 1975. DOI:10.1137/0204009. 10.1.1.148.9947. с. 97 – 107.
  10. Press 2007, p. 108.
  11. Powers of tensors and fast matrix multiplication // Proceedings of the 39th International Symposium on Symbolic and Algebraic Computation (ISSAC 2014). 2014.. Оригиналния алгоритъм е представен от Дон Копърсмит и Шмуел Виноград през 1990 г. и има асимптотична сложност O(n2.376). Подобрен е през 2013 г. до O(n2.3729) от Виргиния Василевска Уилиамс, като времето за изпълнение е малко по-високо от подобрението на Ле Гал: Williams, Virginia Vassilevska. Multiplying matrices faster than Coppersmith-Winograd // Архивиран от оригинала на 2013-10-08. Посетен на 2015-09-29.
  12. Iliopoulos, Costas S. Worst-case complexity bounds on algorithms for computing the canonical structure of finite abelian groups and the Hermite and Smith normal forms of an integer matrix // SIAM Journal on Computing 18 (4). 1989. DOI:10.1137/0218045. с. 658 – 669. Архивиран от оригинала на 2014-03-05. Посетен на 2015-09-29. The Coppersmith–Winograd algorithm is not practical, due to the very large hidden constant in the upper bound on the number of multiplications required.
  13. Robinson, Sara. Toward an Optimal Algorithm for Matrix Multiplication // SIAM News 38 (9). 2005.
  14. Robinson, 2005.
  15. Alon, Shpilka, Umans, On Sunflowers and Matrix Multiplication
  16. а б Ph.D. Keith H. Randall. Cilk: Efficient Multithreaded Computing. Massachusetts Institute of Technology, 1998. с. 54 – 57.
  17. Lynn Elliot Cannon, A cellular computer to implement the Kalman Filter Algorithm, Technical report, Ph.D. Thesis, Montana State University, 14 юли 1969.
  18. Hong, J.W. и др. I/O complexity: The red-blue pebble game // STOC ’81: Proceedings of the thirteenth annual ACM symposium on Theory of computing. 1981. с. 326 – 333.
  19. а б в Irony, Dror и др. Communication lower bounds for distributed-memory matrix multiplication // J. Parallel Distrib. Comput. 64 (9). September 2004. DOI:10.1016/j.jpdc.2004.03.021. с. 1017 – 1026.
  20. а б Agarwal, R.C. и др. A three-dimensional approach to parallel matrix multiplication // IBM J. Res. Dev. 39 (5). September 1995. DOI:10.1147/rd.395.0575. с. 575 – 582.
  21. Solomonik, Edgar и др. Communication-optimal parallel 2.5D matrix multiplication and LU factorization algorithms // Proceedings of the 17th international conference on Parallel processing Part II. 2011. DOI:10.1007/978-3-642-23397-5_10. с. 90 – 109.
  22. Bosagh Zadeh, Reza, Carlsson, Gunnar. Dimension Independent Matrix Square Using MapReduce. Посетен на 12 юли 2014.