Funções por partes são as vezes úteis quando a relação entre uma variável dependente e uma independente não pode ser adequadamente representada por uma única equação. Por exemplo, a velocidade de um foguete pode ser descrita por
Desenvolva uma função no Scilab, Octave ou Python bem estruturada para calcular v em função de t. Em seguida, use esta função para gerar uma tabela de v versus t para t=-5 à 50 em incrementos de 0,5. Plote o gráfico 2D dessa função, eixo horizontal tempo (segundos), eixo vertical velocidade (m/s).
Passo 1
O enunciado define uma função por partes para a velocidade v(t) de um foguete e pede que a implementemos em Python, geremos uma tabela de v versus t para t variando de -5 a 50 com passo 0,5 e, por fim, plotemos o gráfico 2D (tempo no eixo x, velocidade no eixo y).
Passo 2
Vamos implementar uma função vetorizada velocity(t) usando NumPy. Essa função vai receber um array (ou escalar) de instantes de tempo e retornar o array correspondente de velocidades . Para cada intervalo de , aplicamos a fórmula correta:
import numpy as np
defvelocity(t):
"""
Calcula v(t) definido por partes:
\(0<=\) t \(<=10\): \(11\)*\(t^2\) - \(5\)*t
\(10<=\) t \(<=20\): \(1100\) - \(5\)*t
\(20<=\) t \(<=30\): \(50\)*t \(+2\)*(t-\(20\))**\(2\)
t > \(30\): \(1520\) * exp(-\(0.2\)*(t-\(30\)))
qualquer outro: \(0\)
"""# Converte t para array NumPy
t \(=\) np.array(t, dtyp\(e=f\)loat)
# Cria vetor de saída preenchido com \(0\)
v \(=\) np.\(zeros_like\)(t)
# Máscaras para cada trecho
mask\(1=\) (t >\(=0\)) & (t <\(=10\))
mask\(2=\) (t >\(=10\)) & (t <\(=20\))
mask\(3=\) (t >\(=20\)) & (t <\(=30\))
mask\(4=\) (t > \(30\))
# Aplica as fórmulas
v[mask\(1\)] \(=11\)*t[mask\(1\)]**\(2\) - \(5\)*t[mask\(1\)]
v[mask\(2\)] \(=1100\) - \(5\)*t[mask\(2\)]
v[mask\(3\)] \(=50\)*t[mask\(3\)] \(+2\)*(t[mask\(3\)] - \(20\))**\(2\)
v[mask\(4\)] \(=1520\) * np.exp(-\(0.2\)*(t[mask\(4\)] - \(30\)))
return v
Passo 3
Geramos o vetor de instantes de tempo de a com passo usando np.arange: