Algoritmos e Programação I Material disponível para compra: e-book apostila . Consulte outras formas de colaboração aqui !
5.2 Vetores
O uso de arrays é uma das formas mais adequadas para fazermos a modelagem computacional de vetores . Entretanto, devemos ficar atentos que vetores e arranjos não são equivalentes . Embora, a soma/subtração e multiplicação por escalar são similares, a multiplicação e potenciação envolvendo vetores não estão definidas, mas para arranjos são operações elemento-a-elemento.
No que segue, vamos assumir que a biblioteca NumPy está importada, i.e.
Exemplo 5.2.1.
Podemos alocar os vetores
𝒗 = ( 1,0 , − 2 ) ,
(5.10)
𝒘 = ( 2 , − 1,3 ) ,
(5.11)
como arrays do NumPy
1 v = np . array ([1, 0, -2])
2 w = np . array ([2, -1, 3])
A soma dos vetores é uma operação elemento-a-elemento
𝒗 + 𝒘 = ( 1,0 , − 2 ) + ( 2 , − 1,3 )
(5.12)
= ( 1 + 2,0 + ( − 1 ) , − 2 + 3 )
(5.13)
= ( 3 , − 1,1 )
(5.14)
e a dos arrays é equivalente
A subtração dos vetores também é uma operação elemento-a-elemento
𝒗 − 𝒘 = ( 1,0 , − 2 ) − ( 2 , − 1,3 )
(5.15)
= ( 1 − 2,0 − ( − 1 ) , − 2 − 3 )
(5.16)
= ( − 1,1 , − 5 )
(5.17)
e a dos arrays é equivalente
Ainda, a multiplicação por escalar
2 𝒗 = 2 ( 1,0 , − 2 )
(5.18)
= ( 2 ⋅ 1,2 ⋅ 0,2 ⋅ ( − 2 ) )
(5.19)
= ( 2,0 , − 4 )
(5.20)
também é feita elemento-a-elemento, assim como com arrays
Agora, para vetores, a multiplicação 𝒗 𝒘 , divisão 𝒗 / 𝒘 , potenciação 𝒗 2 não são operações definidas. Diferentemente, para arranjos são operações elemento-a-elemento
array ([ 0.5, -0., -0.66666667])
5.2.1 Funções vetoriais
Exemplo 5.2.2.(Função vetorial)
A implementação da função vetorial 𝒇 : ℝ 3 → ℝ 3
𝒇 ( 𝒙 ) = ( x 1 2 + sin ( x 1 ) , x 2 2 + sin ( x 2 ) , x 3 2 + sin ( x 3 ) )
(5.21)
para 𝒙 = ( x 1 , x 2 , x 3 ) ∈ ℝ 3 , pode ser feita da seguinte forma
1 import numpy as np
2
3 def f ( x ):
4 return x **2 + np . sin ( x )
5
6
7 x = np . array ([0, np . pi , np . pi /2])
8 print ( f 'y = {f(x)}' )
5.2.2 Produto interno
O produto interno (ou, produto escalar) é a operação entre vetores 𝒗 , 𝒘 ∈ ℝ n definida por
𝒗 ⋅ 𝒘 := v 1 w 1 + v 2 w 2 + ⋯ + v n w n .
(5.22)
A função numpy.dot computa o produto interno dos arrays .
Exemplo 5.2.3.
Consideramos os vetores
𝒗 = ( 1,0 , − 2 ) ,
(5.23)
𝒘 = ( 2 , − 1,3 ) .
(5.24)
O produto interno desses vetores é
𝒗 ⋅ 𝒘 = v 1 w 1 + v 2 w 2 + v 3 w 3
(5.25)
= 1 ⋅ 2 + 0 ⋅ ( − 1 ) + ( − 2 ) ⋅ 3
(5.26)
= 2 + 0 − 6 = − 4 .
(5.27)
Usando arrays , temos
1 v = np . array ([1, 0, -2])
2 w = np . array ([2, -1, 3])
3 np . sum ( v * w )
5.2.3 Norma de vetores
A norma L 2 de um vetor 𝒗 ∈ ℝ n é definida por
‖ 𝒗 ‖ := v 1 2 + v 2 2 + ⋯ + v n 2
(5.28)
Para um array , o submódulo de álgebra linear numpy.linalg contém a função numpy.linalg.norm para a computação dessa norma.
Exemplo 5.2.4.
A norma do vetor 𝒗 = ( 3,0 , − 4 ) é
‖ 𝒗 ‖ = v 1 2 + v 2 2 + v 3 2
(5.29)
= 3 2 + 0 2 + ( − 4 ) 2
(5.30)
= 9 + 0 + 16
(5.31)
= 25 = 5 .
(5.32)
Usando o módulo numpy.linalg , obtemos
1 import numpy as np
2 import numpy . linalg as npla
3 v = np . array ([3, 0, -4])
4 np . sqrt ( np . dot ( v , v ))
5.2.4 Produto vetorial
O produto vetorial entre dois vetores 𝒗 , 𝒘 ∈ ℝ 3 é definido por
𝒗 × 𝒘 := | 𝒊 𝒋 𝒌 v 1 v 2 v 3 w 1 w 2 w 3 |
(5.33)
= | v 2 v 3 w 2 w 3 | 𝒊
(5.34)
− | v 1 v 3 w 1 w 3 | 𝒋
(5.35)
+ | v 1 v 2 w 1 w 2 | 𝒌
(5.36)
A função numpy.cross computa o produto vetorial entre arrays (unidimensionais de 3 elementos).
Exemplo 5.2.5.
O produto vetorial entre os vetores 𝒗 = ( 1 , − 2,1 ) e 𝒘 = ( 0,2 , − 1 ) é
𝒗 × 𝒘 = | 𝒊 𝒋 𝒌 1 − 2 1 0 2 − 1 |
(5.38)
= 0 𝒊 + 𝒋 + 2 𝒌
(5.39)
= ( 0,1,2 ) .
(5.40)
Com o NumPy , temos
1 v = np . array ([1, -2, 1])
2 w = np . array ([0, 2, -1])
3 np . cross ( v , w )
5.2.5 Exercícios
E. 5.2.1.
Complete as lacunas.
a)
Usualmente, vetores são computacionalmente modelados como numpy.array .
b)
O produto interno de dois vetores alocados como arrays pode ser computado com o método numpy.dot .
c)
Resposta
E. 5.2.2.
Considere os seguintes vetores
𝒖 = ( 2 , − 1,1 ) ,
(5.41)
𝒗 = ( 1 , − 3,2 ) ,
(5.42)
𝒘 = ( − 2 , − 1 , − 3 ) .
(5.43)
Usando arrays do NumPy , compute:
a)
b)
c)
d)
Resposta
Dica: use a função n p . d o t ( ) e verifique as computações calculando os resultados esperados.
E. 5.2.3.
Considere os seguintes vetores
𝒖 = ( 2 , − 1,1 ) ,
(5.44)
𝒗 = ( 1 , − 3,2 ) ,
(5.45)
𝒘 = ( − 2 , − 1 , − 3 ) .
(5.46)
Usando arrays do NumPy , compute:
a)
b)
c)
Resposta
Dica: use a função numpy.linalg.norm e verifique as computações calculando os resultados esperados.
E. 5.2.4.
Dados vetores 𝒖 e 𝒗 , temos que
𝒖 ⋅ 𝒗 = ‖ 𝒖 ‖ ‖ 𝒗 ‖ cos θ ,
(5.47)
onde θ é o ângulo entre esses vetores. Implemente uma função que recebe dois vetores e retorna o ângulo entre eles. Teste seu código para diferentes vetores.
Resposta
1 import numpy as np
2 import numpy . linalg as npla
3
4 def angulo ( v , w ):
5
6 norm_v = npla . norm ( v )
7
8 norm_w = npla . norm ( w )
9
10 vdw = np . dot ( v , w )
11
12 ct = udw /( norm_v * norm_w )
13 return np . acos ( ct )
E. 5.2.5.
A projeção ortogonal do vetor 𝒖 na direção do vetor 𝒗 é definida por
proj 𝒗 𝒖 := 𝒖 ⋅ 𝒗 ‖ 𝒗 ‖ 2 𝒗 .
(5.48)
Implemente uma função que recebe dois vetores 𝒖 , 𝒗 e retorne a projeção de 𝒖 na direção de 𝒗 . Teste seu código para diferentes vetores.
Resposta
1 import numpy as np
2 import numpy . linalg as npla
3
4 def proj ( u , v ):
5
6 norm_v = npla . norm ( v )
7
8 udv = np . dot ( u , v )
9
10 proj_vu = udv / norm_v **2 * v
11 return proj_vu
E. 5.2.6.
Considere os vetores
𝒖 = ( 2 , − 3,1 ) ,
(5.49)
𝒗 = ( 1 , − 2 , − 1 ) .
(5.50)
Usando arrays do NumPy , compute os seguintes produtos vetoriais:
a)
b)
Resposta
Dica: use a função numpy.cross e verifique as computações calculando os resultados esperados.
Envie seu comentárioAproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!
Este texto é disponibilizado nos termos da Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional . Ícones e elementos gráficos podem estar sujeitos a condições adicionais.