Тази статия се нуждае от подобрение.
Необходимо е: превеждане английски термини на български.Ако желаете да помогнете на Уикипедия, използвайте опцията редактиране в горното меню над статията, за да нанесете нужните корекции.
Тази статия се нуждае от вниманието на редактор с по-задълбочени познания. Ако смятате, че имате необходимите знания, подобрете тази страница.
В математиката, умножение на матрици е бинарна операция, при която от две матрици се изчислява нова матрица.
Число от реалните или комплексни числа може да бъде умножено според елементарната аритметика. От друга страна, матриците са масиви от числа, така че не съществува един-единствен начин да се дефинира „умножението“ на матрици. Затова терминът „умножение на матрици“ се отнася до различни начини за умножение на матрици. Основните особености на което и да е умножение на матрици включва: броят на редовете и колоните на изходните матрици (наричат се „размер“, „ред“ или „измерение“), и упоменават как клетките на матрицата генерират новата матрица.
Могат да бъдат изведени още много определения. Най-полезната дефиниция може да бъде продиктувана от линейно уравнение и линейна трансформация на вектори, които имат приложение в математиката, физиката, и инженерството. Това определение често се нарича матрично произведение.[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, и т.н.
матричното произведение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 е матричната форма на тяхното диадно или тензорно произведение.
CBA не е дефинирано. Обърнете внимание, че A(BC) = (AB)C, това е едно от мнгото общи свойства, които са описани по-долу. Изрази като ABC се срещат когато се изчислява вътрешното произведение на два вектора, представени като вектор ред и вектор колона в произволна координатна система, и метричен тензор в тези координати обозначени като квадратна матрица.
Подобно на числоа (елементи на поле), матриците отговарят на следните общи свойства general properties, въпреки че съществува една особеност, която се дължи на природата на умножението на матрици.[7][8]
Умножението на матрици може да бъде разширено до случая, в който участват повече от две матрици, като всяка една двойка матрици трябва да удовлетворява предварителното условие за размерността.
Произведението на n матрици A1, A2, ..., An с резмерности s0 × s1, s1 × s2, ..., sn × 1 × sn (където s0, s1, s2, ..., sn са положителни числа, като индексите съответстват на тези на матриците), матрицата с размерност s0 × sn :
Разписано с индекси:
Свойства на матричното произведение (произволен брой)
Свойствата са в сила, докато редът на матриците не е променен. Някои от предишните свойства, валидни за две матрици, могат да бъдат обобщени както следва.
Повечето операции върху квадратни матрици могат да бъдат дефинирани посредством умножението на матрици. Например степенуването и коренуването на матрица могат да бъдат представени чрез многократно прилагане на умножението на матрици, матричната експонента може да бъде дефинирана чрез степенни редове, матричния логаритъм е обратната операция на матричната експоненто и т.н.
Квадратните матрици могат да бъдат умножени една с друга многократно по подобие на числата, защото те винаги запазват своя брой на редове и колони. Това многократно умножение може да се представи като степенуване на матрица, специален случай на умножението на матрици. От друга страна, правоъгълните матрици нямат същия брой на редове и колони и поради тази причина те никога не могат да бъдат повдигнати на степен. Матрица A с размерност n × n, повдигната на степен k цяло число, се дефинира по следния начин
Наивният подход при степенуване на матрица е матрицата 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 с размерност 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.
Поради природата на операциите с матрици и разположението на матриците в паметта, обикновено е възможно постигането на чувствително подобрение на производителността с помощта на паралелизация и векторизация. Съществуват няколко приложими алгоритми, сред които са и разделяй и владей алгоритмите, базирани на разлагането на матриците на блокове.
които лежат и в основата на алгоритъма на Страсен. Тук A, B и C вземат за квадратни n by n матрици, а C11 и т.н. са n/2 by n/2 подматрици. От това разлагане се получава[16]
което се състои от осем умножения на деойки подматрици, всички от които могат да бъдат изпълнявани паралелно, последвани от допълнителна стъпка. Ако това се приложи рекурсивно и събиранията се изпълнят отново паралелно, получения алгоритъм отнема Θ(log2n) време на идеална машина с безкраен брой процесори, и има максимална възможна скоростΘ(n3/(log2n)) на всички реални компютри (въпреки че алгоритъма не е практичен, негов по-практичен вариант постига Θ(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 с еднакви размерности произведението на Адамар A ○ B е матрица от същата размерност, като i, j-тия елемент на A е умножен с i, j-тия елемент на B, което изглежда по следния начин:
Произведението на Фробениус, понякога отбелязвано като A : B, е произведение на две матрици. То също така представлява сумата от елементите от произведението на Адамар. Подробно,
За две матрици A и B с произволни размерности съответно m × n и p × q (без каквито и да е било изисквания върху размерността на матриците), произведението на Крьоникер е матрицата
с размерност mp × nq. Това е приложението на най-общото тензорно произведение върху матрици.
↑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.
↑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.
↑ абв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.
↑ аб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.
↑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.