Cos'è una matrice?
Una matrice con m
colonne e n
righe rappresenta una funzione che consuma un vettore * con m
elementi (o coordinate) e produce un vettore con n
elementi.
Da ciò si può osservare che se e solo se una matrice è quadrata, la dimensionalità del vettore non cambierà. Per esempio. si ottiene un vettore 3D dalla trasformazione di un vettore 3D, un 2D da un 2D, ecc.
* : In fisica, i vettori sono generalmente usati per indicare forze o altre "influenze" che "si muovono" in cose come la velocità o l'accelerazione. Ma non c'è nulla che ti impedisca di utilizzare un vettore per rappresentare un punto o un qualsiasi array arbitrario di numeri (alcune librerie e linguaggi di programmazione usano persino "vector" per indicare "array 1D"). Per l'uso con le matrici, qualsiasi cosa può essere gli elementi del tuo vettore (anche stringhe o colori), purché tu abbia un modo di aggiungerli, sottrarli e moltiplicarli per qualunque sia la tua matrice. Da qui il nome del vettore , che significa "vettore" - porta o contiene valori per te.
Cosa significa moltiplicare per una matrice?
Quindi se una matrice è una funzione, che tipo di funzione ? Cosa fa la funzione? La ricetta per questo è definita dagli elementi della matrice. Chiamiamo input u
, output v
, la matrice M
(la moltiplicazione M*u=v
è quindi la stessa di f(u)=v
) e u(i)
diamo il i
th elemento di u
(il 2o elemento è coordinata y, per esempio). Per la matrice, M(i,j)
significa riga i
, colonna j
.
La costruzione dell'elemento v(1)
, la prima nel risultato, è descritta dalla prima riga della matrice. u(1)
volte M(1,1)
, più u(2)
volte M(1,2)
, ... più u(i)
volte M(1,i)
. Una matrice è un po 'come un linguaggio di programmazione molto semplice, che è utile solo per le funzioni di programmazione che si muovono mescolando attorno agli input, aggiungendoli a se stessi, ecc. **
È utile immaginare che stai lavorando su un elemento di output alla volta, quindi stai utilizzando solo una riga della matrice alla volta. Scrivi in u
orizzontale. Scrivi la riga con M
sotto di essa. Moltiplichi ogni coppia sopra / sotto e scrivi i prodotti di seguito, quindi aggiungi i prodotti. Ripetere l'operazione per ogni riga per ottenere ogni elemento di v
. (Ora si vede il motivo per cui una m
da n
matrice deve operare su un m
vettore e produrre un n
vettore.)
Un altro modo di pensare a questo - diciamo che stiamo facendo una trasformazione da 3D a 3D, quindi una matrice 3x3 (o trasformazione 3D come vengono spesso chiamate perché si può far finta che questa "funzione" sia "spostare" punti 3D, anche se in realtà è cambiando solo i numeri). Diciamo che la prima fila è [1 2 0]
. Ciò significa che per ottenere x di risultato, ottenere 1 di input x, 2 di input y e 0 di input z. Quindi è davvero una ricetta.
** : Se una matrice è un linguaggio di programmazione, non è nemmeno completo Turing.
Cosa significa moltiplicare due matrici?
Se sono entrambi matrici di dimensioni adeguate, quindi A*B
significa "una funzione che applica prima B
poi A
". Puoi vedere perché esistono i vincoli sulle dimensioni per la moltiplicazione, perché size determina le dimensioni di input e output e una matrice consuma l'output dell'altra. Perché la moltiplicazione significa combinare le funzioni? È più facile notare che deve essere. If A*u
è lo stesso di f(u)
ed B*u
è lo stesso di g(u)
allora f(g(u))
è lo stesso di quello f(B*u)
che è lo stesso di A*(B*u)
.
Allo stesso modo, applicazioni ripetute della stessa funzione possono essere mostrate come potenze, poiché A*A*A
significa applicare la funzione che A
rappresenta tre volte.
Come sono utili le matrici?
A che serve fare una trasformazione new_x = 1*x+2*y+0*z
(se la prima riga è [1 2 0])? Questo non è molto ovvio, ma prendiamo un'altra matrice 2D per spiegarlo. La matrice è:
[ 0 1
1 0 ]
O [0 1; 1 0]
usando la comoda notazione Matlab. Cosa fa questa matrice? Trasforma un vettore 2D in questo modo: Per la x del risultato, prendi 1 della y dell'input. Per la y del risultato, prendi 1 della x dell'input. Abbiamo appena scambiato le coordinate xey dell'input: questa matrice riflette i punti sulla linea x = y. È utile! Per estensione, vedrai che tutte le matrici con 1 lungo la linea SW - NE riflettono. Puoi anche capire perché le matrici di identità ti restituiscono l'input (per x di output, prendi x di input; per y di output, prendi y di input ...).
Ora vedi perché i simboli sono ad es. Xx
, Yx
- significano quanto di ingresso X
, Y
ecc va in uscita x
.
In quale altro modo le matrici sono utili?
Quale altra trasformazione puoi fare? Puoi ridimensionare prendendo una matrice identità, ma con un numero diverso da 1 lungo la diagonale. Ad esempio, [2.5 0; 0 22.5]
moltiplicherai ogni coordinata dell'input per 2,5 e se applichi questa matrice a ogni punto di un'immagine, l'immagine sarà 2,5 grande. Se inserisci solo 2,5 in una riga ( [2.5 0; 0 1]
), verrà moltiplicata solo la coordinata x, quindi allungherai solo lungo x.
Altre matrici possono fornire altre trasformazioni, come "inclinazione", che hanno vari gradi di utilità. Personalmente, il disallineamento è il mio meno preferito perché la matrice sembra così semplice ma la trasformazione stessa raramente fa nulla tranne che manipolare un'immagine. Una utile è la "rotazione": come si fa a ruotare un punto? Prova a calcolare la posizione del punto (x, y)
dopo aver ruotato di theta
gradi in senso antiorario rispetto all'origine. Scoprirai che le nuove coordinate xey escono entrambe moltiplicando le vecchie xey per alcuni seni e coseni di theta. Dovresti essere in grado di scrivere facilmente una matrice di rotazione usando seni e coseni che corrispondono a questa funzione.
Con matrici non quadrate, è anche possibile modificare la dimensionalità di un input. Trasformare un input 2D in 3D non è molto utile, poiché è difficile "fabbricare" qualcosa da inserire nella nuova coordinata, ma 3D in 2D è molto utile. Tra le altre cose, questo è il modo in cui il tuo computer sa proiettare *** una scena 3D in un'immagine 2D per disegnare sul tuo monitor.
Dato che i vettori possono contenere cose diverse, potresti persino descrivere una matrice che crittografa una stringa n-caratteri alla volta, mescolandoli o "moltiplicandoli" (dovresti trovare una funzione di moltiplicazione / addizione).
*** : Quando progetti , prendi un oggetto 3D come una scultura, accendi una luce su di esso e vedi che tipo di ombra 2D scende su un muro.
Quali sono i limiti delle matrici?
Puoi svolgere ogni funzione con le matrici? No. Pensando graficamente, è difficile immaginare qualcosa che una matrice non potrebbe fare (ma esiste: un effetto "vortice" non può essere fatto, per esempio). Tuttavia, ecco un semplice esempio: diciamo che la funzione f
è tale che f(u)
ti restituisce u
ogni elemento al quadrato . Vedrai che non puoi scrivere una matrice per questo: con le matrici c'è solo la possibilità di descrivere ricette che moltiplicano le coordinate per un numero costante, non è possibile esprimere altre funzioni fantasiose come il potere.
**** : Questo è anche il motivo per cui si chiama algebra lineare - la funzione di potenza non è lineare , non traccia una linea retta quando viene tracciata.
Sulla strana riga aggiuntiva in matrici 4D
Ora, perché la matrice nel tuo esempio 4 per 4? Questo non significa spazio a 4 dimensioni? Non abbiamo computer 4D, quindi perché? Questo è in realtà un trucco interessante con matrici che si riferisce al punto precedente sulle operazioni lineari.
Per quanto riguarda quali funzioni non possono essere eseguite con le matrici: qual è la matrice per spostare un punto 2D di 2 unità a destra (che produce il punto (x+2, y)
? Ancora una volta, restiamo bloccati. C'è un modo per moltiplicare l'input, ma non c'è modo di aggiungere una costante. Per il lavoro in 2D, il trucco è far finta di non essere nello spazio 2D, ma nello spazio 3D, tranne che l'altezza (coordinata z o terzo elemento) di tutto è sempre 1 (è un po 'come è un universo 2D solo una "piastra" che giace piatta sul pavimento di un universo 3D - in quel caso la terza coordinata è sempre 0). Quindi puoi usare quest'ultima magica coordinata come costante, perché sai che è sempre 1 per ogni input.
Allo stesso modo, per spostare i punti 3D, sono necessarie coordinate 4D. Questo è anche il motivo per cui tutte le matrici di trasformazione 3D che vedrai avranno [0 0 0 1]
come ultima riga: non devi mai modificare la quarta dimensione o il risultato sarà troppo complicato per essere rappresentato in 3D!