Przeskocz do treści

Delta mi!

Schemat Falka

Przemysław Kiciak

o artykule ...

  • Publikacja w Delcie: luty 2014
  • Publikacja elektroniczna: 31-01-2014
  • Autor: Przemysław Kiciak
    Afiliacja: Wydział Matematyk, Informatyki i Mechaniki, Uniwersytet Warszawski

Wbrew często (i zazwyczaj bezmyślnie) powtarzanemu przysłowiu nie każdy obraz jest wart tysiąca słów. Ale niektóre są...

obrazek

Rys. 1

Rys. 1

Każdy student matematyki, informatyki lub politechniki na pierwszym roku poznaje wzór, który definiuje iloczyn macierzy: jeśli liczba kolumn macierzy math jest równa liczbie wierszy macierzy math  to ich iloczynem jest macierz math  której współczynniki to math  Takie mnożenie macierzy jest znane od XIX wieku. Dopiero wiek później został wynaleziony sposób jego zobrazowania, który dla mnie jest wart tysiąca słów, a nawet trochę więcej.

Schemat Falka, bo tak się ten wynalazek nazywa, składa się z tabelek ze współczynnikami macierzy, rozmieszczonych jak na rysunku 1 Łatwo jest na nim odnaleźć współczynniki macierzy math (na lewo) i  math (powyżej), które mają wpływ na współczynnik math iloczynu. Wszystkie znane własności mnożenia macierzy mają, oczywiście, dowody rachunkowe. Schemat Falka pozwala zobaczyć wiele z tych własności, a to jest w pewnym sensie coś więcej niż dowód.

obrazek

Rys. 2

Rys. 2

Własność 1. Współczynniki nie muszą być liczbami, byleby można je było jakoś mnożyć, a iloczyny jakoś dodawać; w tym sensie definicja iloczynu macierzy jest uniwersalna. Na przykład (Rys. 2) współczynnikami mogą być macierze (zwane blokami), jeśli tylko „pasują”, tj. dla każdego math wszystkie bloki math  mają tyle samo wierszy, dla każdego math wszystkie bloki math mają tyle samo kolumn, i dla każdego math każdy blok math  ma tyle samo kolumn, ile bloki math  mają wierszy. Jeśli bloki są macierzami liczbowymi, to mamy stąd ogólniejszy zapis mnożenia macierzy liczbowych. Można też rozpatrywać bloki puste, tj. mające 0 wierszy lub kolumn, co czasami jest wygodne.

obrazek

Rys. 3

Rys. 3

Własność 2. O macierzy math  mówi się, że jest trójkątna górna, jeśli wszystkie jej współczynniki math takie że math są równe math Mnożenie macierzy ma tę własność, że jeśli obie macierze math i  math  są trójkątne górne, to ich iloczyn też jest taki. Spójrzmy na rysunek 3: po odnalezieniu współczynników w  math-tym wierszu macierzy math  i  math -tej kolumnie macierzy math  zauważamy, że jeśli math to w każdym iloczynie math co najmniej jeden czynnik jest zerem, a stąd math Analogiczna własność dotyczy macierzy trójkątnych dolnych (takich że math dla math), co proponuję Czytelnikom narysować własnoręcznie.

obrazek

Rys. 4

Rys. 4

Własność 3. Transpozycja przyporządkowuje dowolnej macierzy math o współczynnikach math  macierz math  o współczynnikach math; inaczej mówiąc, przekształcenie to zamienia wiersze z kolumnami. Jeśli macierze math  i  math  można pomnożyć (i mnożenie współczynników jest przemienne), to math  Ze schematu Falka to wynika natychmiast po narysowaniu jego odbicia symetrycznego względem ukośnej linii (tzw. diagonali macierzy math ), porównaj rysunki 1 i 4. Mnożenie macierzy (bloków) nie jest przemienne, dlatego dokonując transpozycji iloczynu macierzy zbudowanych z bloków, tj. „odbijając” schemat Falka, musimy „odbić”, czyli transponować każdy blok macierzy math i  math  i ich iloczynu. Ale to po obejrzeniu rysunków jest oczywiste.

Własności 4 i 5. Macierz math  jest diagonalna, jeśli wszystkie współczynniki oprócz math ma zerowe. Macierz permutacji jest to macierz kwadratowa, która w każdym wierszu i w każdej kolumnie ma jeden współczynnik równy math i pozostałe współczynniki math Wiersz math-ty macierzy math  gdzie macierz math  jest diagonalna, jest iloczynem współczynnika math i  math-tego wiersza macierzy math Jeśli zaś math jest macierzą permutacji, to iloczyn math  powstaje przez poprzestawianie wierszy macierzy math Narysowanie schematów (najlepiej z użyciem bloków) i doprecyzowanie szczegółów polecam dla relaksu. A co będzie, jeśli to drugi (tj. prawy) czynnik jest macierzą diagonalną lub permutacji?

obrazek

Rys. 5

Rys. 5

Własność 6. Łączności mnożenia macierzy tak całkiem bez rachunków pokazać się nie da, ale zobaczmy schematy na rysunku 5 Jest jasne, że wymiary macierzy math  i  math  są identyczne. Jeśli w miejsce math podstawimy blok math -ty wiersz macierzy math  i zastąpimy math  przez math-tą kolumnę, math  to w obu przypadkach dostaniemy współczynnik na przecięciu math-tego wiersza i  math-tej kolumny odpowiedniego iloczynu wszystkich trzech macierzy. Wyróżnimy w macierzach bloki

display-math

Podstawiając tak podzielone macierze do pierwszego schematu, dostaniemy

display-math

a z drugiego schematu otrzymamy

display-math

Jeśli mnożenie mniejszych bloków jest łączne i rozdzielne względem dodawania, a dodawanie jest przemienne, to oba te wyrażenia mają tę samą wartość. Ale to umożliwia przeprowadzenie dowodu indukcyjnego, zaczynając od bloków pustych i bloków math tj. zbudowanych z pojedynczych współczynników.

Schemat Falka z blokowym przedstawieniem macierzy został wykorzystany do zilustrowania bardzo pięknego, równoległego algorytmu mnożenia dużych macierzy przy użyciu karty graficznej w architekturze CUDA; zachęcam do zapoznania się z nim w dokumentacji firmy NVIDIA. Tu zaś wykorzystamy schemat Falka do przedstawienia idei szybkiego (sekwencyjnego) algorytmu mnożenia wielkich macierzy rzadkich, czyli takich, których większość współczynników (np. ponad math) to zera. Iloczyn macierzy rzadkich zwykle też jest macierzą rzadką, a przy tym każdy (lub prawie każdy) jego niezerowy współczynnik jest sumą niewielu niezerowych składników. Dopuszczamy zupełnie dowolne rozmieszczenie niezerowych współczynników w macierzach math  i  math  Chcielibyśmy, aby algorytm mnożył i dodawał tylko liczby różne od zera.

obrazek

Rys. 6

Rys. 6

Zobaczmy schemat na rysunku 6 W pokazanym przykładzie math-ty wiersz macierzy math  zawiera tylko trzy niezerowe współczynniki. Aby obliczyć math-ty wiersz iloczynu, trzeba pomnożyć przez nie odpowiednie trzy wiersze macierzy math i dodać. Oczywiście, wystarczy odnaleźć i pomnożyć tylko niezerowe współczynniki macierzy math w tych wierszach.

Obie macierze i ich iloczyn będziemy reprezentować za pomocą wykazów niezerowych współczynników. Wykaz jest tablicą, której każdy element zawiera indeksy wiersza i kolumny oraz niezerowy współczynnik na ich przecięciu.

Porządkiem wierszowym wykazu współczynników macierzy nazwiemy taką kolejność jego elementów, że elementy reprezentujące niezerowe współczynniki z każdego kolejnego wiersza są obok siebie (a w obrębie wiersza elementy są uporządkowane dowolnie). W pierwszym kroku algorytmu należy (np. za pomocą sortowania) uporządkować w ten sposób wykazy obu macierzy, math  i  math  Następnie tworzymy dwie tablice pomocnicze, których długości są o  math większe od liczb wierszy tych macierzy. Kolejne elementy tablicy pomocniczej są indeksami uporządkowanego wykazu, umożliwiającymi szybki dostęp do elementów reprezentujących współczynniki każdego wiersza (liczba niezerowych współczynników w wierszu jest różnicą dwóch kolejnych indeksów w pomocniczej tablicy, jej ostatni element razem z przedostatnim umożliwia obliczenie liczby tych współczynników w ostatnim wierszu).

obrazek

Aby obliczyć iloczyn math  przeglądamy kolejne wiersze macierzy math Dla współczynnika math  znajdujemy elementy reprezentujące niezerowe współczynniki w  math-tym wierszu macierzy math Dla każdego takiego elementu, w dodatkowej tablicy, zapamiętujemy trójkę liczb: indeks elementu reprezentującego współczynnik math w wykazie math indeks elementu reprezentującego współczynnik math  w wykazie math i indeks math odpowiedniej kolumny macierzy math (czyli także iloczynu). Mając wszystkie takie trójki dla math-tego wiersza macierzy math (i iloczynu), sortujemy ich ciąg względem indeksów kolumn math Po tym posortowaniu łatwo jest odnaleźć odpowiednie współczynniki macierzy math  i  math  i wykonać działania na nich, ponieważ iloczyny, których sumę trzeba obliczyć, są reprezentowane przez trójki znajdujące się obok siebie. W ten sposób otrzymamy niezerowe współczynniki w  math-tym wierszu macierzy math a ściślej te współczynniki, które są sumami niezerowych składników.

Koszt tego algorytmu w istotny sposób zależy od użytego algorytmu sortowania, ale są znane bardzo szybkie algorytmy sortowania, których użycie sprawia, że obliczenia pomocnicze zabierają tylko kilka razy więcej czasu niż same działania na współczynnikach. Można też opracować podobny algorytm, korzystający z kolumnowego uporządkowania wykazów.

Rysunkowe przedstawienie mnożenia macierzy wymyślił w latach 50. dwudziestego wieku Sigurd Falk, profesor politechniki w Brunszwiku. Opisane wyżej przykłady nie wyczerpują zastosowań tego wynalazku, ale mam nadzieję, że uzasadniają jego wartość, przy użyciu kilku obrazków i w przybliżeniu 1100 słów.