Vetores e sua implementação em numpy
# Pacotes necessários. Resolva essas dependências antes de prosseguir!
import matplotlib.pyplot as plt
import numpy as np
O pacote numpy permite representar vetores e implementar imediatamente suas operações:
import numpy as np
x1 = 4
x2 = 5
x = np.array( [x1, x2] )
y = np.array( [-4, -5])
print(x)
print(2*x)
print(x+y)
z = 10*(x + 2*y)
print(z)
Exercício 1: relacionar um vetor à hipotenusa de um triângulo retângulo
Veja a figura abaixo. A seta correspondente ao vetor cobre a hipotenusa de um triângulo retângulo.
- Qual é o comprimento do cateto azul?
- Qual é o comprimento do cateto vermelho?
- Qual é o comprimento do vetor representado (dica: use o Teorema de Pitágoras)? Faça um código em Python que permite verificar sua resposta.
plt.figure(figsize=(5,5))
plt.arrow(0,0,1,2,length_includes_head=True,head_width=0.1)
plt.plot([0,1], [0,0],'r')
plt.plot([1,1], [0,2],'b')
plt.xlim([-1,2])
plt.ylim([-1,2])
plt.grid()
plt.show()
Exercício 2: calcular o módulo de vetores em duas dimensões
O comprimento da seta que representa um vetor no plano cartesiano é chamado de módulo do vetor. Dependendo da referência bibliográfica, o módulo é também chamado de norma, ou de comprimento. O módulo de um vetor \(\boldsymbol {x}\) é representado usando barras verticais. Duas notações comuns são: \(|\boldsymbol{x}|\) e \(||\boldsymbol{x}||\). Como vimos, de acordo com o Teorema de Pitágoras, o módulo de um vetor de duas dimensões pode ser calculado por:
Calcule (manualmente, e depois confira suas contas com um programa! se achar necessário, faça um desenho) os módulos dos vetores:
- \([3, 4]\)
- \([6, 8]\)
- \([9, 12]\)
- \([-3, 4]\)
- \([-3, -4]\)
- \([3, -4]\)
Exercício 3: calcular módulo de vetores em dimensão alta
Quando um vetor tem mais de duas dimensões (por exemplo, \(n\) dimensões), o Teorema de Pitágoras pode ser generalizado para encontrar o módulo:
Faça um programa em Python para encontrar o módulo do vetor \(\boldsymbol {x}\) definido abaixo. Seu programa deve funcionar também para calcular o módulo do vetor \(\boldsymbol {y}\), que tem tamanho definido aleatoriamente a cada nova execução. Implemente seu cálculo usando um laço explícito, iterando sobre as dimensões dos vetores. Após, confira sua reposta comparando com a instrução np.linalg.norm(x).
x = np.array([4, -2, 3, 2, 0.5, 0, 1, 2, 1, 3, 2, -1, 0.123, 0.432, 1.1212])
y = np.random.random(np.random.randint(30,70))
Usar a representação polar de vetores
Exercício 4: calcular o ângulo entre um vetor e o eixo horizontal
Neste exercício, calcularemos o ângulo entre o eixo horizontal (eixo x) e a seta que representa o vetor. Esse ângulo representa a direção do vetor e geralmente é referido como \(\theta\) (a letra grega theta). O ângulo é comumente chamado de argumento.
- Qual é o comprimento do vetor \(\boldsymbol{v}\) representado abaixo?
- Qual dos ângulos do triângulo formado na figura é \(\theta\)?
- Qual é a tangente de \(\theta\)?
- Usando seus conhecimentos de trigonometria, calcule \(\theta\) em radianos e em graus.
- Usando a função
np.arctan, calcule \(\theta\) em radianos e em graus. - Usando a função
np.arctan2, calcule \(\theta\) em radianos e em graus. - Repita o exercício para \(\boldsymbol{v} = [1,2]\)
import numpy as np
import matplotlib.pyplot as plt
v = np.array([1, 1])
plt.figure(figsize=(5,5))
plt.arrow(0,0,v[0],v[1],length_includes_head=True,head_width=0.1)
plt.plot([0,v[0]], [0,0],'r')
plt.plot([v[0],v[0]], [0,v[1]],'b')
plt.xlim([-1,3])
plt.ylim([-1,3])
plt.grid()
plt.show()
Exercício 5: calcular o efeito de multiplicações por escalares no módulo e no argumento de vetores
Manipule o vetor \(\boldsymbol{v}\) no código abaixo para responder às seguintes questões: 1. Inicialmente, calcule o módulo e o argumento de \(\boldsymbol{v}\). 2. Calcule o módulo e o argumento de \(2 \boldsymbol{v}\) 3. Escolha um número positivo qualquer \(a\) e calcule o módulo e o argumento de \(a \boldsymbol{v}\) 4. Escolha um número negativo qualquer \(b\) e calcule o módulo e o argumento de \(b \boldsymbol{v}\) 5. Escreva: o que acontece com o módulo e o argumento de um vetor quando o vetor é multiplicado por um número qualquer?
v = np.array([1, 1])
plt.figure(figsize=(5,5))
plt.arrow(0,0,v[0],v[1],length_includes_head=True,head_width=0.1)
plt.plot([0,v[0]], [0,0],'r')
plt.plot([v[0],v[0]], [0,v[1]],'b')
plt.xlim([-1,3])
plt.ylim([-1,3])
plt.grid()
plt.show()
Exercício 6: deduzir matematicamente o procedimento para normalizar um vetor
Quando dois vetores têm o mesmo argumento, dizemos que eles têm a mesma direção.
Se temos um vetor \(\boldsymbol{v}\) com módulo \(||\boldsymbol{v}||\), como podemos encontrar um vetor \(\boldsymbol{w}\) com a mesma direção de \(\boldsymbol{v}\) e com módulo igual a 1?
Implemente a função normalizar(v : np.ndarray) que retorna um vetor com módulo 1 e com a mesma direção de v. Implemente também testes que verifiquem que a função funciona corretamente.
def normalizar(v: np.ndarray) -> np.ndarray:
return v
Exercício 7: usar operações vetoriais de numpy para calcular o módulo de vetores
As três funções abaixo retornam o módulo de um vetor recebido como entrada. 1. Verifique se essas funções retornam resultados corretos 2. Qual das implementações você acha mais compacta? Por que?
def modulo_A(x):
mod = 0
for i in range(len(x)):
mod += x[i]**2
mod = mod**0.5
return mod
def modulo_B(x):
mod = np.sqrt (np.sum(x**2))
return mod
def modulo_C(x):
mod = np.linalg.norm(x)
return mod
Exercício 8: implementar uma trajetória usando Python
Uma partícula parte da origem do plano cartesiano e executa as seguintes instruções:
- caminha na direção do vetor $\(\begin{bmatrix} 0 \\ 1\end{bmatrix}\)$ por uma distância de 5,
- vira 60 graus no sentido horário
- caminha por uma distância de 7
- vira 30 graus no sentido anti-horário
- caminha por uma distância de 3, chegando ao ponto marcado pelo vetor \(v\)
- vira novamente de \(\phi\) graus no sentido horário, apontando agora para a origem
- caminha até a origem
Nessa situação:
- Use o pacote
matplotlib.pyplotpara fazer uma figura que corresponde à trajetória da partícula - Use Python para fazer um programa que calcula o ângulo \(\phi\) em graus
- Use Python para escrever \(v\) na forma cartesiana e, após, na forma polar.
import matplotlib.pyplot as plt
import numpy as np
x = np.array([0, 0])