Funções Matemáticas
Operações Elementares
A classe Medida implementa todas as operações matemáticas elementares. Portanto, operações entre instâncias de Medida são idênticas a operações entre números.
x = lab.Medida(1, "m", 0.01)
y = lab.Medida(200, "cm", 1)
# Operações básicas
assert (x + y).fmt() == "(3,00 ± 0,01) m"
assert (x - y).fmt() == "(-1,00 ± 0,01) m"
assert (x * y).fmt() == "(2,00 ± 0,02) m²"
assert (x / y).fmt() == "(5,00 ± 0,06) × 10⁻¹"
assert (y**2).fmt() == "(4,00 ± 0,04) × 10⁴ cm²"
Funções Numpy
O LabIFSC2 implementa uma compatibilidade direta com as funções do Numpy (tecnicamente chamadas de ufunc), permitindo que você aplique funções como np.sin, np.sqrt, np.arctanh de forma natural1.
areas = np.array([lab.Medida(4, "cm²", 0.24),
lab.Medida(9, "m²", 0.24),
lab.Medida(16, "km²", 0.24)])
lados = np.sqrt(areas)
assert str(lados) == "[(2,00 ± 0,06) cm (3,00 ± 0,04) m (4,00 ± 0,03) km]"
Veja que as unidades se comportam como o esperado. Outro exemplo interessante é a função seno, em que podemos usar diretamente o resultado em graus, sem precisar converter para radianos.
theta = lab.Medida(30, "degree", 0.01)
assert np.sin(theta).fmt() == "(5,000 ± 0,002) × 10⁻¹"
-
Para os curiosos, o numpy tem uma seção inteira na sua documentação sobre como usar funções numpy em objetos arbitrários e até como implementar o seu próprio tipo array ↩