Revisão Álgebra Linear (básico e visual)

Bem vindo à revisão de álgebra linear. Aqui irei mostrar o básico de álgebra linear, tentando . Esse tutorial foi feito visando os fundamentos para os tutoriais de WebGL, mas podem ser usados em qualquer outra aplicação.

Vetores

Um vetor é uma tupla \([x_1,x_2, ...,x_n]\), com \(x_i \in R^n, 1 \le i \le n\). É uma entidade geométrica com magnitude, direção e sentido. Ela pertence a um conjunto denominado espaço vetorial. Nesse conjunto, se dois vetores tiverem a mesma magnitude, direção e sentido, então elas são iguais. Um vetor não tem posição definida, então não faz sentido transladar um vetor (ela pode estar em qualquer lugar). O valor de \(n\) é a dimensão do vetor. Um vetor como

\[\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}\]

é um vetor coluna. Um vetor \([1,2,3]\) é um vetor linha. A transposta de um vetor coluna é um vetor linha. Para economizar espaço, poderemos tratar um vetor coluna como \([1,2,3]^T\). Outra notação é tratar um vetor \(\vec{a}\) como \([a_1,a_2,a_3,a_4]\) ou \([a_x,a_y,a_z,a_w]\).

Um ponto também é uma tupla \((x_1,x_2, ...,x_n)\), com \(x_i \in R^n, 1 \le i \le n\). Veja que estamos usando a notação \(()\) para ponto e \([]\) para vetor, mas isso pode mudar nos livros-texto. Geralmente um ponto representa uma posição, ao invés de um deslocamento.

Mas um vetor não é a mesma coisa que um ponto? Em termos numéricos, sim, mas em termos semânticos, não. Veja algumas diferenças:

ponto vetor
representa uma posição representa um deslocamento
não tem direção tem direção
não tem sentido tem sentido
não tem magnitude tem magnitude
tem posição não tem uma posição específica

Quando quiseres especificar uma posição, por exemplo um lugar A com latitude=-23 e longitude=-46, especificas um ponto (-23, -46). Quando quiseres especificar um deslocamento, por exemplo entre A(-23, -46) e B(50, 20) precisas caminhar 73 unidades no eixo X e 66 unidades no eixo Y, resultando em [73,66], que é diferente de um ponto C na posição (73,66).

Geometricamente podemos associar pontos e vetores:

Matematicamente podemos associar pontos e vetores dessa forma:

  • \(A - B = \vec{v}\)
  • \(A + \vec{v} = B\)
  • \(\vec{v} + \vec{w} = \vec{z}\)

Vetor zero

A identidade da operação de adição entre vetores é o vetor zero: \([0,0,\dots,0]^T\). Se fixares a magnitude de um vetor, todos os vetores distintos formam um círculo de vetores. Porém o vetor zero não tem direção, ou seguindo a definição, tem todas as direções. Não pense no vetor zero como um ponto, pense como "sem deslocamento".

Negar um vetor

\(-\vec{a}= -[a_1,a_2,\dots,a_n]^T = [-a_1,-a_2,\dots,-a_n]^T\)

Geometricamente invertes o sentido do vetor:

Magnitude

A magnitude, também conhecido como norma, comprimento ou intensidade, não está explícito no vetor. O vetor \([3,4]^T\) tem magnitude nem 3 nem 4, mas 5. Veja como calculá-lo:

\(\|v\| = \sqrt{v_1^2 + v_2^2 + ... + v_{n-1}^2 + v_n^2}\)

\(\|v\| = \sqrt{\sum^{n}_{i=1}{v_i^2}}\)

Geometricamente, usando pitágoras:

\(v_x\) e \(v_y\) podem ser valores negativos, todavia \(\|v\|\) não é. Já que \(|x|^2 = x^2\) então as equações seguintes são equivalentes:

  • \(\|v\|^2 = |v_1|^2 + |v_2|^2\)
  • \(\|v\|^2 = v_1^2 + v_2^2\)

Multiplicação por um escalar

\[ k \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} = \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} k = \begin{bmatrix} kv_1 \\ kv_2 \\ \vdots \\ kv_n \end{bmatrix} \]

Dividir por k é igual a multiplicar por \(\frac{1}{k}\). Algumas observações:

  • Geralmente multiplicação entre escalar e vetor não tem símbolo de multiplicação;
  • multiplicação entre escalar e vetor ocorre antes de adição: \(3\vec{a} + \vec{b}\) é o mesmo que \((3\vec{a})+\vec{b}\), mas diferente de \(3(\vec{a}+\vec{b})\);
  • Um escalar não pode ser dividido por um vetor, e um vetor não pode ser dividido por outro vetor;
  • Negação de vetor pode ser visto como multiplicação pela escalar -1.

Geometricamente, a multiplicação de um vetor por uma escalar estica ou encolhe o vetor, mantendo seu sentido e direção, mas mudando sua magnitude proporcionalmente à escalar:

Normalização

Multas vezes só queres saber o sentido do vetor, sem se importar com a magnitude:

  • Para onde o vento está orientado nesse ponto?
  • Para onde esse fóton está indo?
  • Essa cidade fica ao norte ou ao leste daqui?
  • Na sinuca, em que direção o taco deve se orientar para acertar a bola?

Podemos representar estas situações com um vetor unitário (sua magnitude é igual a 1), também chamado de versor ou normal. Podemos obter um versor de um vetor dividindo-o pela sua magnitude:

\(\vec{v}_{norm} = \frac{\vec{v}}{\|v\|}\)

Por causa do denominador, não podemos obter o versor do vetor zero.

Geometricamente:

Adição e Subtração de vetores

Na adição, \(\vec{a} + \vec{b} = \vec{b} + \vec{a}\):

\[ \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} + \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix} = \begin{bmatrix} a_1 + b_1 \\ a_2 + b_2 \\ \vdots \\ a_n + b_n \end{bmatrix} \]

Na subtração, \(\vec{a} - \vec{b} = - (\vec{b} - \vec{a})\):

\[ \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} - \begin{bmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{bmatrix} = \begin{bmatrix} a_1 - b_1 \\ a_2 - b_2 \\ \vdots \\ a_n - b_n \end{bmatrix} \]

Geometricamente:

Uma forma de ver estas operações:

  • Adição: se eu caminhar por uma sequência de lugares, qual o deslocamento do primeiro lugar para o último?
  • Subtração: se eu sair daqui para um dos dois outros lugares, qual é o deslocamento entre estes destinos? É longe um do outro?

Perceba que eu posso representar um vetor como uma sequência de deslocamentos (uma adição) de versores:

\[ \begin{bmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{bmatrix} = a_1\begin{bmatrix} 1 \\ 0 \\ \vdots \\ 0 \end{bmatrix} + a_2\begin{bmatrix} 0 \\ 1 \\ \vdots \\ 0 \end{bmatrix} + \dots + a_n\begin{bmatrix} 0 \\ 0 \\ \vdots \\ 1 \end{bmatrix} \]

Distância entre pontos

Dados dois pontos A e B, podes obter um vetor \(v = A-B = [a_1 - b_1,a_2-b_2,\dots,a_n-b_n]^T\). A distância entre A e B é a magnitude \(\|v\| = \sqrt{(a_1-b_1)^2+(a_2-b_2)^2+\dots+(a_n-b_n)^2}\)

Produto Escalar

Vimos como multiplicar um vetor por um produto escalar. Podemos multiplicar um vetor por um outro vetor. Com o tempo, perceberam que certas formas de multiplicação entre vetores tornaram-se úteis no dia-a-dia.

O produto escalar (ou produto interno) tem esse nome pois o resultado é uma escalar. Dado dois vetores \(\vec{a}\) e \(\vec{b}\), o produto escalar \(\vec{a}\cdot\vec{b} = a_1b_1 + a_2b_2 + \dots + a_nb_n\). Simplesmente é a multiplicação elemento a elemento. Qual a utilidade disso. Fica mais fácil vendo geometricamente a consequência dessa operação:

O produto escalar retorna o quão similar é um vetor do outro. Se eles forem perpendiculares, o valor do produto escalar é 0. Outra fórmula para o produto escalar é:

\(\vec{a}\cdot\vec{b} = \|\vec{a}\|\|\vec{b}\|cos(\theta)\)

Produto escalar entre versores é mais simples (dado versores \(\vec{a}\) e \(\vec{b}\):

\(\vec{a}\cdot\vec{b} = cos(\theta)\)

Projetando um vetor no outro

Digamos que tenhas modelado um coqueiro inclinado e o sol esteja exatamente acima, e queiras projetar sua sombra. Representando estas elementos como vetores:

Precisamos decompor \(\vec{v}\) em dois vetores: \(\vec{v}_\parallel\) (paralelo a \(\vec{w}\)) e \(\vec{v}_\perp\) (perpendicular a \(\vec{w}\)), de forma que \(\vec{v}_\parallel + \vec{v}_\perp = \vec{v}\). Usando os conceitos trigonométricos aprendidos na escola primária e secundária, sabemos que

\[\|\vec{v}_\parallel\| = \|\vec{v}\|cos(\theta)\].

Mas neste tutorial aprendemos que

\[\vec{v}\cdot\vec{w} = \|\vec{v}\|\|\vec{w}\|cos(\theta)\]

\[\|\vec{v}\|cos(\theta) = \frac{\vec{v}\cdot\vec{w}}{\|\vec{w}\|}\]

Assim podemos fazer a relação entre \(\vec{v}\) e \(\|\vec{v}_\parallel\|\) sem precisar do ângulo:

\[\|\vec{v}_\parallel\| = \frac{\vec{v}\cdot\vec{w}}{\|\vec{w}\|}\]

Ou seja, já temos a magnitude de \(\vec{v}_\parallel\). E se eu quiser de fato o \(\vec{v}_\parallel\)? Podemos criar um versor de \(\vec{w}\) e multiplicá-lo pela magnitude de \(\vec{v}_\parallel\):

\[\vec{v}_\parallel = \frac{\vec{w}}{\|\vec{w}\|}\|\vec{v}_\parallel\|\]

\[\vec{v}_\parallel = \vec{w}\frac{\vec{v}\cdot\vec{w}}{\|\vec{w}\|^2}\]

Se w já for um versor, a divisão é desnecessária. Para obter \(\vec{v}_\perp\) basta subtrair \(\vec{v}_\parallel\) de \(\vec{v}\). Essa projeção e decomposição de vetores serão bastante usadas não só para sombras, mas para computar tambeḿ a iluminação dos objetos de acordo com o sentido dos raios solares.

Antes de terminar esta seção, uma observação: podemos representar o produto escalar como uma multiplicação entre vetores. Dado os vetores coluna \(\vec{v}\) e \(\vec{w}\), então o produto escalar é:

\[\vec{v}\cdot\vec{w} = \vec{v}^T\vec{w}\]

Isso é importante quando formos trabalhar com multiplicação de matrizes.

Produto Vetorial

Existe uma outra operação que se mostrou bastante útil no mundo 3D. Esta operação resolve o seguinte problema: "Como posso achar um vetor que seja perpendicular a dois outros vetores?". O produto vetorial tem como resultado um vetor (daí o nome). A expressão para o produto vetorial é:

\[ \begin{bmatrix} x_1 \\ y_1 \\ z_1 \end{bmatrix} \times \begin{bmatrix} x_2 \\ y_2 \\ z_2 \end{bmatrix} = \begin{bmatrix} y_1z_2 - y_2z_1 \\ x_1z_2 - z_1x_2 \\ x_1y_2-y_1x_2 \end{bmatrix} \]

Parece confuso e aleatório? Vou dar uma dica para visualizar o padrão nessa multiplicação: para achar o primeiro valor do vetor resultante, remova a primeira linha dos dois vetores, junte os outros 4 números e calcule o determinante. Para o segundo ou terceiro valores, remova a segunda ou terceira linha e repita o processo. Daí podes lembrar: Isso se parece com determinante usando expansão em cofatores. Mas é isso mesmo, há uma forma de calcular esse produto vetorial usando apenas uma determinante. Se eu representar o vetor \([x,y,z]^T\) como \(x\vec{i}+y\vec{j}+z\vec{k}\), onde \(\vec{i} = [1,0,0]^T\), \(\vec{j} = [0,1,0]^T\) e \(\vec{k} = [0,0,1]^T\), então o produto vetorial pode ser representado como:

\[ \vec{v}\times\vec{w} = \begin{bmatrix} \vec{i} & \vec{j} & \vec{k} \\ v_1 & v_2 & v_3 \\ w_1 & w_2 & w_3 \end{bmatrix} \]

O cálculo é o mesmo. Mas ainda há um problema:

  • Que eu saiba, com dois vetores distintos, há outros dois vetores que são perpendiculares a eles. Qual deles é o resultado do produto vetorial?

Não conseguiu enxergar esses dois vetores? Vou mostrar:

Lembras que a orientação na regra da mão direita é antihorária? E lembras da ordem polegar\(\rightarrow\)outros dedos\(\rightarrow\)palma da mão? Faça exatamente isso no produto vetorial:

  • \(\vec{v}\times\vec{w}\): Polegar no v e os outros dedos no w. O vetor resultante do produto vetorial está saindo da palma da mão.

Mas quem é o outro vetor? Faça a mesma regra:

  • \(\vec{w}\times\vec{v}\): Polegar no w e os outros dedos no v. O vetor resultante do produto vetorial está saindo da palma da mão.

Veja que um é o negativo do outro, ou seja:

\(\vec{v}\times\vec{w}\) = - \(\vec{w}\times\vec{v}\).

Essa é uma propriedade interessante. Outra propriedade interessante é com respeito à sua magnitude, pois ela é igual à área do paralelogramo formado pelos vetores \(\vec{v}\) e \(\vec{w}\):

\[ \begin{split} Area_{paralelogramo} & = bh \\ & = \|\vec{v}\|h \\ & = \|\vec{v}\|\|\vec{w}\|sen(\theta) \\ & = \|\vec{v}\times\vec{w}\| \end{split} \]