Co to jest matryca?
Macierz z m
kolumnami i n
wierszami reprezentuje funkcję, która zużywa wektor * z m
elementami (lub współrzędnymi) i wytwarza wektor z n
elementami.
Z tego można zaobserwować, że jeśli tylko macierz jest kwadratowa, wymiar wektora nie ulegnie zmianie. Na przykład. otrzymujesz wektor 3D z transformacji wektora 3D, 2D z 2D itp.
* : W fizyce wektory są zwykle używane do wskazywania sił lub innych „wpływów”, które „poruszają się” wokół rzeczy, takich jak prędkość lub przyspieszenie. Ale nic nie stoi na przeszkodzie, abyś użył wektora do reprezentowania punktu lub dowolnej dowolnej tablicy liczb (niektóre biblioteki i języki programowania używają nawet „wektora”, co oznacza „tablicę 1D”). Do użytku z macierzami wszystko może być elementami wektora (nawet łańcuchy lub kolory), o ile istnieje możliwość dodawania, odejmowania i mnożenia ich przez dowolne elementy macierzy. Stąd wektor nazw , który oznacza „nośnik” - przenosi lub przechowuje wartości dla Ciebie.
Co oznacza mnożenie przez macierz?
Więc jeśli macierz jest funkcją, jaki rodzaj funkcji ? Do czego służy ta funkcja? Przepis na to określają elementy macierzy. Nazwijmy dane wejściowe u
, wyjściowe v
, macierz M
(mnożenie M*u=v
jest wtedy takie samo jak f(u)=v
) i u(i)
daje i
element th u
(na przykład drugi element to współrzędna y). Dla matrycy M(i,j)
oznacza wiersz i
, kolumnę j
.
Konstrukcja elementu v(1)
, pierwsza w wyniku, opisana jest przez pierwszy rząd macierzy. u(1)
razy M(1,1)
plus u(2)
razy M(1,2)
... plus u(i)
razy M(1,i)
. Matryca jest trochę jak bardzo prosty język programowania, który nadaje się tylko do programowania funkcji, które działają poprzez tasowanie danych wejściowych, dodawanie ich do siebie itp. **
Warto sobie wyobrazić, że pracujesz nad jednym elementem wyniku naraz, dlatego używasz tylko jednego wiersza macierzy na raz. Piszesz u
poziomo. Piszesz i-ty rząd M
pod nim. Mnożycie każdą parę powyżej / poniżej i piszesz poniższe produkty, a następnie sumujesz produkty. Powtórz dla każdego wiersza, aby uzyskać każdy element v
. (Teraz widzicie, dlaczego m
przez n
macierz musi działać na m
wektorze i wytwarzają n
wektor).
Inny sposób myślenia o tym - powiedzmy, że wykonujemy transformację 3D na 3D, więc macierz 3x3 (lub transformacja 3D, jak się często nazywa, ponieważ można udawać, że ta „funkcja” przesuwa punkty 3D, chociaż tak naprawdę jest po prostu zmieniam liczby). Powiedzmy, że pierwszy rząd to [1 2 0]
. Oznacza to, że aby uzyskać x wyniku, 1 wejścia x, 2 wejścia y i 0 wejścia z. To naprawdę przepis.
** : Jeśli matryca jest językiem programowania, oznacza to, że nawet Turing nie jest kompletny.
Co oznacza pomnożenie dwóch macierzy?
Jeżeli obie są matryce o odpowiedniej wielkości, to A*B
znaczy „stosuje się funkcję, która najpierw B
następnie A
”. Możesz zobaczyć, dlaczego istnieją ograniczenia dotyczące rozmnażania, ponieważ rozmiar określa rozmiar danych wejściowych i wyjściowych, a jedna matryca zużywa dane wyjściowe drugiej. Dlaczego mnożenie oznacza łączenie funkcji? Łatwiej zauważyć, że tak musi być. Jeśli A*u
jest taki sam jak f(u)
i B*u
jest taki sam, jak g(u)
wtedy f(g(u))
jest taki sam jak f(B*u)
który jest taki sam jak A*(B*u)
.
Podobnie, wielokrotne zastosowania tej samej funkcji mogą być pokazane jako potęgi, ponieważ A*A*A
oznaczają zastosowanie funkcji, która A
reprezentuje trzykrotnie.
Jak przydatne są macierze?
Co dobrego robi transformacja new_x = 1*x+2*y+0*z
(jeśli pierwszy wiersz to [1 2 0])? To nie jest bardzo oczywiste, ale weźmy kolejną matrycę 2D, aby to wyjaśnić. Matryca to:
[ 0 1
1 0 ]
Lub [0 1; 1 0]
używając wygodnej notacji Matlab. Co robi ta matryca? Przekształca wektor 2D w taki sposób: dla x wyniku weź 1 y wartości wejściowej. Dla y wyniku weź 1 x wartości wejściowej. Właśnie zamieniliśmy współrzędne xiy wejścia - ta macierz odzwierciedla punkty wokół linii x = y. To trochę przydatne! Po rozszerzeniu zobaczysz, że wszystkie macierze z 1s wzdłuż linii SW - NE odzwierciedlają. Możesz także zobaczyć, dlaczego macierze tożsamości zwracają dane wejściowe (dla x wyjścia, weź x danych wejściowych; dla y wyniku, weź y danych wejściowych ...).
Teraz rozumiesz, dlaczego symbole są np. Xx
, Yx
- to znaczy ile wejściowych X
, Y
itp idzie do wyjścia x
.
W jaki inny sposób przydatne są macierze?
Jaką inną transformację możesz zrobić? Możesz zmienić rozmiar, biorąc matrycę tożsamości, ale z inną liczbą niż 1 wzdłuż przekątnej. Na przykład, [2.5 0; 0 22.5]
pomnoży każdą współrzędną wejścia przez 2,5, a jeśli zastosujesz tę macierz do każdego punktu na obrazie, obraz będzie miał 2,5 wielkości. Jeśli umieścisz tylko 2,5 w jednym rzędzie ( [2.5 0; 0 1]
), tylko współrzędna x zostanie pomnożona, więc rozciągniesz tylko wzdłuż x.
Inne matryce mogą dawać inne przekształcenia, takie jak „wypaczanie”, które mają różny stopień użyteczności. Osobiście pochylanie jest moim najmniej ulubionym, ponieważ matryca wygląda tak prosto, ale sama transformacja rzadko robi cokolwiek poza zaklęciem obrazu. Przydatnym jest „obrót” - jak obrócić punkt? Spróbuj obliczyć pozycję punktu (x, y)
po obróceniu o theta
stopień w kierunku przeciwnym do ruchu wskazówek zegara wokół początku. Przekonasz się, że nowe współrzędne xiy wynikają z pomnożenia starego xiy przez niektóre sinus i cosinus theta. Powinieneś być w stanie łatwo napisać macierz obrotu za pomocą sinusów i cosinusów, które odpowiadają tej funkcji.
Za pomocą macierzy innych niż kwadratowe można również zmienić wymiar wejściowy. Przekształcanie wejścia 2D w 3D nie jest zbyt przydatne, ponieważ trudno jest „wyprodukować” coś, co można by umieścić w nowej współrzędnej, ale 3D w 2D jest bardzo użyteczny. Między innymi w ten sposób twój komputer potrafi rzutować *** scenę 3D na obraz 2D, aby narysować go na monitorze.
Ponieważ wektory mogą zawierać różne rzeczy, możesz nawet opisać macierz, która szyfruje ciąg n-znaków naraz, tasując je lub „mnożąc” (musiałbyś wymyślić funkcję mnożenia / dodawania).
*** : Kiedy projektujesz , bierzesz obiekt 3D, taki jak rzeźba, świecisz na nim światło i widzisz, jaki cień 2D spada na ścianę.
Jakie są ograniczenia macierzy?
Czy możesz wykonać każdą funkcję za pomocą macierzy? Nie. Myśląc graficznie, trudno sobie wyobrazić coś, czego nie mogłaby zrobić matryca (ale istnieje: na przykład nie można zrobić efektu „zawirowania”). Oto prosty przykład: załóżmy, że funkcja f
jest taka, że f(u)
zwraca u
każdy kwadrat do kwadratu . Przekonasz się, że nie możesz napisać do tego macierzy: w przypadku macierzy istnieje tylko funkcja opisywania przepisów, które mnożą współrzędne przez stałą liczbę, nie można wyrazić innych wymyślnych funkcji, takich jak moc.
**** : Dlatego nazywa się to algebrą liniową - funkcja mocy jest nieliniowa , nie tworzy linii prostej podczas kreślenia.
W dziwnym dodatkowym rzędzie w matrycach 4D
Dlaczego macierz w twoim przykładzie 4 na 4? Czy to nie oznacza 4-wymiarowej przestrzeni? Nie mamy komputerów 4D, więc dlaczego? To właściwie interesująca sztuczka z matrycami, która odnosi się do poprzedniego punktu dotyczącego operacji liniowych.
Jeśli chodzi o funkcje, których nie można wykonać za pomocą macierzy: co to jest macierz służąca do przesuwania punktu 2D o 2 jednostki w prawo (co powoduje powstanie punktu (x+2, y)
? Ponownie utkniemy. Istnieje sposób na pomnożenie danych wejściowych, ale nie ma możliwości dodania w pracy 2D, sztuczka polega na udawaniu, że tak naprawdę nie jesteś w przestrzeni 2D, ale w przestrzeni 3D, z wyjątkiem tego, że wysokość (współrzędna Z lub 3. element) zawsze wynosi 1 (to trochę tak, jak we wszechświecie 2D po prostu „płyta” leżąca płasko na podłodze wszechświata 3D - w tym przypadku trzecia współrzędna ma zawsze wartość 0. Następnie możesz użyć tej magicznej ostatniej współrzędnej jako stałej, ponieważ wiesz, że zawsze jest to 1 dla każdego wejścia.
Podobnie do przemieszczania punktów 3D potrzebne są współrzędne 4D. Dlatego też wszystkie macierze transformacji 3D, które widzisz, będą miały [0 0 0 1]
jako ostatni wiersz - nigdy nie wolno zmieniać czwartego wymiaru, w przeciwnym razie wynik będzie zbyt skomplikowany, aby przedstawić go w 3D!