Mnożenie macierzy
Z Wikipedii
Niniejszy artykuł jest częścią cyklu macierze.
|
Niektóre typy macierzy Operacje na macierzach Inne zagadnienia |
edytuj ten szablon |
Spis treści |
[edytuj] Definicja formalna
Formalnie rzecz biorąc, mnożenie macierzy jest działaniem dwuargumentowym, które parze macierzy przyporządkowuje macierz
o współczynnikach:
,
gdzie:
,
,
- n - liczba kolumn pierwszej macierzy (albo, równoważnie, liczba wierszy drugiej macierzy).
[edytuj] Algorytm mnożenia
Poniżej zilustrowany został sposób obliczania elementów oraz
macierzy wynikowej
, będącej iloczynem macierzy
i
.
Przykładowo, element powstaje z sumy iloczynów odpowiadających sobie elementów z pierwszego wiersza macierzy A i drugiej kolumny macierzy B (elementy macierzy składowych bierzemy zgodnie z kierunkiem strzałek). Innymi słowy, aby wyznaczyć element
, musimy wymnożyć pierwszy element z pierwszego wiersza macierzy A przez pierwszy element z drugiej kolumny macierzy B, i do tego dodać iloczyn drugiego elementu z pierwszego wiersza macierzy A i drugiego elementu z drugiej kolumny macierzy B. Opisane obliczenia poniżej:

Podobnie postępujemy z wyróżnionym na niebiesko elementem macierzy C z trzeciego wiersza i trzeciej kolumny:

[edytuj] Przykład
[edytuj] Własności
Operacja mnożenia macierzy ma następujące własności (proszę zwrócić uwagę na wymagania dotyczące wymiarów macierzy, dla których mnożenie jest wykonalne):
- łączność:
dla macierzy
,
- rozdzielność względem dodawania:
- prawostronna:
dla macierzy
,
- lewostronna:
dla macierzy
.
- prawostronna:
Uwaga! Mnożenie macierzy najczęściej nie jest przemienne, nawet gdy oba mnożenia AB i BA są wykonalne.
[edytuj] Złożoność obliczeniowa
Naiwny algorytm mnożenia macierzy o wymiarach i
wymaga xyz mnożeń. Dla macierzy kwadratowych daje to algorytm klasy O(n3).
Istnieją wydajniejsze algorytmy rozwiązywania tego zadania. Pierwszy z takich algorytmów podał w 1969 r. Volker Strassen - złożoność tego algorytmu to około O(n2,807). Nie jest on jednak zwykle używany w praktyce z powodu braku stabilności numerycznej. Najlepszy obecnie znany algorytm mnożenia macierzy, podany przez Dona Coppersmitha i Shmuela Winograda, ma złożoność rzędu ok. O(n2,376). Dolne oszacowanie złożoności mnożenia macierzy, wynikające z konieczności obliczenia n2 wartości, to Ω(n2).
Jeśli to możliwe, należy skorzystać z algorytmów wykorzystujących szczególne własności macierzy, np. mnożenie macierzy diagonalnych jest algorytmem klasy O(n).