La libreria math

Come sfruttare le capacità matematiche di Python.

Nell’eseguire espressioni matematiche di sicuro ci si imbatte in un altro problema (oltre a quello della divisione tra interi). Se tentiamo di eseguire una radice quadrata (“sqrt” in inglese), Python ci risponde con un messaggio di errore:

>>> sqrt(16)
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in -toplevel-
    sqrt(16)
NameError: name 'sqrt' is not defined

È l’ultima riga quella che ci interessa in questo momento: Python non conosce la parola “sqrt”, non sa fare le radici quadrate. Nei linguaggi moderni, la tendenza è quella di avere un nucleo di linguaggio piuttosto ristretto, ampliato poi da librerie. Python possiede una grande quantità di librerie, una di queste è “math” che contiene le funzioni matematiche. Per poterle usare dobbiamo caricarla e poi chiamare la funzione desiderata specificando il nome della libreria in cui si trova:

>>> import math
>>> print math.sqrt(16)
4.0

Da notare che il risultato della funzione math.sqrt() è un numero float (razionale o in virgola mobile) anche se la parte decimale è nulla.

Le Librerie contengono, in generale un gran numero di funzioni, per avere informazioni sulla libreria possiamo usare il comando “help”:

>>> help(math)

In questo modo vengono elencati tutti gli oggetti forniti dalla libreria math. Ci sono le funzioni goniometriche e iperboliche, la conversione da radianti in gradi e viceversa, la parte intera di un numero, le funzioni esponenziale e logaritmica, il valore assoluto, il fattoriale, la potenza di un numero e la radice quadrata, la lunghezza dell’ipotenusa dati i cateti e le due costanti e e pi.

Ad esempio se volessimo stamparci una tabella dei valori di seno, coseno e tangente per gli angoli che vanno da 0 a 360 gradi con intervalli di 15 gradi potremmo andare per gradi... Iniziamo a farci stampare il valore degli angoli:

>>> from __future__ import print_function
>>> for alpha in range(0, 360, 15):
        print(alpha)


0
15
30
...

Osserviamo che range è un iteratore che fornisce, uno alla volta tutti i numeri da un minimo opzionale (in questo caso 0), a un massimo sempre escluso (in questo caso 360), con un certo intervallo opzionale (in questo caso 15).

L’istruzione for permette di ripetere un blocco di istruzioni per ogni valore di una sequenza (in questo caso fornita da range). Verrà trattato in un prossimo capitolo.

Aggiungiamo ora il calcolo del seno:

>>> for alpha in range(0, 360, 15):
        print(alpha, math.sin(alpha))


0 0.0
15 0.650287840157
30 -0.988031624093
...

Ma qui si evidenziano due problemi: primo vorrei i numeri incolonnati, secondo sbaglia i calcoli! Per il primo problema aggiungiamo alla funzione print l’argomento relativo al separatore: sep='\t' in questo modo i diversi valori vengono separati da un tabulatore. Per il secondo problema, riguardiamo la documentazione (help(math)) la funzione sin vuole come argomento l’angolo espresso in radianti. Nessun problema, math ha giusto una funzione per la conversione da gradi a radianti. Magari arrotondiamo anche i valori a 4 cifre decimali in modo da renderli un po’ più leggibili:

>>> for alpha in range(0, 360, 15):
        print(alpha, round(math.sin(math.radians(alpha)), 4), sep='\t')


0       0.0
15      0.2588
...

Riassumendo

  • La libreria math permette di estendere le funzionalità matematiche di Python per usarla la si deve prima caricare con il comando import.

  • La funzione help() può darci interessanti informazioni su un oggetto Python.

  • Possiamo chiedere a Python 2.x di comportarsi come Python 3.x per quanto riguarda il comando print e la divisione eseguendo l’istruzione:

    >>> from __future__ import division, print_function
    
  • L’iteratore range fornisce numeri interi, la sintassi è:

    range([min, ] max [, step])
    
  • L’istruzione for permette di ripetere un blocco di istruzioni facendo scorrere una variabile in una sequenza, la sintassi è:

    for <variabile> in sequenza:
        <istruzioni>
    

Prova tu

  1. Fa calcolare la lunghezza dell’ipotenusa di un triangolo rettangolo con i cateti lunghi 13 e 18.
  2. Modifica l’espressione precedente in modo che calcoli le ipotenuse di triangoli rettangoli con cateti lunghi: 643 e 786, 32332 e 57543, 775472 e 547545.
  3. Scrivi le espressioni che calcolano il perimetro e l’area del triangolo equilatero.
  4. Completa la tabella delle funzioni goniometriche con la colonna del coseno e della tangente.