| | | | |

5.2 Vetores

Compre o e-book deste material aqui!

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.

1>>> import numpy as np
Exemplo 5.2.1.

Podemos alocar os vetores

𝒗=(1,0,2), (5.8)
𝒘=(2,1,3), (5.9)

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.10a)
=(1+2,0+(1),2+3) (5.10b)
=(3,1,1) (5.10c)

e a dos arrays é equivalente

1>>> v+w
2array([ 3, -1,  1])

A subtração dos vetores também é uma operação elemento-a-elemento

𝒗𝒘 =(1,0,2)(2,1,3) (5.11a)
=(12,0(1),23) (5.11b)
=(1,1,5) (5.11c)

e a dos arrays é equivalente

1>>> v-w
2array([ -1, 1,  -5])

Ainda, a multiplicação por escalar

2𝒗 =2(1,0,2) (5.12a)
=(21,20,2(2)) (5.12b)
=(2,0,4) (5.12c)

também é feita elemento-a-elemento, assim como com arrays

1>>> 2*v
2array([ 2,  0, -4])

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

1>>> v*w
2array([ 2,  0, -6])
3>>> v/w
4array([ 0.5, -0., -0.66666667])
5>>> v**2
6array([1, 0, 4])

5.2.1 Funções Vetoriais

Funções vetoriais f:nn e funcionais f:n também podem ser adequadamente modeladas com o emprego de arrays do NumPy. A biblioteca também conta com várias funções matemáticas predefinidas, consulte

https://numpy.org/doc/stable/reference/routines.math.html

Exemplo 5.2.2.

(Função Vetorial.) A implementação da função vetorial 𝒇:33

𝒇(𝒙)=(x12+sin(x1),x22+sin(x2),x32+sin(x3)) (5.13)

para 𝒙=(x1,x2,x3)3, pode ser feita da seguinte forma

1import numpy as np
2
3def f(x):
4  return x**2 + np.sin(x)
5
6# exemplo
7x = np.array([0, np.pi, np.pi/2])
8print(f'y = {f(x)}')

Verifique!

5.2.2 Produto Interno

O produto interno (ou, produto escalar) é a operação entre vetores 𝒗,𝒘n definida por

𝒗𝒘:=v1w1+v2w2++vnwn. (5.14)

A função numpy.dot computa o produto interno dos arrays.

Exemplo 5.2.3.

Consideramos os vetores

𝒗=(1,0,2), (5.15)
𝒘=(2,1,3). (5.16)

O produto interno desses vetores é

𝒗𝒘 =v1w1+v2w2+v3w3 (5.17a)
=12+0(1)+(2)3 (5.17b)
=2+06=4 (5.17c)

Usando arrays, temos

1>>> v = np.array([1, 0, -2])
2>>> w = np.array([2, -1, 3])
3>>> np.sum(v*w)
4-4
5>>> np.dot(v,w)
6-4

5.2.3 Norma de Vetores

A norma L2 de um vetor 𝒗n é definida por

𝒗:=v12+v22++vn2 (5.18)

O submódulo de álgebra linear numpy.linalg contém a função numpy.linalg.norm para a computação da norma de arrays.

Exemplo 5.2.4.

A norma do vetor 𝒗=(3,0,4) é

𝒗 =v12+v22+v32 (5.19a)
=32+02+(4)2 (5.19b)
=9+0+16 (5.19c)
=25=5. (5.19d)

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))
55.0
6>>> npla.norm(v)
75.0

5.2.4 Produto Vetorial

O produto vetorial entre dois vetores 𝒗,𝒘3 é definido por

𝒗×𝒘 :=|𝒊𝒋𝒌v1v2v3w1w2w3| (5.20d)
=|v2v3w2w3|𝒊 (5.20g)
|v1v3w1w3|𝒋 (5.20j)
+|v1v2w1w2|𝒌 (5.20m)

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) é

𝒗×𝒘 =|𝒊𝒋𝒌121021| (5.21d)
=0𝒊+𝒋+2𝒌 (5.21e)
=(0,1,2). (5.21f)

Com o NumPy, temos

1>>> v = np.array([1, -2, 1])
2>>> w = np.array([0, 2, -1])
3>>> np.cross(v,w)
4array([0, 1, 2])

5.2.5 Exercícios

E. 5.2.1.

Considere os seguintes vetores

𝒖=(2,1,1) (5.22)
𝒗=(1,3,2) (5.23)
𝒘=(2,1,3) (5.24)

Usando arrays do NumPy, compute:

  1. a)

    𝒖𝒗

  2. b)

    𝒖(2𝒗)

  3. c)

    𝒖(𝒘+𝒗)

  4. d)

    𝒗(𝒗2𝒖)

Resposta.

Dica: use a função np.dot() e verifique as computações calculando os resultados esperados.

E. 5.2.2.

Considere os seguintes vetores

𝒖=(2,1,1) (5.25)
𝒗=(1,3,2) (5.26)
𝒘=(2,1,3) (5.27)

Usando arrays do NumPy, compute:

  1. a)

    𝒖

  2. b)

    𝒖+𝒗

  3. c)

    |𝒖𝒘|

Resposta.

Dica: use a função numpy.linalg.norm e verifique as computações calculando os resultados esperados.

E. 5.2.3.

Dados vetores 𝒖 e 𝒗, temos que

𝒖𝒗=𝒖𝒗cosθ, (5.28)

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.
1import numpy as np
2import numpy.linalg as npla
3
4def angulo(v, w):
5  # \|v\|
6  norm_v = npla.norm(v)
7  # \|w\|
8  norm_w = npla.norm(w)
9  # u.v
10  vdw = np.dot(v, w)
11  # cos \theta
12  ct = norm_v*norm_w/udw
13  return np.acos(ct)
E. 5.2.4.

A projeção ortogonal do vetor 𝒖 na direção do vetor 𝒗 é definida por

proj𝒗𝒖:=𝒖𝒗𝒗2𝒗. (5.29)

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.
1import numpy as np
2import numpy.linalg as npla
3
4def proj(u, v):
5  # \|v\|
6  norm_v = npla.norm(v)
7  # u.v
8  udv = np.dot(u, v)
9  # proj_v u
10  proj_vu = udv/norm_v**2 * v
11  return proj_vu
E. 5.2.5.

Considere os vetores

𝒖=(2,3,1), (5.30)
𝒗=(1,2,1). (5.31)

Usando arrays do NumPy, compute os seguintes produtos vetoriais:

  1. a)

    𝒖×𝒗

  2. b)

    𝒗×(2𝒗)

Resposta.

Dica: use a função numpy.cross e verifique as computações calculando os resultados esperados.


Envie seu comentário

As informações preenchidas são enviadas por e-mail para o desenvolvedor do site e tratadas de forma privada. Consulte a Política de Uso de Dados para mais informações. Aproveito para agradecer a todas/os que de forma assídua ou esporádica contribuem enviando correções, sugestões e críticas!