Matrizes
Uma tabela de números sobre a qual se sabe fazer contas — e que, por causa disso, move figuras no plano. Conceito de matriz, operações e casos de impossibilidade, e as transformações geométricas que estão por trás de tudo o que se anima num ecrã. Um dos três temas opcionais das Aprendizagens Essenciais. Teoria, laboratórios interativos e exercícios com resolução passo a passo.
Revisão · Vetores e o plano
As matrizes só se tornam interessantes quando começam a mexer em figuras, e isso é a secção 3. Para lá chegar é preciso ter à mão o que o 10.º e o 11.º já deram: coordenadas, vetores, e as transformações geométricas vistas antes de existir matriz nenhuma.
- Identificar matrizes e operações com matrizes em situações concretas — retomando as noções de vetor e de transformação geométrica do plano.
1 · Pontos, vetores e coordenadas
Num referencial ortonormado, um ponto fica determinado por duas coordenadas, e um vetor também. A diferença é o que cada um significa: o ponto é um sítio; o vetor é um deslocamento.
2 · Os dois vetores que geram tudo
Sejam
Guarda esta igualdade. Se uma transformação respeitar somas e múltiplos — e todas as da secção 3 respeitam —, então saber para onde vão
3 · Transformações, antes de haver matrizes
| Transformação | Efeito em | O que se conserva |
|---|---|---|
| Translação de | tudo: forma, tamanho e orientação | |
| Reflexão em | forma e tamanho; inverte a orientação | |
| Rotação de | forma e tamanho | |
| Homotetia de razão | a forma; a área fica |
Nenhuma destas precisa de matrizes para se descrever. O que as matrizes trazem é uma linguagem só para todas — e, com ela, a possibilidade de as compor multiplicando.
Uma transformação do plano leva
- Decompor o ponto:
(3,\,-1) = 3\,\vec{e_{1}} - 1\,\vec{e_{2}}. - Transportar para as imagens, que é o que «respeitar somas e múltiplos» autoriza:
3(2,\,1) - 1(0,\,3) = (6,\,3) - (0,\,3) = (6,\,0). - A imagem é
P'(6,\,0) .Duas imagens conhecidas chegaram para responder sobre um ponto qualquer. Na secção 3, essas duas imagens vão ser as colunas de uma matriz — e esta conta vai passar a chamar-se «multiplicar».
Um retângulo tem vértices
Determina a área da imagem e compara-a com a original.
- Os vértices da imagem, multiplicando as duas coordenadas por
3 :(0,0) ,(9,0) ,(9,6) ,(0,6) . - As áreas:
3 \times 2 = 6 antes;9 \times 6 = 54 depois. - A razão:
\dfrac{54}{6} = 9 = 3^{2} . - Numa homotetia de razão
k , os comprimentos multiplicam-se pork e as áreas pork^{2} .Vale a pena reter o expoente. No laboratório da secção 3, o número que aparece como «a área fica multiplicada por» é exatamente isto — e explica por que razão duplicar uma fotografia a quadruplica em papel.
Python Transformar um polígono, sem matrizes
def area(pol):
s = 0
for k in range(len(pol)):
x1, y1 = pol[k]
x2, y2 = pol[(k + 1) % len(pol)]
s += x1*y2 - x2*y1
return abs(s) / 2
quadrado = [(0, 0), (1, 0), (1, 1), (0, 1)]
transformacoes = {
'identidade': lambda x, y: (x, y),
'homotetia 3': lambda x, y: (3*x, 3*y),
'cisalhamento': lambda x, y: (x + y, y),
'reflexao Ox': lambda x, y: (x, -y),
}
for nome, t in transformacoes.items():
imagem = [t(x, y) for x, y in quadrado]
print('%-14s area = %.2f' % (nome, area(imagem)))
# A area de um poligono sai da formula do cadarco (shoelace), que so' usa
# as coordenadas dos vertices - serve para qualquer poligono simples.
def area(pol):
s = 0
for k in range(len(pol)):
x1, y1 = pol[k]
x2, y2 = pol[(k + 1) % len(pol)] # o % fecha o poligono
s += x1*y2 - x2*y1
return abs(s) / 2
quadrado = [(0, 0), (1, 0), (1, 1), (0, 1)] # area 1
transformacoes = {
'identidade': lambda x, y: (x, y), # nao mexe
'homotetia 3': lambda x, y: (3*x, 3*y), # area x 9
'cisalhamento': lambda x, y: (x + y, y), # area igual
'reflexao Ox': lambda x, y: (x, -y), # area igual
}
for nome, t in transformacoes.items():
imagem = [t(x, y) for x, y in quadrado]
print('%-14s area = %.2f' % (nome, area(imagem)))
A homotetia multiplica a área por lambda x, y: (2*x, y) e adivinha o resultado antes de correr.
Exercícios propostos
Doze exercícios de revisão. Os últimos quatro são a secção 3 disfarçada: fazem, sem matrizes, exatamente o que as matrizes vão passar a fazer.
A cor do título dá o grau de dificuldade: verde, aplicação direta · amarelo, exige uma ideia intermédia · vermelho, justificação ou generalização, ao nível do Exame.
Num referencial o.n.
a) Determina as coordenadas de
Sendo
Determina a imagem do ponto
Escreve o vetor
Determina a imagem de
a) ao eixo
Um triângulo tem vértices
Determina os vértices da imagem pela homotetia de centro na origem e razão
Determina
Determina as coordenadas do ponto
Determina a imagem de
Sabendo que uma transformação do plano leva
Um quadrado tem vértices
a) Determina as imagens dos quatro vértices.b) Determina a área da imagem.
Considera
Determina as coordenadas do ponto
As coordenadas do vetor são «chegada menos partida». A norma sai do teorema de Pitágoras.
- a)
\overrightarrow{AB} = B - A = (5-2,\,3-(-1)) = (3,\,4) . - b)
\left\|\overrightarrow{AB}\right\| = \sqrt{3^{2}+4^{2}} = \sqrt{25} = 5 .
Coordenada a coordenada — exatamente como se vai somar matrizes na secção 2.
\vec{u}+\vec{v} = (2-1,\,-3+4) = (1,\,1) .2\vec{u} = (4,\,-6) , logo2\vec{u}-\vec{v} = (4+1,\,-6-4) = (5,\,-10) .Somar vetores é somar coordenada a coordenada, e multiplicar por um número é multiplicar todas. As matrizes vão fazer exatamente o mesmo — uma matriz coluna é um vetor.
Transladar é somar o vetor às coordenadas do ponto.
P' = P + \vec{u} = (-2+5,\,4-1) = (3,\,3) .
As coordenadas são os coeficientes da combinação. É quase uma definição.
\vec{w} = 4\,\vec{e_{1}} - 7\,\vec{e_{2}}. - Verificação:
4(1,0) - 7(0,1) = (4,0)+(0,-7) = (4,-7) . ✓É esta decomposição que faz a secção 3 funcionar: se se souber para onde vão\vec{e_{1}} e\vec{e_{2}} , sabe-se para onde vai tudo o resto.
Refletir no eixo
- a)
(3,\,5) . - b)
(-3,\,-5) . - c)
(-3,\,5) — os dois sinais mudam.A reflexão na origem é o mesmo que uma rotação de180° . Na secção 3 vai ver-se que as duas têm mesmo a mesma matriz.
Uma homotetia de centro na origem multiplica as duas coordenadas pela razão. E a área não cresce na mesma proporção.
- Os vértices:
A'(0,0) ,B'(4,0) ,C'(0,6) . - As áreas:
\frac{2 \times 3}{2} = 3 antes;\frac{4 \times 6}{2} = 12 depois. - A área ficou multiplicada por
4 = 2^{2} , e não por2 .Guarda o resultado: numa ampliação de razãok , a área multiplica-se pork^{2} . O laboratório da secção 3 mostra isso a acontecer.
Dois vetores são colineares quando um é múltiplo do outro. Compara as primeiras coordenadas para descobrir o múltiplo.
- O múltiplo, pelas primeiras coordenadas:
6 = 2 \times 3 , logo\vec{v} = 2\vec{u} se forem colineares. - As segundas:
4 = 2k \iff k = 2 . - Verificação:
\vec{u}(3,\,2) e\vec{v}(6,\,4) = 2\vec{u} . ✓A colinearidade das duas colunas de uma matriz é exatamente o que faz o plano colapsar numa reta — é o exercício 12 da secção 3.
O ponto médio tem por coordenadas as médias das coordenadas dos extremos.
M\left(\frac{-3+7}{2},\ \frac{6-2}{2}\right) = M(2,\,2).
Desenha o ponto e roda-o um quarto de volta no sentido contrário ao dos ponteiros do relógio. Repara no que acontece às duas coordenadas.
- Rodar
90° no sentido positivo leva o eixoOx ao eixoOy e o eixoOy ao semieixo negativoOx . - Portanto
(x,\,y) \mapsto (-y,\,x) , eP(2,\,5) \mapsto P'(-5,\,2) . - Confirma-se pela norma:
\sqrt{4+25} = \sqrt{25+4} . Uma rotação não muda distâncias.A regra(x,y)\mapsto(-y,x) vai reaparecer na secção 3 como uma matriz. Vale a pena chegar lá já a saber o resultado.
Decompõe
- Decompor:
(4,\,-2) = 4\,\vec{e_{1}} - 2\,\vec{e_{2}} . - Transportar, porque a transformação respeita somas e múltiplos:
4(3,\,1) - 2(-1,\,2) = (12,\,4) - (-2,\,4) = (14,\,0). - A imagem é
(14,\,0) .Este exercício é a secção 3, escrito sem uma única matriz. Quando a matriz aparecer, as imagens de\vec{e_{1}} e\vec{e_{2}} vão ser as suas colunas — e a conta é esta.
Faz o desenho. A base não se mexe — só o topo é que desliza.
- a)
(0,0) \mapsto (0,0) ;(1,0) \mapsto (1,0) ;(1,1) \mapsto (2,1) ;(0,1) \mapsto (1,1) . - b) A imagem é um paralelogramo de base
1 (o segmento de(0,0) a(1,0) ) e altura1 : área1 . - A área é a mesma do quadrado de partida.É um cisalhamento, e a área nunca muda num cisalhamento — a figura escorrega, mas não se estica nem se encolhe.
Num paralelogramo
- O vetor conhecido:
\overrightarrow{AB} = (4,\,2) . - A condição:
\overrightarrow{DC} = \overrightarrow{AB} , ou sejaC - D = (4,\,2) . - Resolver:
D = C - (4,\,2) = (3-4,\,8-2) = (-1,\,6) . - Verificação:
\overrightarrow{AD} = (-2,\,4) e\overrightarrow{BC} = (-2,\,4) . ✓A ordem dos vértices manda. Com\left[ABDC\right] a condição seria outra, e o ponto sairia noutro sítio.
O conceito de matriz
Uma tabela de números com dois índices. Dito assim parece pouco — e é mesmo pouco. O que faz das matrizes uma das ferramentas mais poderosas que se inventaram são as operações que se definem sobre elas, e isso é a secção seguinte.
- Identificar matrizes e operações com matrizes em situações concretas.
- Entender o conceito de matriz e conhecer alguns casos particulares, nomeadamente matriz retangular, matriz quadrada, matriz linha, matriz coluna, matriz diagonal e matriz identidade.
1 · De uma tabela a uma matriz
Uma escola tem duas turmas e regista, para cada uma, quantos alunos escolheram cada uma de três disciplinas de opção:
| Física | Economia | Desenho | |
|---|---|---|---|
| Turma A | 12 | 8 | 5 |
| Turma B | 9 | 14 | 3 |
Se ficar combinado que a primeira linha é a turma A, a segunda a turma B, e as colunas seguem aquela ordem, os cabeçalhos deixam de ser precisos. Sobram os números — e é isso a matriz:
Chama-se matriz do tipo
onde
Em
2 · Os casos particulares que têm nome
Retangular — o caso geral, com
A matriz coluna parece a menos interessante das cinco. É a mais importante deste capítulo: é assim que um ponto do plano se escreve para poder ser multiplicado por uma matriz, na secção 3.
3 · Quando duas matrizes são iguais
Duas matrizes são iguais quando têm o mesmo tipo e os elementos coincidem posição a posição:
Igualar duas matrizes
O nome matriz é de James Joseph Sylvester (1814-1897), em 1850: chamou-lhe assim — «matriz», no sentido de molde, aquilo de onde saem os determinantes. Foi o amigo Arthur Cayley (1821-1895) quem, em 1858, deu o passo decisivo: definiu as operações e tratou as matrizes como objetos com álgebra própria. Até aí eram tabelas; a partir daí passaram a ser números de um novo tipo. Hoje são o que está por trás de um motor de busca, de um modelo de linguagem e de cada fotograma de um filme de animação.
Um ginásio tem três modalidades e regista as inscrições em dois meses. Em janeiro:
Escreve a matriz
- Fixar a leitura. Linha
1 = janeiro, linha2 = fevereiro; colunas por ordem natação, ténis, judo. - A matriz:
A = \begin{bmatrix} 30 & 22 & 18\\ 26 & 31 & 20 \end{bmatrix}. - O tipo é
2 \times 3 : duas linhas, três colunas. - O elemento
a_{12} está na linha1 e na coluna2 :a_{12} = 22 , as inscrições em ténis em janeiro.O primeiro passo — dizer o que é cada linha e cada coluna — não é formalidade. Sem ele,a_{12} é um número sem significado, e a matriz não representa coisa nenhuma.
Determina
- Mesmo tipo — as duas são
2 \times 2 , logo a igualdade faz sentido. - Posição a posição, ignorando as que já coincidem:
\begin{cases} x+y = 5\\ z = -3\\ 2x = 6 \end{cases} - Resolver. Da terceira,
x = 3 ; substituindo na primeira,y = 2 . Ez = -3 . - Verificação:
3+2 = 5 ✓ e2 \times 3 = 6 ✓.Começar pela equação que tem uma só incógnita — aqui a terceira — poupa todo o trabalho de substituição. Vale sempre a pena olhar para o sistema todo antes de escolher por onde começar.
Python Uma matriz é uma lista de listas
A = [[12, 8, 5],
[9, 14, 3]]
print('tipo:', len(A), 'x', len(A[0]))
print('a[1][2] =', A[0][1])
print()
print('totais por turma:')
for i, linha in enumerate(A):
print(' turma', i + 1, '->', sum(linha))
print('totais por disciplina:')
for j in range(len(A[0])):
print(' disciplina', j + 1, '->', sum(A[i][j] for i in range(len(A))))
# Em Python uma matriz e' uma lista de linhas, e cada linha e' uma lista.
A = [[12, 8, 5], # turma A
[9, 14, 3]] # turma B
print('tipo:', len(A), 'x', len(A[0])) # linhas x colunas
# CUIDADO: em Python os indices comecam em 0, e em matematica em 1.
# O a_12 da matematica e' o A[0][1] do Python.
print('a[1][2] =', A[0][1])
print()
print('totais por turma:') # somar cada LINHA
for i, linha in enumerate(A):
print(' turma', i + 1, '->', sum(linha))
print('totais por disciplina:') # somar cada COLUNA
for j in range(len(A[0])):
print(' disciplina', j + 1, '->', sum(A[i][j] for i in range(len(A))))
Repara no desencontro dos índices: o A[0][1] do Python, porque as listas começam em
Exercícios propostos
Doze exercícios sobre o conceito, os casos particulares e a igualdade. Nos que trazem contexto, a primeira coisa a fazer é dizer o que é cada linha e cada coluna.
A cor do título dá o grau de dificuldade: verde, aplicação direta · amarelo, exige uma ideia intermédia · vermelho, justificação ou generalização, ao nível do Exame.
Considera a matriz
a) Indica o tipo de
Classifica cada matriz: quadrada, linha, coluna, diagonal ou identidade.
a)
Escreve a matriz
Determina
Uma pastelaria vende três produtos em duas lojas. Na loja
a) Organiza os dados numa matriz
Quatro cidades —
Constrói a matriz
Determina
Escreve a matriz
Que matriz é esta?
Uma matriz
a) Quantos elementos tem?b)
Considera a matriz
a) Escreve
Uma fábrica produz dois modelos de mochila,
a) Escreve a matriz
Sejam
Determina
O tipo é «linhas
- a)
A tem2 linhas e3 colunas: é do tipo2 \times 3 . - b)
a_{12} é o elemento da linha1 , coluna2 :a_{12} = -1 . Ea_{23} = -4 .A ordem dos índices não é convenção arbitrária que se possa trocar: é ela que faz o produto de matrizes funcionar, na secção 2.
Uma matriz pode caber em mais do que uma classificação — a identidade é diagonal e quadrada ao mesmo tempo.
- a) Quadrada
2 \times 2 e diagonal: fora da diagonal principal só há zeros. - b) Matriz linha, do tipo
1 \times 3 . - c) Quadrada, diagonal e identidade: a diagonal só tem uns.
- d) Matriz coluna, do tipo
2 \times 1 .As matrizes coluna são as que interessam na secção 3: é assim que se escreve um ponto do plano para o poder multiplicar por uma matriz.
Percorre as posições por ordem: linha 1 com
- Linha 1 (
i = 1 ):1+2 = 3 ,1+4 = 5 ,1+6 = 7 . - Linha 2 (
i = 2 ):2+2 = 4 ,2+4 = 6 ,2+6 = 8 . A = \begin{bmatrix} 3 & 5 & 7\\ 4 & 6 & 8 \end{bmatrix}.
Duas matrizes são iguais quando têm o mesmo tipo e os elementos coincidem posição a posição.
- As duas são
2 \times 2 , logo pode comparar-se posição a posição. - Da posição
(1,2) :x = 7 . Da posição(2,1) :y = -1 .
Uma linha por loja e uma coluna por produto. Depois lê o elemento pedido no contexto, e não como número solto.
- a) Com as colunas por ordem bolos, tartes, pastéis:
V = \begin{bmatrix} 40 & 25 & 60\\ 30 & 45 & 50 \end{bmatrix}. - b)
v_{21} = 30 : é o número de bolos vendidos na lojaL_{2} .A matriz só tem sentido depois de se dizer o que é cada linha e o que é cada coluna. Sem essa legenda, é uma tabela de números sem significado.
Uma estrada liga nos dois sentidos, o que faz a matriz simétrica. E uma cidade não tem estrada para si própria.
- Com as cidades por ordem
A, B, C, D :M = \begin{bmatrix} 0 & 1 & 1 & 0\\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1\\ 0 & 0 & 1 & 0 \end{bmatrix}. - A diagonal é toda de zeros, e a matriz é simétrica em relação a ela.Chamam-se matrizes de adjacência, e são a forma como um mapa, uma rede social ou um circuito entram num computador. É por aí que as matrizes deixam de ser tabelas e passam a ser ferramenta.
Cada posição dá uma equação. A primeira tem duas soluções; a segunda também.
- Posição
(1,1) :x^{2} = 9 \iff x = -3 \lor x = 3 . - Posição
(2,2) :y = y^{2}-6 \iff y^{2}-y-6 = 0 \iff y = -2 \lor y = 3 . - As restantes posições já coincidem. Há portanto quatro pares
(x,\,y) possíveis.A igualdade de matrizes dá um sistema, uma equação por posição — e o número de soluções é o das combinações, não o de uma equação só.
Escreve-a e compara com os casos particulares da secção.
B = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix}. - É a matriz identidade de ordem
3 , que se representa porI_{3} .Na secção 2 vai-se ver queI faz na multiplicação de matrizes o que o1 faz na dos números: multiplicar por ela não muda nada.
O número de elementos é o produto do tipo. E uma matriz diagonal tem de ser, antes de mais, quadrada.
- a)
3 \times 5 = 15 elementos. - b) Não. Uma matriz diagonal é, por definição, quadrada — e
3 \neq 5 .Vale a pena reparar que «ter muitos zeros» não faz uma matriz diagonal. A definição começa por exigir que seja quadrada.
Na alínea b) não é preciso olhar para a matriz: basta reparar em que
- a) O expoente
i+j é par na diagonal e alterna à volta:C = \begin{bmatrix} 1 & -1 & 1\\ -1 & 1 & -1\\ 1 & -1 & 1 \end{bmatrix}. - b) Como a adição é comutativa,
i+j = j+i , logoc_{ij} = (-1)^{i+j} = (-1)^{j+i} = c_{ji}. - A justificação vale para qualquer ordem, e não só para
3 .Provar a partir da fórmula, e não da tabela escrita, é o que faz a demonstração valer para todas as ordens de uma vez.
Na alínea b), pensa em que ordem as duas matrizes teriam de aparecer para que os «modelos» se encontrassem uns com os outros.
- a) Colunas por ordem tecido, fechos, rebites:
N = \begin{bmatrix} 2 & 1 & 4\\ 3 & 2 & 2 \end{bmatrix}. - b) A encomenda é
Q = \begin{bmatrix} 50 & 80 \end{bmatrix} , uma matriz linha1 \times 2 . - Para o produto
QN fazer sentido, o número de colunas deQ tem de ser igual ao número de linhas deN :2 = 2 . ✓ O resultado será1 \times 3 — o total de cada material.É a secção 2 a bater à porta: o produto só existe quando os «modelos» de uma matriz encontram os «modelos» da outra. O tipo não é burocracia, é o que garante que a conta tem significado.
Duas das quatro posições já coincidem. As outras duas dão um sistema.
- As posições
(1,2) e(2,1) já coincidem. - As outras duas dão o sistema
\begin{cases} a+b = 7\\ a-b = 1 \end{cases} - Somando as duas equações:
2a = 8 \iff a = 4 . Substituindo,b = 3 . - Verificação:
4+3 = 7 ✓ e4-3 = 1 ✓.É aqui que se vê porque é que as matrizes e os sistemas andam juntos: uma igualdade de matrizes é um sistema, escrito de outra maneira.
Operações com matrizes
Somar é fácil e faz-se posição a posição. Multiplicar é que não: a regra é estranha à primeira vista, obriga os tipos a encaixar e — ao contrário de tudo o que se conhece — depende da ordem. A secção 3 explica porquê.
- Operações elementares com matrizes: adição, subtração, multiplicação (multiplicação por um escalar e multiplicação de duas matrizes).
- Analisar as propriedades da adição e da multiplicação de matrizes e os casos de impossibilidade (associados à dimensão das matrizes).
1 · Adição, subtração e produto por um escalar
Sendo
A subtração é
Somar exige o mesmo tipo. Uma matriz
Com esta definição, a adição herda tudo o que a adição de números tem: é comutativa, é associativa, tem elemento neutro (a matriz nula, toda de zeros) e cada matriz tem simétrica. Nada aqui surpreende.
2 · O produto de duas matrizes
Aqui a regra deixa de ser «posição a posição». Cada elemento do produto resulta de uma linha inteira da primeira matriz encontrar uma coluna inteira da segunda.
Sendo
O produto só existe quando o número de colunas de
O
Laboratório · O produto, célula a célula
interativoCarrega numa célula do resultado. Acende-se a linha da primeira matriz e a coluna da segunda — e aparece em baixo a soma de produtos que a produziu. Repara que a linha e a coluna têm sempre o mesmo comprimento: é o
3 · As propriedades — e a que falta
Associativa:
O produto de matrizes não é comutativo: em geral
Há uma segunda ausência, tão importante como a primeira: o produto de duas matrizes não nulas pode ser a matriz nula. Nos números reais isso é impossível; nas matrizes acontece. É por isso que não se «corta» uma matriz dos dois lados de uma igualdade.
Sendo
- O tipo, primeiro.
A é2 \times 3 eB é3 \times 2 : o3 bate certo, eAB é2 \times 2 . - Linha 1 de
A pelas colunas deB :1(2)+(-2)(0)+0(5) = 2, \qquad 1(1)+(-2)(-3)+0(2) = 7. - Linha 2 de
A :3(2)+1(0)+4(5) = 26, \qquad 3(1)+1(-3)+4(2) = 8. AB = \begin{bmatrix} 2 & 7\\ 26 & 8 \end{bmatrix}. - E
BA ? Seria(3 \times 2)(2 \times 3) : o2 bate certo, logo existe — e é3 \times 3 . Note-se queAB eBA nem sequer têm o mesmo tipo.Quando os dois produtos existem mas têm tipos diferentes, a não comutatividade é evidente. O caso interessante é o das matrizes quadradas, onde os dois têm o mesmo tipo e mesmo assim diferem.
Sejam
- Primeiro produto:
AB = \begin{bmatrix} 0(0)+1(1) & 0(0)+1(0)\\ 0(0)+0(1) & 0(0)+0(0) \end{bmatrix} = \begin{bmatrix} 1 & 0\\ 0 & 0 \end{bmatrix}. - Segundo produto:
BA = \begin{bmatrix} 0(0)+0(0) & 0(1)+0(0)\\ 1(0)+0(0) & 1(1)+0(0) \end{bmatrix} = \begin{bmatrix} 0 & 0\\ 0 & 1 \end{bmatrix}. - Ambos existem, ambos são
2 \times 2 — e são diferentes.Este par é o exemplo mínimo: duas matrizes com um único1 cada uma, e os produtos caem em cantos opostos da diagonal. Guarda-o para quando precisares de um contraexemplo rápido.
Python O produto em cinco linhas, e o teste da comutatividade
def produto(A, B):
if len(A[0]) != len(B):
return None
return [[sum(A[i][k]*B[k][j] for k in range(len(B)))
for j in range(len(B[0]))] for i in range(len(A))]
A = [[1, 2], [0, -1]]
B = [[3, 1], [4, -2]]
print('AB =', produto(A, B))
print('BA =', produto(B, A))
print('iguais?', produto(A, B) == produto(B, A))
C = [[1, -2, 0], [3, 1, 4]]
print('AC =', produto(A, C))
print('CA =', produto(C, A))
# O produto de matrizes cabe numa linha - se os tipos baterem certo.
def produto(A, B):
if len(A[0]) != len(B): # colunas de A tem de ser = linhas de B
return None # senao, o produto nao existe
return [[sum(A[i][k]*B[k][j] for k in range(len(B)))
for j in range(len(B[0]))] for i in range(len(A))]
A = [[1, 2], [0, -1]]
B = [[3, 1], [4, -2]]
print('AB =', produto(A, B))
print('BA =', produto(B, A))
print('iguais?', produto(A, B) == produto(B, A)) # da' False
C = [[1, -2, 0], [3, 1, 4]] # 2x3
print('AC =', produto(A, C)) # (2x2)(2x3) = 2x3, existe
print('CA =', produto(C, A)) # (2x3)(2x2): 3 != 2, da' None
A última linha imprime None: o produto
Exercícios propostos
Doze exercícios. Antes de multiplicar, escreve os tipos: metade dos erros deste tema são produtos que nem sequer existem.
Sendo
Com
Indica, quando existir, o tipo do produto. Se não existir, justifica.
a)
Calcula
Com as matrizes do exercício anterior, calcula
Calcula
Sendo
Determina a matriz
Uma oficina monta dois modelos de bicicleta. Cada modelo
Escreve as matrizes adequadas e determina, por multiplicação, o custo de material de cada modelo.
Sejam
Mostra que
Sejam
Calcula
Retoma a matriz de estradas do exercício 6 da secção 1, com as cidades
Sabendo que o elemento
Posição a posição. As duas são
A+B = \begin{bmatrix} 3 & 3\\ -2 & 8 \end{bmatrix}, \qquad A-B = \begin{bmatrix} 1 & -5\\ 2 & -2 \end{bmatrix}.
Multiplicar por um escalar é multiplicar todos os elementos por esse número.
3A = \begin{bmatrix} 3 & 0 & -6\\ 9 & 15 & 3 \end{bmatrix}. -\frac{1}{2}A = \begin{bmatrix} -0{,}5 & 0 & 1\\ -1{,}5 & -2{,}5 & -0{,}5 \end{bmatrix}. Todos os elementos, incluindo os zeros — que ficam zeros. É diferente do produto de matrizes, onde um zero pode desaparecer numa soma.
A regra é uma só: as colunas da primeira têm de ser tantas como as linhas da segunda. O que sobra dá o tipo do produto.
- a)
3 = 3 ✓. O produto existe e é do tipo2 \times 4 . - b) Colunas de
A :3 . Linhas deB :2 . Como3 \neq 2 , o produto não existe. - c)
1 = 1 ✓. O produto existe e é do tipo3 \times 3 .Na alínea c) duas matrizes com três elementos cada uma dão uma matriz com nove. O produto não é «elemento a elemento» — nunca foi.
Cada elemento do produto é a soma dos produtos de uma linha de
- Posição
(1,1) : linha1 deA por coluna1 deB :1 \times 3 + 2 \times 4 = 11 . - Posição
(1,2) :1 \times 1 + 2 \times (-2) = -3 . - Posição
(2,1) :0 \times 3 + (-1) \times 4 = -4 . - Posição
(2,2) :0 \times 1 + (-1) \times (-2) = 2 . AB = \begin{bmatrix} 11 & -3\\ -4 & 2 \end{bmatrix}.
Faz a conta toda outra vez, agora com
- Posição a posição:
3 \times 1 + 1 \times 0 = 3 ;3 \times 2 + 1 \times (-1) = 5 ;4 \times 1 + (-2) \times 0 = 4 ;4 \times 2 + (-2)\times(-1) = 10 . BA = \begin{bmatrix} 3 & 5\\ 4 & 10 \end{bmatrix} \neq \begin{bmatrix} 11 & -3\\ -4 & 2 \end{bmatrix} = AB. - A multiplicação de matrizes não é comutativa.Não é uma esquisitice da conta: na secção 3 vê-se o significado geométrico — rodar e depois esticar não dá o mesmo que esticar e depois rodar.
Confirma primeiro o tipo:
- Tipo:
(2 \times 3)(3 \times 2) = 2 \times 2 . ✓ - (1,1):
2(1) + 0(0) + 1(3) = 5 . (1,2):2(4) + 0(-2) + 1(1) = 9 . - (2,1):
-1(1) + 3(0) + 2(3) = 5 . (2,2):-1(4) + 3(-2) + 2(1) = -8 . AB = \begin{bmatrix} 5 & 9\\ 5 & -8 \end{bmatrix}. O número de parcelas de cada soma é a dimensão que desaparece — aqui, o3 . É por isso que ela tem de ser igual nas duas matrizes.
Faz as duas contas. É um dos poucos casos em que a ordem não importa.
A I_{2} = \begin{bmatrix} 4 & -3\\ 1 & 2 \end{bmatrix} = A, \qquad I_{2} A = \begin{bmatrix} 4 & -3\\ 1 & 2 \end{bmatrix} = A. - A identidade é elemento neutro da multiplicação, dos dois lados.É o análogo do
1 nos números — e um dos raros pares de matrizes que comutam. Na secção 3,I é a transformação que deixa tudo onde está.
Resolve como resolverias em números: passa a matriz conhecida para o outro membro e divide por
- Isolar
2X :2X = \begin{bmatrix} 7 & -2\\ 1 & 10 \end{bmatrix} - \begin{bmatrix} 1 & 0\\ -3 & 4 \end{bmatrix} = \begin{bmatrix} 6 & -2\\ 4 & 6 \end{bmatrix}. - Multiplicar por
\frac{1}{2} :X = \begin{bmatrix} 3 & -1\\ 2 & 3 \end{bmatrix}. Com a adição pode fazer-se isto, porque tem as mesmas propriedades da adição de números. Com o produto não: não há divisão de matrizes.
Uma matriz de necessidades (modelos
- As matrizes, com as colunas por ordem rodas, selins:
N = \begin{bmatrix} 2 & 1\\ 2 & 2 \end{bmatrix}, \qquad P = \begin{bmatrix} 15\\ 8 \end{bmatrix}. - O tipo encaixa:
(2 \times 2)(2 \times 1) = 2 \times 1 . ✓ NP = \begin{bmatrix} 2(15)+1(8)\\ 2(15)+2(8) \end{bmatrix} = \begin{bmatrix} 38\\ 46 \end{bmatrix}. - O modelo
M_{1} custa38 € de material e oM_{2} custa46 €.Repara no que o produto fez: as peças desapareceram. É sempre isso — a dimensão comum às duas matrizes é a que se soma e se perde.
Desenvolve
- O desenvolvimento correto:
(A+B)^{2} = A^{2} + AB + BA + B^{2}. Só se poderia escrever2AB se fosseAB = BA . - As duas parcelas do meio:
AB = \begin{bmatrix} 2 & 1\\ 1 & 1 \end{bmatrix}, \qquad BA = \begin{bmatrix} 1 & 1\\ 1 & 2 \end{bmatrix}. São diferentes. - Logo
A^{2}+AB+BA+B^{2} \neq A^{2}+2AB+B^{2} , e a igualdade proposta é falsa.Todos os «casos notáveis» da álgebra de números dependem da comutatividade. Nas matrizes, nenhum deles se aplica sem mais.
Faz a conta até ao fim. O resultado é surpreendente — e diz alguma coisa importante sobre a álgebra das matrizes.
- (1,1):
1(2)+2(-1) = 0 . (1,2):1(-4)+2(2) = 0 . - (2,1):
2(2)+4(-1) = 0 . (2,2):2(-4)+4(2) = 0 . AB = \begin{bmatrix} 0 & 0\\ 0 & 0 \end{bmatrix}. - Duas matrizes não nulas cujo produto é a matriz nula.Nos números reais,
ab = 0 obrigaa = 0 oub = 0 . Nas matrizes, não. É por isso que não se pode «cortar» matrizes numa igualdade: deAX = AY não se concluiX = Y .
Não é preciso calcular
- As linhas e colunas de que se precisa. Linha de
A :\begin{bmatrix} 0 & 1 & 1 & 0 \end{bmatrix} . Coluna deD :\begin{bmatrix} 0\\ 0\\ 1\\ 0 \end{bmatrix} . - O produto:
0(0) + 1(0) + 1(1) + 0(0) = 1. - Há um caminho:
A \to C \to D .A conta do produto é literalmente a contagem: cada parcela pergunta «há estrada deA para a cidadek ?» vezes «há estrada dek paraD ?». Só sobra1 quando as duas existem.
Transformações geométricas no plano
É aqui que uma tabela de números passa a mover figuras. Toda a secção assenta numa observação só, e vale a pena guardá-la antes de continuar: as colunas de uma matriz são as imagens dos dois vetores unitários. Quem souber ler isso lê qualquer transformação sem fazer contas.
- Caraterizar translações através da soma de matrizes coluna.
- Caraterizar variações de tamanho (scaling), cisalhamentos (shearing) e rotações no plano, recorrendo a matrizes adequadas multiplicadas por matrizes coluna.
- Identificar a multiplicação de matrizes com a composição de transformações geométricas.
1 · Um ponto é uma matriz coluna
Para poder multiplicar um ponto por uma matriz, escreve-se o ponto ao alto:
Assim,
A translação associada ao vetor
É a única das transformações desta secção que não se escreve como uma matriz
2 · A observação que explica tudo
Toma uma matriz qualquer,
A primeira coluna de
Daqui saem as duas perguntas que resolvem qualquer exercício desta secção. Para escrever uma matriz: para onde vão o
Laboratório · A matriz a deformar o plano
interativoComeça em identidade e mexe só no
3 · As quatro transformações que as AE pedem
| Transformação | Matriz | O que faz |
|---|---|---|
| Ampliação (scaling) | estica tudo por igual, | |
| Ampliação em cada eixo | estica | |
| Cisalhamento (shearing) | a base fica, o topo desliza | |
| Rotação de | roda em torno da origem |
A matriz da rotação não se decora: escreve-se. A imagem de
4 · Compor é multiplicar
Aplicar
A segunda transformação escreve-se à esquerda. E, como
Em todo o lado onde alguma coisa se mexe num ecrã. Cada personagem de um filme de animação, cada objeto de um videojogo, cada rotação de um modelo 3D é uma sequência destas matrizes multiplicadas umas pelas outras — e a placa gráfica de um computador é, no essencial, uma máquina construída para fazer estes produtos aos milhões por segundo.
Escreve a matriz da transformação que reflete o plano na bissetriz dos quadrantes ímpares,
- Onde vai o
e_{1}(1,\,0) ? Refletir na retay = x troca as coordenadas: vai para(0,\,1) . - Onde vai o
e_{2}(0,\,1) ? Pela mesma razão, vai para(1,\,0) . - Em coluna:
S = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}. - Confirmação, num ponto qualquer:
S\begin{bmatrix} 3\\ -2 \end{bmatrix} = \begin{bmatrix} -2\\ 3 \end{bmatrix} — as coordenadas trocadas, como devia ser.Duas perguntas e um arrumar em coluna. Não houve sistema nenhum para resolver — e é assim que se escreve qualquer matriz de transformação.
Considera a rotação de
Determina a imagem do ponto
- Primeiro
R , depoisC . A matriz éCR :CR = \begin{bmatrix} 1 & 1\\ 0 & 1 \end{bmatrix}\begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 1 & -1\\ 1 & 0 \end{bmatrix}. LogoCR\begin{bmatrix} 1\\ 0 \end{bmatrix} = \begin{bmatrix} 1\\ 1 \end{bmatrix} . - Primeiro
C , depoisR . A matriz éRC :RC = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 & 1\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1\\ 1 & 1 \end{bmatrix}. LogoRC\begin{bmatrix} 1\\ 0 \end{bmatrix} = \begin{bmatrix} 0\\ 1 \end{bmatrix} . - Duas imagens diferentes,
(1,\,1) e(0,\,1) , do mesmo ponto de partida.Repara em qual é a matriz de cada composição: a transformação que se aplica em segundo lugar fica à esquerda. Escrever ao contrário é o erro mais comum desta secção.
Python Rodar um polígono, grau a grau
from math import cos, sin, radians
def rotacao(graus):
t = radians(graus)
return [[cos(t), -sin(t)], [sin(t), cos(t)]]
def aplicar(M, P):
return [M[0][0]*P[0] + M[0][1]*P[1],
M[1][0]*P[0] + M[1][1]*P[1]]
quadrado = [(1, 0), (1, 1), (0, 1), (0, 0)]
for graus in (0, 30, 45, 90, 180):
R = rotacao(graus)
imagens = [aplicar(R, P) for P in quadrado]
print('%4d graus:' % graus,
' '.join('(%5.2f,%5.2f)' % (p[0], p[1]) for p in imagens))
# A matriz de rotacao nao se decora: constroi-se a partir do angulo.
from math import cos, sin, radians
def rotacao(graus):
t = radians(graus) # o Python trabalha em radianos
# as colunas sao as imagens de e1 e de e2, rodados de t
return [[cos(t), -sin(t)], [sin(t), cos(t)]]
def aplicar(M, P): # matriz 2x2 vezes ponto
return [M[0][0]*P[0] + M[0][1]*P[1],
M[1][0]*P[0] + M[1][1]*P[1]]
quadrado = [(1, 0), (1, 1), (0, 1), (0, 0)]
for graus in (0, 30, 45, 90, 180):
R = rotacao(graus)
imagens = [aplicar(R, P) for P in quadrado]
# com 0 graus nada se mexe; com 180, tudo troca de sinal
print('%4d graus:' % graus,
' '.join('(%5.2f,%5.2f)' % (p[0], p[1]) for p in imagens))
Repara que a 6.12e-17 em vez de 0: é o cosseno de
Exercícios propostos
Doze exercícios. Em todos os que pedem para escrever uma matriz, faz as duas perguntas de sempre: para onde vai o
Aplica ao ponto
Determina a imagem do ponto
Considera a matriz
a) Determina a imagem de
Determina a imagem de
Escreve a matriz da transformação do plano que duplica as abcissas e mantém as ordenadas.
Considera o cisalhamento horizontal
a) Determina as imagens dos quatro vértices do quadrado de vértices
Sejam
Determina a matriz de «primeiro
Escreve a matriz da reflexão do plano em relação ao eixo
Um triângulo tem vértices
Determina as coordenadas dos vértices da imagem.
Determina a matriz da rotação de
Sejam
Determina
Uma transformação do plano é dada pela matriz
Mostra que todos os pontos do plano são transformados em pontos de uma mesma reta, e indica uma equação dessa reta.
Escreve o ponto como matriz coluna e soma a matriz coluna do vetor.
\begin{bmatrix} 3\\ -1 \end{bmatrix} + \begin{bmatrix} 2\\ 5 \end{bmatrix} = \begin{bmatrix} 5\\ 4 \end{bmatrix}. - A imagem é
P'(5,\,4) .A translação é a única das quatro transformações desta secção que se faz por soma. Todas as outras são multiplicações — e é por isso que a translação não se escreve como matriz2\times 2 .
Multiplica a matriz pela matriz coluna do ponto. O ponto vai à direita.
\begin{bmatrix} 3 & 0\\ 0 & 3 \end{bmatrix}\begin{bmatrix} 2\\ -3 \end{bmatrix} = \begin{bmatrix} 3(2)+0(-3)\\ 0(2)+3(-3) \end{bmatrix} = \begin{bmatrix} 6\\ -9 \end{bmatrix}. - A imagem é
P'(6,\,-9) .
Faz as duas contas — e depois compara os resultados com as colunas de
- a)
A\begin{bmatrix} 1\\ 0 \end{bmatrix} = \begin{bmatrix} 2\\ 0 \end{bmatrix} : a imagem é(2,\,0) . - b)
A\begin{bmatrix} 0\\ 1 \end{bmatrix} = \begin{bmatrix} 0\\ -1 \end{bmatrix} : a imagem é(0,\,-1) . - São exatamente a primeira e a segunda coluna de
A .Não é coincidência deste exemplo: acontece sempre, e é a chave de toda a secção. As colunas de uma matriz são as imagens dos dois vetores unitários.
Multiplica e confirma no desenho: uma rotação de
\begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 4\\ 1 \end{bmatrix} = \begin{bmatrix} 0(4)+(-1)(1)\\ 1(4)+0(1) \end{bmatrix} = \begin{bmatrix} -1\\ 4 \end{bmatrix}. - A imagem é
P'(-1,\,4) — de facto no segundo quadrante.A regra de bolso: uma rotação de90° troca as coordenadas e muda o sinal da primeira,(x,y) \mapsto (-y,\,x) . Confere com a conta.
Escreve as imagens de
- Imagem de
e_{1}(1,0) : a abcissa duplica, a ordenada mantém-se:(2,\,0) . - Imagem de
e_{2}(0,1) : a abcissa é0 e continua0 ; a ordenada mantém-se:(0,\,1) . - As colunas:
A = \begin{bmatrix} 2 & 0\\ 0 & 1 \end{bmatrix}. Escrever uma matriz de transformação nunca exige resolver um sistema: basta perguntar «para onde vai o(1,0) ?» e «para onde vai o(0,1) ?», e arrumar as respostas em coluna.
Repara que a base do quadrado, sobre o eixo
- a)
(0,0) \mapsto (0,0) ;(1,0) \mapsto (1,0) ;(1,1) \mapsto (3,1) ;(0,1) \mapsto (2,1) . - b) A base ficou onde estava e o topo deslizou
2 para a direita: a imagem é um paralelogramo, com a mesma base e a mesma altura. - Note-se que a área não mudou:
1 antes,1 depois.Um cisalhamento é o que acontece a um baralho de cartas quando se empurra o topo de lado. Nada se estica — as coisas escorregam umas sobre as outras.
Aplicar
- Primeiro
E , depoisR :RE = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 2 & 0\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 0 & -1\\ 2 & 0 \end{bmatrix}. - Primeiro
R , depoisE :ER = \begin{bmatrix} 2 & 0\\ 0 & 1 \end{bmatrix}\begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & -2\\ 1 & 0 \end{bmatrix}. - São diferentes: esticar e depois rodar não é o mesmo que rodar e depois esticar.É aqui que a não comutatividade da secção 2 deixa de ser uma esquisitice da conta e passa a ter significado: a ordem das transformações importa, e qualquer pessoa que já tenha rodado e escalado uma imagem sabe disso.
Onde vão parar o
- Imagem de
e_{1}(1,0) : está sobre o eixo, não se mexe:(1,\,0) . - Imagem de
e_{2}(0,1) : passa para baixo:(0,\,-1) . S = \begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix}. Uma reflexão vira a figura do avesso — e isso vê-se no laboratório: a área não muda, mas a orientação inverte-se.
Primeiro a multiplicação, para os três pontos; só depois a soma. A ordem é a do enunciado.
- Ampliação de razão
2 :(2,2) ,(8,2) ,(2,6) . - Translação, somando
(-3,\,2) a cada um:A''(-1,\,4), \qquad B''(5,\,4), \qquad C''(-1,\,8). - Note-se que a translação não se pode escrever como matriz
2 \times 2 : é sempre uma soma à parte.É por isso que a computação gráfica usa matrizes3\times3 com uma linha a mais — o truque das «coordenadas homogéneas» —, que arruma a translação dentro de uma multiplicação. Está fora do que as Aprendizagens Essenciais pedem, mas é o que faz a técnica funcionar de verdade.
Onde vão parar os dois vetores unitários numa meia-volta? E depois calcula
- As imagens:
e_{1}(1,0) \mapsto (-1,\,0) ee_{2}(0,1) \mapsto (0,\,-1) . R = \begin{bmatrix} -1 & 0\\ 0 & -1 \end{bmatrix} = -I_{2}. - Duas vezes:
R^{2} = \begin{bmatrix} -1 & 0\\ 0 & -1 \end{bmatrix}\begin{bmatrix} -1 & 0\\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix} = I_{2}. - Duas meias-voltas dão a identidade — que é a transformação que não mexe em nada.Uma rotação de
180° é o mesmo que multiplicar o plano inteiro por-1 . É a única rotação que se escreve como um escalar vezes a identidade.
Calcula os dois produtos. Depois vê para onde vão
S R_{90} = \begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix}\begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix} = \begin{bmatrix} 0 & -1\\ -1 & 0 \end{bmatrix}. R_{90} S = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}. - Interpretar o segundo: as colunas dizem que
(1,0) \mapsto (0,1) e(0,1) \mapsto (1,0) . Trocar as coordenadas é refletir na bissetriz dos quadrantes ímpares,y = x . - E o primeiro:
(1,0) \mapsto (0,-1) e(0,1) \mapsto (-1,0) — é a reflexão na bissetriz dos quadrantes pares,y = -x .Duas reflexões diferentes, saídas das mesmas duas transformações, só pela ordem. É o exemplo mais bonito de não comutatividade deste capítulo.
Calcula as imagens de
- As imagens dos unitários são as colunas:
(3,\,1) e(6,\,2) . - São colineares:
(6,\,2) = 2(3,\,1) . Os dois vetores têm a mesma direção. - A imagem de um ponto qualquer. Como
(x,y) = x\,e_{1} + y\,e_{2} ,A\begin{bmatrix} x\\ y \end{bmatrix} = x\begin{bmatrix} 3\\ 1 \end{bmatrix} + y\begin{bmatrix} 6\\ 2 \end{bmatrix} = (x+2y)\begin{bmatrix} 3\\ 1 \end{bmatrix}. - Toda a imagem é um múltiplo de
(3,\,1) : está na reta que passa na origem com essa direção, de equaçãoy = \dfrac{x}{3} .O plano inteiro colapsa numa reta — a transformação esmaga uma dimensão. No laboratório, é o que acontece quando a área passa a ser multiplicada por zero.
Aprofundamento · Matrizes no espaço
Esta secção não é avaliada no Exame. As Aprendizagens Essenciais pedem transformações geométricas no plano, e é aí que o programa acaba. Vale a pena mesmo assim: passar de duas para três dimensões não traz uma ideia nova — traz uma linha e uma coluna a mais — e é em três dimensões que estas matrizes ganham a vida que têm no cinema, nos jogos e na robótica.
- Referir a importância destes procedimentos com matrizes no moderno cinema de animação.
- Incentivar o recurso à tecnologia para analisar vários exemplos e identificar a não comutatividade da multiplicação.
1 · Mais uma dimensão, a mesma ideia
Um ponto do espaço escreve-se como matriz coluna com três entradas, e uma transformação é uma matriz quadrada de ordem
A primeira coluna é a imagem de
Laboratório · A matriz no espaço
arrasta para rodarArrasta no desenho para rodar a vista — isso não muda a matriz, muda só o ponto de onde se olha. Os nove cursores são as nove entradas, arrumados como a matriz. Carrega em achatar e vê o volume ir a
2 · O que muda, e o que não muda
Quase tudo se transporta do plano para o espaço sem alteração. Há uma coisa que muda, e é significativa.
As colunas continuam a ser as imagens dos vetores unitários.
Compor transformações continua a ser multiplicar matrizes, com a segunda à esquerda.
Uma ampliação de razão
No plano, duas rotações comutam sempre: rodar
Descreve a transformação do espaço dada por
- As colunas:
e_{1} \mapsto (1,0,0) ee_{2} \mapsto (0,1,0) — o planoxOy fica intacto. Ee_{3} \mapsto (0,\,0,\,0{,}5) . - A descrição: é um achatamento na direção vertical, que reduz a metade tudo o que for altura.
- O volume. A base não muda e a altura fica a metade, logo o volume fica multiplicado por
0{,}5 .Não é preciso saber o que é um determinante para responder: a matriz é diagonal, e numa matriz diagonal o volume multiplica-se pelo produto das entradas da diagonal — aqui1 \times 1 \times 0{,}5 .
Sejam
Determina a imagem de
- Primeiro
R_{z} , depoisR_{y} . OraR_{z}e_{3} = (0,0,1) — o eixoOz é fixo paraR_{z} . DepoisR_{y}(0,0,1) = (1,\,0,\,0) . - Primeiro
R_{y} , depoisR_{z} . OraR_{y}e_{3} = (1,0,0) , eR_{z}(1,0,0) = (0,\,1,\,0) . - As imagens são
(1,0,0) e(0,1,0) : diferentes.Escolhere_{3} foi o que tornou a conta curta: é fixo para uma das rotações, e por isso um dos passos é imediato. Escolher bem o ponto de teste poupa metade do trabalho.
Python Rodar um cubo em dois eixos, nas duas ordens
from math import cos, sin, radians
def rot_z(g):
t = radians(g)
return [[cos(t), -sin(t), 0], [sin(t), cos(t), 0], [0, 0, 1]]
def rot_y(g):
t = radians(g)
return [[cos(t), 0, sin(t)], [0, 1, 0], [-sin(t), 0, cos(t)]]
def produto(A, B):
return [[sum(A[i][k]*B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]
def aplicar(M, P):
return [round(sum(M[i][k]*P[k] for k in range(3)), 6) for i in range(3)]
P = [0, 0, 1]
print('primeiro z, depois y :', aplicar(produto(rot_y(90), rot_z(90)), P))
print('primeiro y, depois z :', aplicar(produto(rot_z(90), rot_y(90)), P))
# No plano duas rotacoes comutam sempre. No espaco, nao - e este programa
# mostra-o com o mesmo ponto de partida e as duas ordens possiveis.
from math import cos, sin, radians
def rot_z(g): # roda em torno do eixo Oz
t = radians(g)
return [[cos(t), -sin(t), 0], [sin(t), cos(t), 0], [0, 0, 1]]
def rot_y(g): # roda em torno do eixo Oy
t = radians(g)
return [[cos(t), 0, sin(t)], [0, 1, 0], [-sin(t), 0, cos(t)]]
def produto(A, B):
return [[sum(A[i][k]*B[k][j] for k in range(3)) for j in range(3)] for i in range(3)]
def aplicar(M, P):
# o round tira o lixo da virgula flutuante (6e-17 em vez de 0)
return [round(sum(M[i][k]*P[k] for k in range(3)), 6) for i in range(3)]
P = [0, 0, 1]
# a segunda transformacao fica a' ESQUERDA no produto
print('primeiro z, depois y :', aplicar(produto(rot_y(90), rot_z(90)), P))
print('primeiro y, depois z :', aplicar(produto(rot_z(90), rot_y(90)), P))
Saem [1, 0, 0] e [0, 1, 0] — dois sítios diferentes. Troca os
Exercícios propostos
Doze exercícios de aprofundamento. Nenhum sai no Exame — servem para ver que a ideia da secção 3 não depende de haver duas dimensões.
Considera
Escreve a matriz da transformação do espaço que triplica todas as coordenadas.
Determina as imagens de
Um cubo de aresta
Escreve a matriz da projeção do espaço sobre o plano
Sejam
Determina
Determina a imagem do ponto
Um cubo de aresta
Determina o volume da imagem e justifica.
Escreve a matriz da reflexão do espaço em relação ao plano
Sejam
Determina a imagem de
Uma transformação do espaço tem matriz cujas colunas são
Mostra que todo o espaço é transformado em pontos de um mesmo plano.
Escreve a matriz da rotação de um ângulo
Multiplica a matriz pela matriz coluna do ponto. A matriz é diagonal: cada coordenada é tratada à parte.
\begin{bmatrix} 2 & 0 & 0\\ 0 & 3 & 0\\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} 1\\ 2\\ 4 \end{bmatrix} = \begin{bmatrix} 2\\ 6\\ 4 \end{bmatrix}. - A imagem é
P'(2,\,6,\,4) .Uma matriz diagonal estica cada eixo por si. Aqui: o dobro emx , o triplo emy , nada emz .
Onde vão parar
- As imagens dos três unitários são
(3,0,0) ,(0,3,0) e(0,0,3) . A = \begin{bmatrix} 3 & 0 & 0\\ 0 & 3 & 0\\ 0 & 0 & 3 \end{bmatrix} = 3 I_{3}.
As colunas dão as imagens de imediato. Repara no que acontece ao eixo
- As colunas:
e_{1} \mapsto (0,1,0) ,e_{2} \mapsto (-1,0,0) ,e_{3} \mapsto (0,0,1) . - O eixo
Oz fica fixo e o planoxOy roda90° : é a rotação de90° em torno do eixoOz .Reconhece-se o bloco2\times2 da rotação no canto superior esquerdo, com o1 isolado a segurar o eixo que não se mexe.
Cada aresta duplica. E o volume?
- Cada aresta passa de
1 a2 , logo a imagem é um cubo de aresta2 . V = 2^{3} = 8 .No plano a área multiplicava-se pork^{2} ; no espaço o volume multiplica-se pork^{3} . É a mesma ideia, com mais uma dimensão.
Duas colunas ficam como estavam; a terceira anula-se.
- As imagens:
e_{1} \mapsto (1,0,0) ,e_{2} \mapsto (0,1,0) ,e_{3} \mapsto (0,0,0) . P = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 0 \end{bmatrix}. - Todo o espaço é esmagado num plano: o volume passa a zero.É o análogo tridimensional do exercício em que o plano colapsava numa reta. Uma dimensão desaparece — e não há maneira de a recuperar.
Escreve as duas matrizes e multiplica nas duas ordens. Repara em que
R = \begin{bmatrix} 0 & -1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix}, \qquad E = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 2 \end{bmatrix}. ER = RE = \begin{bmatrix} 0 & -1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 2 \end{bmatrix}. - Comutam.Comutam porque atuam em direções separadas: uma só mexe no plano
xOy , a outra só no eixoOz . Assim que duas transformações disputarem as mesmas direções, deixam de comutar.
Multiplica. Depois repara em qual das coordenadas entra no cálculo da primeira.
C\begin{bmatrix} 1\\ 1\\ 1 \end{bmatrix} = \begin{bmatrix} 1+2\\ 1\\ 1 \end{bmatrix} = \begin{bmatrix} 3\\ 1\\ 1 \end{bmatrix}. - A abcissa cresce proporcionalmente à altura: o cisalhamento empurra as camadas de cima na direção
Ox , e o planoz = 0 fica no sítio.É a versão espacial do baralho de cartas empurrado de lado: quanto mais alta a carta, mais longe vai.
Um cisalhamento não estica nada — só escorrega. Pensa no que aconteceu à área no cisalhamento do plano.
- O cisalhamento leva o cubo a um paralelepípedo oblíquo com a mesma base e a mesma altura.
- Como o volume é «área da base
\times altura», e nenhuma das duas mudou,V = 1 . - O volume não muda.O laboratório confirma: com um cisalhamento, o número do «volume fica multiplicado por» mantém-se em
1 , por muito inclinado que o cubo fique.
Refletir nesse plano deixa
- As imagens:
e_{1} \mapsto (1,0,0) ,e_{2} \mapsto (0,1,0) ,e_{3} \mapsto (0,0,-1) . S = \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & -1 \end{bmatrix}. - O volume não muda em valor absoluto, mas a figura vira do avesso.
A imagem de
- Primeiro
R_{z} , depoisR_{x} .R_{z}e_{1} = (0,1,0) , eR_{x}(0,1,0) = (0,\,0,\,1) . - Primeiro
R_{x} , depoisR_{z} .R_{x}e_{1} = (1,0,0) , eR_{z}(1,0,0) = (0,\,1,\,0) . - As imagens são diferentes: as rotações no espaço não comutam.No plano, duas rotações comutam sempre — os ângulos somam-se. No espaço deixam de comutar, porque cada uma tem o seu eixo. Experimenta com um livro fechado: roda-o
90° nas duas ordens e compara.
Compara as três colunas. Quantas direções independentes há entre elas?
- As colunas: a segunda é o dobro da primeira,
(2,0,0) = 2(1,0,0) . Só há duas direções distintas:(1,0,0) e(0,0,1) . - A imagem de um ponto qualquer:
A\begin{bmatrix} x\\ y\\ z \end{bmatrix} = x(1,0,0) + y(2,0,0) + z(0,0,1) = (x+2y)\,(1,0,0) + z\,(0,0,1). - Toda a imagem é combinação de
(1,0,0) e(0,0,1) : está no planoxOz , de equaçãoy = 0 .Uma dimensão foi esmagada, e o volume passa a zero. No laboratório, é o que se vê quando o cubo fica achatado numa folha.
O eixo
- O que não se mexe:
e_{3}(0,0,1) \mapsto (0,0,1) , que dá a terceira coluna. - No plano
xOy :e_{1} \mapsto (\cos{\theta},\ \operatorname{sen}{\theta},\ 0) ee_{2} \mapsto (-\operatorname{sen}{\theta},\ \cos{\theta},\ 0) . R_{z}({\theta}) = \begin{bmatrix} \cos{\theta} & -\operatorname{sen}{\theta} & 0\\ \operatorname{sen}{\theta} & \cos{\theta} & 0\\ 0 & 0 & 1 \end{bmatrix}. - Com
{\theta} = 90° recupera-se a matriz do exercício 3.A estrutura repete-se para os outros dois eixos: o bloco da rotação plana nas duas coordenadas que se mexem, e um1 isolado na que fica parada.
Python e pensamento computacional
Três problemas que só existem porque a máquina existe. Não são traduções de contas para código: são perguntas que a folha de papel não sabe responder — qual é o melhor
- Utilizar a tecnologia para resolver problemas que envolvam funções exponenciais e logarítmicas, incluindo equações sem solução algébrica.
- Explorar a utilização da programação na determinação aproximada de zeros, de extremos e de imagens por uma função inversa.
Os programas correm no Python Math Studio, a consola que já vive nesta página. Em cada bloco há o botão ▶ Correr no compilador — a consola abre com o programa escrito, basta carregar em Run Code. O botão 💬 Explicar o código troca o programa pela versão comentada linha a linha.
Nenhum destes três problemas se resolve com uma fórmula. Todos se resolvem com um algoritmo — e todos têm um caso de fronteira que o faz falhar se não for previsto. É esse caso de fronteira o verdadeiro conteúdo de cada problema.
Consola de Python
corre no navegadorprograma inserido no editor — carrega em Run CodeComo usar
- Num bloco de código desta página, carrega em ▶ Correr no compilador — a consola abre-se com o programa já escrito.
- Carrega em Run Code e lê a saída.
- Muda os valores e volta a correr — é assim que se explora.
from math import * · log, exp, e
numpy · malhas e vetores
sympy · contas exatas
matplotlib · gráficos
Corre tudo dentro do teu navegador: nada sai do computador, e funciona sem ligação à Internet.
A máquina confirma resultados; nos itens de construção o exame exige a resolução analítica justificada.
1 · O melhor h não é o mais pequeno
DecomposiçãoReconhecimento de padrõesErros de vírgula flutuante
A derivada é um limite:
A segunda é a média das razões incrementais dos dois lados, e os erros dos dois lados cancelam-se em parte. Por isso é a que se usa.
O desafio. Diminuir
from math import log
def f(x):
return log(x) / x
def D(f, x, h): # diferenca centrada
return (f(x + h) - f(x - h)) / (2*h)
# f'(x) = (1 - ln x) / x**2 -> f'(1) = 1. Qual e' o melhor h?
print(' h D(f,1,h) erro')
for k in range(1, 15):
h = 10.0**(-k)
d = D(f, 1, h)
print('1e-%-2d %18.14f %.3e' % (k, d, abs(d - 1)))
from math import log
def f(x):
return log(x) / x
# A definicao diz f'(x) = lim (f(x+h) - f(x)) / h.
# Na maquina nao ha limites: ha' um h pequeno mas FIXO.
# A diferenca CENTRADA usa os dois lados e engana-se muito menos.
def D(f, x, h):
return (f(x + h) - f(x - h)) / (2*h)
# Sabemos a resposta exata: f'(x) = (1 - ln x)/x**2, logo f'(1) = 1.
# Isso deixa-nos MEDIR o erro em vez de o adivinhar.
print(' h D(f,1,h) erro')
for k in range(1, 15):
h = 10.0**(-k) # h = 0.1, 0.01, 0.001, ...
d = D(f, 1, h)
# %.3e escreve em notacao cientifica: e' assim que se ve' uma ordem de grandeza
print('1e-%-2d %18.14f %.3e' % (k, d, abs(d - 1)))
O erro desce, atinge um mínimo por volta de
Segunda parte. Com o
from math import log, e
H = 1e-6 # o h que ganhou a corrida acima
EPS = 1e-12 # criterio de paragem da bissecao
def f(x):
return log(x) / x
def D(x):
return (f(x + H) - f(x - H)) / (2*H)
def varre(a, b, n):
"""Percorre a malha e devolve os intervalos onde D muda de sinal."""
passo = (b - a) / n
trocas = []
x0, d0 = a, D(a)
for i in range(1, n + 1):
x1 = a + i * passo
d1 = D(x1)
if (d0 < 0) != (d1 < 0): # mudou de sinal: ha' extremo entre os dois
trocas.append((x0, x1, d0))
x0, d0 = x1, d1
return trocas
def aperta(x0, x1, d0):
"""Bissecao sobre a derivada. Termina sempre: o intervalo e' sempre metade."""
while x1 - x0 > EPS * (1 + abs(x0)):
m = (x0 + x1) / 2
dm = D(m)
if dm == 0:
return m
if (dm < 0) == (d0 < 0):
x0, d0 = m, dm
else:
x1 = m
return (x0 + x1) / 2
for (x0, x1, d0) in varre(0.5, 8, 300):
c = aperta(x0, x1, d0)
tipo = 'maximo' if d0 > 0 else 'minimo'
print('%s relativo em x = %.12f f(x) = %.12f' % (tipo, c, f(c)))
print('exato: e = %.12f 1/e = %.12f' % (e, 1/e))
from math import log, e
H = 1e-6 # h fixo: nem grande de mais (erro de aproximacao),
EPS = 1e-12 # nem pequeno de mais (erro de arredondamento)
def f(x):
return log(x) / x
def D(x): # derivada aproximada
return (f(x + H) - f(x - H)) / (2*H)
# PASSO 1 - VARRER. Nao procuramos o extremo: procuramos onde a derivada
# TROCA DE SINAL. E' o mesmo criterio do quadro de sinais feito a mao.
def varre(a, b, n):
passo = (b - a) / n
trocas = []
x0, d0 = a, D(a)
for i in range(1, n + 1):
x1 = a + i * passo
d1 = D(x1)
# (d0 < 0) != (d1 < 0) e' o teste de troca de sinal que nao rebenta
# quando um dos valores e' exatamente zero
if (d0 < 0) != (d1 < 0):
trocas.append((x0, x1, d0))
x0, d0 = x1, d1
return trocas
# PASSO 2 - APERTAR. Bissecao: parte-se ao meio ate' o intervalo ser minusculo.
def aperta(x0, x1, d0):
while x1 - x0 > EPS * (1 + abs(x0)): # criterio RELATIVO: funciona para
m = (x0 + x1) / 2 # numeros grandes e pequenos
dm = D(m)
if dm == 0:
return m
if (dm < 0) == (d0 < 0): # o zero esta' na metade da direita
x0, d0 = m, dm
else: # ... ou na da esquerda
x1 = m
return (x0 + x1) / 2
# PASSO 3 - CLASSIFICAR. Se a derivada passa de + a -, e' maximo; ao contrario,
# e' minimo. Nao e' preciso mais nada: e' a leitura do quadro de sinais.
for (x0, x1, d0) in varre(0.5, 8, 300):
c = aperta(x0, x1, d0)
tipo = 'maximo' if d0 > 0 else 'minimo'
print('%s relativo em x = %.12f f(x) = %.12f' % (tipo, c, f(c)))
print('exato: e = %.12f 1/e = %.12f' % (e, 1/e))
O programa devolve
Casos de fronteira. (i) O teste (d0 < 0) != (d1 < 0) em vez de d0 * d1 < 0 — o produto dá eps * (1 + abs(x)) — um critério absoluto como x1 - x0 > 1e-12 nunca terminaria para valores da ordem de while dm != 0 podia não terminar nunca.
Análise Cinco perguntas críticas
- O varrimento avalia
f em2n pontos: éO(n) . A bisseção divide o intervalo ao meio de cada vez, logo fazO(\log_{2}(1/\varepsilon)) passos. Qual das duas partes domina o tempo total quando\varepsilon = 10^{-12} en = 300 ? - Se aumentares
n para3000 , que erro deixas de cometer? E que erro não desaparece por mais que aumentesn ? - O que acontece se a malha for grosseira e
f tiver dois extremos muito próximos dentro do mesmo intervalo da malha? O algoritmo dá erro, ou dá uma resposta errada em silêncio? Qual dos dois é pior? - Experimenta
H = 10^{-14} na segunda parte. Quantos extremos falsos aparecem? Explica-os com o gráfico em V da primeira parte. - Numa função com um patamar —
f quase constante num intervalo — a derivada aproximada oscila em torno de zero por puro ruído. Que teste acrescentarias para não declarar um extremo em cada oscilação?
2 · Inverter uma função que não se sabe inverter
AbstraçãoOtimização algorítmicaDerivada nulaSeparação de ramos
Uma função estritamente monótona num intervalo é injetiva, logo tem inversa (secção 5). Calcular
O método de Newton sai diretamente da secção R2. A tangente ao gráfico de
Newton é isto e mais nada: trocar a curva pela sua tangente e ir onde a tangente vai.
O desafio. Inverter
| Sinal de | − | + | |
|---|---|---|---|
| Variação de | ↘ | ↗ |
Logo, para
from math import exp, e
def f(x): # queremos inverter y = x e^x
return x * exp(x)
def df(x): # regra do produto
return (1 + x) * exp(x)
def newton_seguro(y, a, b, eps=1e-14, maxit=80):
"""Resolve f(x) = y em [a, b]. Newton quando pode, bissecao quando deve."""
fa = f(a) - y
fb = f(b) - y
if (fa < 0) == (fb < 0):
raise ValueError('sem mudanca de sinal em [%g, %g]' % (a, b))
x = a
nn = nb = 0 # quantos passos de cada tipo
for n in range(1, maxit + 1):
d = df(x)
xn = None
if d != 0: # derivada nula: Newton nao serve
cand = x - (f(x) - y) / d
if a < cand < b: # saiu do intervalo: nao serve
xn = cand
if xn is None:
xn = (a + b) / 2 # rede de seguranca
nb += 1
else:
nn += 1
fn = f(xn) - y
if (fn < 0) == (fa < 0): # aperta o intervalo
a, fa = xn, fn
else:
b = xn
if abs(xn - x) <= eps * (1 + abs(xn)):
return xn, nn, nb
x = xn
return x, nn, nb
y = -0.2 # -1/e < y < 0: DOIS ramos
print('minimo de f em x = -1, f(-1) = -1/e = %.12f' % (-1/e))
for nome, a, b in (('direito', -1 + 1e-9, 20), ('esquerdo', -10, -1 - 1e-9)):
x, nn, nb = newton_seguro(y, a, b)
print('ramo %-9s x = %.12f f(x) = %.12f Newton: %d bissecao: %d'
% (nome, x, f(x), nn, nb))
from math import exp, e
# f(x) = x e^x NAO e' injetiva em R: f'(x) = (1+x)e^x anula-se em x = -1.
# Ha' um minimo em (-1, -1/e). Logo, para -1/e < y < 0 ha' DUAS solucoes.
# Inverter exige primeiro SEPARAR OS RAMOS.
def f(x):
return x * exp(x)
def df(x):
return (1 + x) * exp(x) # (uv)' = u'v + uv'
def newton_seguro(y, a, b, eps=1e-14, maxit=80):
fa = f(a) - y
fb = f(b) - y
# Sem mudanca de sinal nao ha' garantia de solucao: mais vale parar.
if (fa < 0) == (fb < 0):
raise ValueError('sem mudanca de sinal em [%g, %g]' % (a, b))
x = a
nn = nb = 0
for n in range(1, maxit + 1):
d = df(x)
xn = None
# NEWTON = onde a tangente corta Ox: x - (f(x) - y)/f'(x)
if d != 0:
cand = x - (f(x) - y) / d
if a < cand < b: # se a tangente atira para fora, ignoramos
xn = cand
if xn is None:
xn = (a + b) / 2 # ... e damos um passo de bissecao
nb += 1
else:
nn += 1
# o intervalo [a, b] vai encolhendo: e' isso que impede a fuga
fn = f(xn) - y
if (fn < 0) == (fa < 0):
a, fa = xn, fn
else:
b = xn
if abs(xn - x) <= eps * (1 + abs(xn)): # criterio RELATIVO
return xn, nn, nb
x = xn
return x, nn, nb # maxit trava o ciclo infinito
y = -0.2
print('minimo de f em x = -1, f(-1) = -1/e = %.12f' % (-1/e))
# afastamo-nos de -1 com 1e-9: e' la' que f'(x) = 0 e Newton explodiria
for nome, a, b in (('direito', -1 + 1e-9, 20), ('esquerdo', -10, -1 - 1e-9)):
x, nn, nb = newton_seguro(y, a, b)
print('ramo %-9s x = %.12f f(x) = %.12f Newton: %d bissecao: %d'
% (nome, x, f(x), nn, nb))
Para
Análise Cinco perguntas críticas
- A bisseção ganha um bit de precisão por iteração:
O(\log_{2}(1/\varepsilon)) , cerca de50 passos para10^{-15} . Newton duplica o número de algarismos corretos de cada vez. Conta as iterações dos dois no mesmo problema e confirma a diferença. - Porque é que o programa começa em
-1 + 10^{-9} e não em-1 ? O que imprimedf(-1)? - Retira a rede de segurança (fica só Newton, sem bisseção) e arranca em
x_0 = -0{,}999 . Para onde vai o primeiro iterado? E porque é que o contadornbé tão alto no ramo esquerdo? - O critério de paragem compara
|x_{n+1} - x_n| , não|f(x_n) - y| . Dá um exemplo de função em que estes dois critérios discordam — um diz «cheguei» e o outro não. - Este problema tem nome: a inversa de
x e^{x} chama-se função W de Lambert, e os seus dois ramos são exatamente os dois que separaste. Onde é que a escolha do ramo tem de ser feita por quem escreve o programa, e não pelo programa?
3 · A mesma equação, duas escritas, dois destinos
Reconhecimento de padrõesConvergênciaOtimização algorítmicaCiclos infinitos
A equação
São algebricamente equivalentes. Numericamente, comportam-se ao contrário uma da outra.
O desafio. Se
Uma converge, a outra foge. Escreve um iterador que sobreviva às duas: tem de detetar a divergência (o valor explode, ou sai do domínio do logaritmo) e tem de ter um travão de iterações — sem ele, o segundo caso nunca termina.
from math import exp, log
# Equacao: e^(-x) = x. Nao se resolve com as regras da seccao 3.
def g1(x): return exp(-x) # x = e^(-x) -> g1'(x) = -e^(-x)
def g2(x): return -log(x) # x = -ln x -> g2'(x) = -1/x
def ponto_fixo(g, x0, eps=1e-13, maxit=300):
"""Iteracao x <- g(x). Devolve (raiz, iteracoes) ou (None, iteracoes)."""
x = x0
for n in range(1, maxit + 1):
try:
xn = g(x)
except (ValueError, OverflowError):
return None, n # saiu do dominio: divergiu
if abs(xn) > 1e12:
return None, n # explodiu: divergiu
if abs(xn - x) <= eps * (1 + abs(xn)):
return xn, n
x = xn
return None, maxit # nao convergiu a tempo
def newton(x0, eps=1e-13, maxit=300):
x = x0
for n in range(1, maxit + 1):
fx = x - exp(-x)
d = 1 + exp(-x) # f'(x) = 1 + e^(-x) > 0 sempre
xn = x - fx / d
if abs(xn - x) <= eps * (1 + abs(xn)):
return xn, n
x = xn
return None, maxit
r1, n1 = ponto_fixo(g1, 0.5)
r2, n2 = ponto_fixo(g2, 0.5)
r3, n3 = newton(0.5)
print('x = e^(-x) ->', r1, 'em', n1, 'iteracoes')
print('x = -ln x ->', r2, 'em', n2, 'iteracoes')
print('Newton ->', r3, 'em', n3, 'iteracoes')
# Porque? Porque o erro e' multiplicado por |g'(x*)| em cada passo.
x = r3
print('|g1\'(x*)| =', abs(-exp(-x)), ' < 1 -> converge')
print('|g2\'(x*)| =', abs(-1/x), ' > 1 -> diverge')
from math import exp, log
# A MESMA equacao, escrita de duas maneiras algebricamente equivalentes.
# Uma converge; a outra nao. A algebra nao distingue: o calculo distingue.
def g1(x): return exp(-x) # de e^(-x) = x tira-se x = e^(-x)
def g2(x): return -log(x) # ... ou entao -x = ln x, x = -ln x
def ponto_fixo(g, x0, eps=1e-13, maxit=300):
x = x0
for n in range(1, maxit + 1):
# try/except apanha o caso em que g2 recebe um x negativo:
# log(x) rebenta, e isso E' informacao - a sucessao saiu do dominio
try:
xn = g(x)
except (ValueError, OverflowError):
return None, n
if abs(xn) > 1e12: # cresceu sem controlo
return None, n
if abs(xn - x) <= eps * (1 + abs(xn)): # dois termos ja' indistinguiveis
return xn, n
x = xn
return None, maxit # maxit: sem isto, um ciclo destes nao acaba
def newton(x0, eps=1e-13, maxit=300):
x = x0
for n in range(1, maxit + 1):
fx = x - exp(-x) # queremos o zero de f
d = 1 + exp(-x) # f'(x) = 1 + e^(-x)
xn = x - fx / d # onde a tangente corta Ox
if abs(xn - x) <= eps * (1 + abs(xn)):
return xn, n
x = xn
return None, maxit
r1, n1 = ponto_fixo(g1, 0.5)
r2, n2 = ponto_fixo(g2, 0.5)
r3, n3 = newton(0.5)
print('x = e^(-x) ->', r1, 'em', n1, 'iteracoes')
print('x = -ln x ->', r2, 'em', n2, 'iteracoes')
print('Newton ->', r3, 'em', n3, 'iteracoes')
# A explicacao esta' na derivada de g no ponto fixo: o erro fica multiplicado
# por |g'(x*)| de cada vez. Menor do que 1 encolhe; maior do que 1 cresce.
x = r3
print('|g1\'(x*)| =', abs(-exp(-x)), ' < 1 -> converge')
print('|g2\'(x*)| =', abs(-1/x), ' > 1 -> diverge')
A primeira escrita chega a None; Newton chega ao mesmo valor em quatro ou cinco. A diferença não está na equação — está na forma como a escrevemos.
Convergência linear e convergência quadrática. No ponto fixo o erro fica multiplicado por
Análise Cinco perguntas críticas
- Imprime
|x_{n+1} - x^{*}| em cada passo da primeira iteração e calcula o quociente entre erros consecutivos. Aproxima-se de0{,}567 ? Porquê? - Faz o mesmo com Newton. O quociente
|e_{n+1}|/|e_n|^{2} estabiliza — em que valor? - A segunda escrita diverge a partir de
x_0 = 0{,}5 . Existe algumx_0 a partir do qual ela convirja? (Cuidado: o ponto fixo é o mesmo. O que muda?) - O travão
maxité o que separa um programa de um bloqueio. Que outra condição de paragem acrescentarias para detetar cedo que a sucessão está a afastar-se, em vez de esperar pelas 300 iterações? - Aceleração de Aitken. Com três iterados consecutivos,
\tilde{x} = x_0 - \dfrac{(x_1 - x_0)^{2}}{x_2 - 2x_1 + x_0} costuma estar muito mais perto dex^{*} do quex_2 . Implementa-o sobre a primeira iteração e conta quantas iterações poupas. Que caso de fronteira tens de tratar no denominador?
Teste rápido
Dez questões de resposta imediata, com correção e explicação. Serve para verificares se podes avançar — ou se convém voltar atrás.
Formulário essencial e referências
Tudo o que este capítulo usa, numa página. As duas caixas do fim — a que diz o que não vale e a lista de verificação — são as que evitam mais erros.
Matriz e tipo
Uma matriz do tipo
Casos particulares
Quadrada de ordem
Igualdade
Adição e escalar
Exigem o mesmo tipo. A adição é comutativa e associativa, tem elemento neutro (matriz nula) e simétrico.
Produto
Só existe quando as colunas da primeira são tantas como as linhas da segunda.
Propriedades do produto
O que não vale
Transformações do plano
Translação, por soma:
As colunas são as imagens de
Composição
A segunda transformação fica à esquerda.
Antes de dar uma resolução por fechada
escreve os tipos antes de multiplicar — metade dos erros são produtos que não existem;
o resultado de
Referências
Aprendizagens Essenciais · Matemática A · 12.º ano (2023), tema opcional «Matrizes». Arthur Cayley, A Memoir on the Theory of Matrices (1858) — onde as matrizes deixaram de ser tabelas e passaram a ter álgebra própria. James Joseph Sylvester — a quem se deve o nome matriz, em 1850.
Exercícios globais
Os temas opcionais nunca foram avaliados em Exame Nacional — não há, por isso, itens de exame para este capítulo. O que se segue são exercícios originais, escritos no formato e no grau de exigência de um item, arrumados por tema. Cada um traz sugestão e resolução passo a passo.
Exercícios globais · Conceito e operações
Cinco exercícios sobre tipos, operações e casos de impossibilidade. Antes de multiplicar, escreve os tipos.
Sejam
a) Calcula
Sejam
Qual dos produtos seguintes não existe?
- (A)
AB - (B)
BC - (C)
CA - (D)
AC
Determina a matriz
Uma empresa tem duas fábricas,
com as colunas por ordem
Determina, por multiplicação de matrizes, o lucro diário de cada fábrica.
Seja
a) Calcula
Na alínea a), posição a posição. Na b), duas contas independentes — não se reaproveita nada.
- a)
2A = \begin{bmatrix} 2 & -4\\ 6 & 0 \end{bmatrix} , logo2A-B = \begin{bmatrix} -2 & -5\\ 7 & -2 \end{bmatrix}. - b)
AB = \begin{bmatrix} 6 & -3\\ 12 & 3 \end{bmatrix}, \qquad BA = \begin{bmatrix} 7 & -8\\ 5 & 2 \end{bmatrix}. - São diferentes, como era de esperar.Confirma sempre o tipo do resultado:
(2\times2)(2\times2) = 2\times2 . Um resultado com outro tipo é sinal de erro na conta.
Em cada um, compara as colunas da primeira com as linhas da segunda.
- (A)
(3\times 2)(2\times 5) :2 = 2 ✓, dá3\times5 . - (B)
(2\times 5)(5\times 3) :5 = 5 ✓, dá2\times3 . - (C)
(5\times 3)(3\times 2) :3 = 3 ✓, dá5\times2 . - (D)
(3\times 2)(5\times 3) :2 \neq 5 ✗. Não existe.Repara queA ,B eC encadeiam em ciclo —AB ,BC eCA existem todos —, mas saltar um elo parte a cadeia.
Isola
3X = \begin{bmatrix} 4 & 7\\ 9 & 2 \end{bmatrix} + \begin{bmatrix} 2 & 1\\ 0 & -4 \end{bmatrix} = \begin{bmatrix} 6 & 8\\ 9 & -2 \end{bmatrix}. X = \begin{bmatrix} 2 & \frac{8}{3}\\ 3 & -\frac{2}{3} \end{bmatrix}. Só se pode resolver assim porque a operação envolvida é a adição. Numa equação com produto de matrizes não há divisão que se aplique.
Os lucros vão numa matriz coluna, para o produto
- A matriz dos lucros:
L = \begin{bmatrix} 2\\ 5\\ 1 \end{bmatrix} , do tipo3\times1 . - O tipo encaixa:
(2\times3)(3\times1) = 2\times1 . ✓ PL = \begin{bmatrix} 120(2)+80(5)+200(1)\\ 150(2)+60(5)+180(1) \end{bmatrix} = \begin{bmatrix} 840\\ 780 \end{bmatrix}. - A fábrica
F_{1} lucra840 € por dia e aF_{2} lucra780 €.Os artigos desapareceram no produto — é sempre a dimensão comum que se soma e se perde. Se o resultado ainda tivesse três colunas, a conta estava errada.
Calcula as duas primeiras potências e olha para a posição
- a)
A^{2} = \begin{bmatrix} 1 & 2\\ 0 & 1 \end{bmatrix}, \qquad A^{3} = \begin{bmatrix} 1 & 3\\ 0 & 1 \end{bmatrix}. - b) A conjetura:
A^{n} = \begin{bmatrix} 1 & n\\ 0 & 1 \end{bmatrix} . - Verificação para
n = 4 :A^{4} = A^{3}A = \begin{bmatrix} 1 & 4\\ 0 & 1 \end{bmatrix} . ✓Geometricamente,A é um cisalhamento de1 ; aplicá-lon vezes é um cisalhamento den . O padrão não é coincidência da conta — é o que a transformação faz.
Exercícios globais · Transformações do plano
Cinco exercícios de transformações. Em todos, a pergunta útil é a mesma: para onde vão o
Escreve a matriz de cada transformação do plano.
a) A que triplica as ordenadas e mantém as abcissas.b) A rotação de
Uma transformação do plano tem matriz
Qual é a imagem do ponto
- (A)
(3,\,-2) - (B)
(-3,\,2) - (C)
(2,\,-3) - (D)
(-2,\,3)
Considera a ampliação
a) Determina a matriz de «primeiro
Um triângulo tem vértices
Aplica-se-lhe primeiro a reflexão no eixo
a) Determina a matriz da composição.b) Determina os vértices da imagem.
Um quadrado de área
Determina a área da imagem, usando as imagens de
Em cada uma, pergunta para onde vão
- a)
e_{1} \mapsto (1,0) ee_{2} \mapsto (0,3) :\begin{bmatrix} 1 & 0\\ 0 & 3 \end{bmatrix}. - b) Rodar
270° no sentido positivo é o mesmo que rodar90° no sentido negativo:e_{1} \mapsto (0,-1) ee_{2} \mapsto (1,0) .\begin{bmatrix} 0 & 1\\ -1 & 0 \end{bmatrix}. - Confere pela fórmula geral: com
{\theta} = 270° ,\cos{\theta} = 0 e\operatorname{sen}{\theta} = -1 . ✓Reduzir270° a-90° poupa a conta com os valores trigonométricos — mas vale sempre a pena confirmar com a fórmula.
Multiplica a matriz pela coluna
\begin{bmatrix} 0 & 1\\ -1 & 0 \end{bmatrix}\begin{bmatrix} 2\\ 3 \end{bmatrix} = \begin{bmatrix} 0(2)+1(3)\\ -1(2)+0(3) \end{bmatrix} = \begin{bmatrix} 3\\ -2 \end{bmatrix}. - É uma rotação de
-90° , e de facto leva o primeiro quadrante ao quarto.As opções (C) e (D) são as reflexões nos eixos — os erros que aparecem quando se trocam as posições da matriz.
Calcula os dois produtos. Repara em que
- a)
EC = \begin{bmatrix} 3 & 0\\ 0 & 3 \end{bmatrix}\begin{bmatrix} 1 & 2\\ 0 & 1 \end{bmatrix} = \begin{bmatrix} 3 & 6\\ 0 & 3 \end{bmatrix}. - b)
CE = \begin{bmatrix} 1 & 2\\ 0 & 1 \end{bmatrix}\begin{bmatrix} 3 & 0\\ 0 & 3 \end{bmatrix} = \begin{bmatrix} 3 & 6\\ 0 & 3 \end{bmatrix} = EC. - Porquê. Como
E = 3I_{2} , multiplicar porE é multiplicar por um escalar — e os escalares atravessam qualquer produto:(3I)C = 3C = C(3I) .É a exceção que confirma a regra: os únicos casos fáceis de comutatividade são a identidade e os seus múltiplos. Uma ampliação uniforme não «disputa» direção nenhuma com a outra transformação.
A segunda transformação fica à esquerda no produto. Depois aplica a matriz composta aos três vértices.
- As matrizes:
S = \begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix} eR = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix} . - a) Primeiro
S , depoisR , logo a matriz éRS :RS = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}\begin{bmatrix} 1 & 0\\ 0 & -1 \end{bmatrix} = \begin{bmatrix} 0 & 1\\ 1 & 0 \end{bmatrix}. - b) A matriz troca as coordenadas:
A'(0,0) ,B'(0,\,2) ,C'(1,\,0) . - A composta é, afinal, a reflexão na bissetriz dos quadrantes ímpares.Duas transformações que invertem a orientação — uma reflexão e… não: a rotação conserva-a. Uma reflexão seguida de rotação inverte, e o resultado é outra reflexão.
A imagem do quadrado unitário é o paralelogramo construído sobre as imagens de
- As imagens dos unitários, que são as colunas:
e_{1} \mapsto (3,\,0) ee_{2} \mapsto (1,\,2) . - O paralelogramo construído sobre esses dois vetores tem base
3 , sobre o eixoOx , e altura2 — a ordenada do segundo vetor. A_{\text{imagem}} = 3 \times 2 = 6. - A área ficou multiplicada por
6 .No laboratório da secção 3, este é o número que aparece em «a área fica multiplicada por». Aqui obteve-se pela geometria, sem precisar de nenhuma fórmula por decorar.