9.1. Trigonometry

Universal Functions
ufunc

Mathematical operations optimized to work on np.array():

>>> import numpy as np
>>> a = np.array([1, 2, 3])
>>>
>>> np.sin(a)
array([0.84147098, 0.90929743, 0.14112001])

9.1.1. SetUp

>>> import numpy as np

9.1.2. Unit conversion

Degrees:

  • np.deg2rad()

  • np.degrees()

Radians:

  • np.rad2deg()

  • np.radians()

9.1.3. Trigonometric Functions

  • np.sin()

  • np.cos()

  • np.tan()

  • ctg = 1/tan

../../_images/numpy-trigonometry-sin.png

Figure 9.8. Sinusoid - sin(x) function

../../_images/numpy-trigonometry-cos.png

Figure 9.9. Cosinusoid - cos(x) function

../../_images/numpy-trigonometry-tan.png

Figure 9.10. Tangensoid - tan(x) function

../../_images/numpy-trigonometry-ctg.png

Figure 9.11. Cotangensoid - ctg(x) function, also 1/tan(x)

9.1.4. Arcus Functions

  • np.arcsin()

  • np.arccos()

  • np.arctan()

9.1.5. Hyperbolic Functions

  • np.sinh()

  • np.cosh()

  • np.tanh()

9.1.6. Arcus Hyperbolic Functions

  • np.arcsinh()

  • np.arccosh()

  • np.arctanh()

9.1.7. Assignments

Code 9.18. Solution
"""
* Assignment: Numpy Trigonometry
* Complexity: easy
* Lines of code: 8 lines
* Time: 13 min

English:
    1. Define function `trigonometry(angle_deg: int|float) -> dict`
    2. Return angle in radians and trigonometric function values (sin, cos, tg, ctg)
    3. Ctg for angle 180 and Tan for 90 degrees has infinite value, return `np.inf`
    4. Run doctests - all must succeed

Polish:
    1. Zdefiniuj funkcję `trigonometry(angle_deg: int|float) -> dict`
    2. Zwróć kąt w radianach oraz wartości funkcji trygonometrycznych (sin, cos, tg, ctg)
    3. Ctg dla angle 180 oraz Tan dla 0 i 90 stopni ma wartość nieskończoną, zwróć `np.inf`
    4. Uruchom doctesty - wszystkie muszą się powieść

Tests:
    >>> import sys; sys.tracebacklimit = 0

    >>> assert trigonometry(0) is not Ellipsis, \
    'Assign result to variable: `result`'
    >>> assert all(type(v) is not Ellipsis for v in trigonometry(0).values()), \
    'All values in the result must not be empty Ellipsis `...`'

    >>> trigonometry(180)  # doctest: +NORMALIZE_WHITESPACE
    {'rad': 3.141592653589793,
     'sin': 1.2246467991473532e-16,
     'cos': -1.0,
     'tan': inf,
     'ctg': -8165619676597685.0}

    >>> trigonometry(90)  # doctest: +NORMALIZE_WHITESPACE
    {'rad': 1.5707963267948966,
     'sin': 1.0,
     'cos': 6.123233995736766e-17,
     'tan': 1.633123935319537e+16, 'ctg': inf}

    >>> trigonometry(0)
    {'rad': 0.0, 'sin': 0.0, 'cos': 1.0, 'tan': 0.0, 'ctg': inf}

    >>> trigonometry(np.pi)  # doctest: +NORMALIZE_WHITESPACE +ELLIPSIS
    {'rad': 0.05483...,
     'sin': 0.05480...,
     'cos': 0.99849...,
     'tan': 0.05488...,
     'ctg': 18.2195...}
"""

import numpy as np


def trigonometry(angle_deg):
    return {
        'rad': ...,
        'sin': ...,
        'cos': ...,
        'tan': ...,
        'ctg': ...,
    }