< Home
Stampa

Matematica con Python

Sommario

Funzioni matematiche principali

Python offre una libreria matematica che consente di svolgere operazioni di calcolo sui numeri. Per utilizzarla occorre richiamarla con la seguente istruzione:

import math

Le funzioni a disposizione sono riassunte nella seguente tabella:

FunzioneSintassiDescrizioneEsempio Output
Radice quadratamath.sqrt(x)Calcola xx​2.0 (per x=4)
Potenzamath.pow(x, y)Calcola xyxy (ritorna float)8.0 (per 2,3)
Esponenzialemath.exp(x)Calcola exex2.718... (per x=1)
Logaritmo naturalemath.log(x)Calcola ln⁡(x)ln(x)1.0 (per x=e)
Logaritmo base 10math.log10(x)Calcola log⁡10(x)log10​(x)2.0 (per x=100)
Senomath.sin(x)Calcola sin⁡(x)sin(x) (x in radianti)1.0 (per x=π/2π/2)
Cosenomath.cos(x)Calcola cos⁡(x)cos(x) (x in radianti)0.0 (per x=π/2π/2)
Tangentemath.tan(x)Calcola tan⁡(x)tan(x) (x in radianti)1.0 (per x=π/4π/4)
Arco senomath.asin(x)Calcola arcsin⁡(x)arcsin(x) in radianti1.57... (per x=1)
Arco cosenomath.acos(x)Calcola arccos⁡(x)arccos(x) in radianti0.0 (per x=1)
Arco tangentemath.atan(x)Calcola arctan⁡(x)arctan(x) in radianti0.785... (per x=1)
Arrotondamentomath.floor(x)Arrot. per difetto (int)3 (per x=3.9)
Arrotondamentomath.ceil(x)Arrot. per eccesso (int)4 (per x=3.1)
Costantimath.pi, math.eCostanti matematiche3.14..., 2.718...

Le funzioni trigonometriche lavorano coi radianti, non coi gradi, Per convertire:

angolo_radianti = math.radians(angolo_gradi)

Random

La generazione di numeri random è fondamentale per simulazioni probabilistiche, test e giochi.

Si usa importando la libreria random.

Random consente di:

  • generare numeri casuali
  • mescolare gli elementi di una lista
  • scegliere un valore a caso da una lista
  • estrarre una lista di n valori casuali da una lista

Qui le funzioni più usate:

FunzioneSintassiDescrizione
Intero casualerandom.randint(a, b)Intero casuale tra a e b (inclusi).
Float casualerandom.random()Float casuale tra 0 e 1.
Float intervallorandom.uniform(a, b)Float casuale tra a e b (inclusi).
Scelta listarandom.choice(lista)Elemento casuale da una sequenza.
Shufflerandom.shuffle(lista)Mescola la lista in place (modifica l’originale).
Campionerandom.sample(lista, k)Lista di k elementi unici casuali (non modifica l’originale).

Esempi:

import random

# Lanciare un dado a 6 facce
dado = random.randint(1, 6)

# Scegliere lettere a caso
import string
caratteri = 'abcdefghijklmnopqrstuvwxyz0123456789'
password = ''.join([random.choice(caratteri) for _ in range(8)])
print(password)

# Mescolare una lista di carte
carte = ['A', 'K', 'Q', 'J']
random.shuffle(carte) # mescolata

Matplotlib

La libreria Matplotlib consente di generare grafici bidimensionali, come:

  • grafici a barre;
  • grafici a punti;
  • grafici a linea;

Vediamo qui un semplice esempio:

import matplotlib.pyplot as plt

# Dati
x = ['2024', '2025', '2026', '2027']
y = [100, 400, 2000, 5500]

# Crea due oggetti: la figura e il grafico
figure, graph = plt.subplots()

# Disegna il grafico
graph.plot(x, y)  # Linea

# Assegna le etichette e titolo
graph.set_title("Visualizzazioni mensili di Ci Piace Info")
graph.set_xlabel("Anno")
graph.set_ylabel("Pagine viste")

# Mostra infine il grafico
plt.show()

L’istruzione figure, graph = plt.subplots() crea i due oggetti fondamentali di matplotlib:

  • figure: che rappresenta il canvas del grafico;
  • graph: rappresenta il grafico vero e proprio

L’oggetto graph mette a disposizione le seguenti funzioni:

MetodoSintassiDescrizione
Lineagraph.plot(x, y)Disegna una linea che collega ogni coppia di elementi dei vettori x ed y. Opzioni: color='r', linestyle='--'. Utile per disegnare grafici sull’andamento di un dato nel tempo.
Puntigraph.scatter(x, y)Disegna punti sparsi. Utile per correlazioni tra coppie di elementi nel piano cartesiano.
Barregraph.bar(x, y)Disegna un istogramma/bar chart. Utile per indicare quantità in ambito statistico.
Titolograph.set_title("Testo")Imposta il titolo del grafico.
Etichettegraph.set_xlabel("X")
graph.set_ylabel("Y")
Imposta le etichette degli assi.
Legendagraph.legend()Mostra la legenda (dopo aver usato label= in plot).
Grigliagraph.grid(True)Attiva la griglia di sfondo.
Limitigraph.set_xlim(a, b)
graph.set_ylim(c, d)
Imposta i limiti degli assi (utile per eseguire uno zoom).

L’oggetto figure ha invece funzioni generali del Canvas:

MetodoSintassiDescrizione
Dimensionefigure.set_size_inches(larghezza, altezza)Imposta le dimensioni in pollici.
Esempio: fig.set_size_inches(10, 6) crea un grafico largo 10″ e alto 6″.
DPIfigure.set_dpi(valore)Imposta la densità dei pixel (Dots Per Inch).
Esempio: fig.set_dpi(300) per alta qualità (standard editoriale).
Salvafigure.savefig("nome_file.png")Salva la figura in un file.
Formati supportati: .png, .jpg, .pdf, .svg.
Sfondofigure.patch.set_facecolor('white')Cambia il colore di sfondo dell’intera figura.

Vediamo un altro esempio. In questo caso abbiamo i voti di una verifica in classe (22 studenti) e vogliamo mostrare la distribuzione dei voti con un grafico ad istogramma:

votes = [8, 6, 6, 4, 6, 6, 7, 5, 8, 10, 6, 7, 8, 6, 7, 7, 7, 5, 7, 7, 9, 8]

dist = [0]*11
for vote in votes:
  dist[vote]+=1
labels = list(range(11))

figure, graph = plt.subplots()
graph.bar(labels, dist, color='steelblue', edgecolor='blue')  # Linea

graph.set_title("Distribuzione voti")
graph.set_xlabel("voto")
graph.set_ylabel("numero studenti")
graph.set_xlim(1.5, 10.5)

plt.show()

Qui il risultato:

Ora vediamo un esempio sull’andamento delle azioni Apple vs Google:

import matplotlib.pyplot as plt

mesi= ['Oct 25', 'Nov 25', 'Dec 25', 'Jan 26', 'Feb 26', 'Mar 26', 'Apr 26', 'May 26', 'Jun 26', 'Jul 26', 'Aug 26', 'Sep 26']
prezzi_apple = [143.33, 156.18, 147.3, 142.92, 149.18, 144.17, 158.39, 149.85, 149.62, 157.12, 153.33, 161.75]
prezzi_google = [147.81, 148.53, 135.58, 138.46, 148.98, 132.2, 147.21, 137.75, 144.74, 132.06, 143.26, 136.78]

figure, graph = plt.subplots(figsize=(12, 6), dpi=150)

graph.plot(mesi, prezzi_apple, label="Apple (AAPL)", color='blue', marker='o', linestyle='-')
graph.plot(mesi, prezzi_google, label="Google (GOOGL)", color='red', marker='s', linestyle='-')

graph.set_title("Andamento Prezzi Azioni: Apple vs Google", fontsize=13)
graph.set_xlabel("Mese", fontsize=12)
graph.set_ylabel("Prezzo (USD)", fontsize=12)

graph.legend(loc='upper left')
graph.grid(True, linestyle='--', alpha=0.5)

plt.show()