Introduzione alla Programmazione
Corso di base sulla programmazione C.
Vari Snippet
Abbiamo implementato questi snippet di codice python per facilitare lo studio e comprendere a livello pratico e grafico alcuni aspetti del corso. Eseguire i codici con python3 file.py e controllare di avere tutte le librerie necessarie installate.
Distanza tra due punti
Codice che calcola e disegna la distanza tra due punti su un piano.
Distanza tra due punti
Codice che calcola e disegna la distanza tra due punti su un piano.
import numpy as np
import matplotlib.pyplot as plt
# Definizione dei punti
x = np.array([3, 4])
y = np.array([0, 0])
# Calcolo della distanza euclidea
distance = np.linalg.norm(x - y)
print(f"Distanza tra {x} e {y}: {distance}")
# Creazione del grafico
plt.figure(figsize=(6,6))
plt.scatter([x[0], y[0]], [x[1], y[1]], color=['red', 'blue'], label='Punti')
plt.plot([x[0], y[0]], [x[1], y[1]], 'k--', label=f'Distanza = {distance:.2f}')
# Annotazioni
plt.text(x[0], x[1], f' x{tuple(x)}', fontsize=12, verticalalignment='bottom')
plt.text(y[0], y[1], f' y{tuple(y)}', fontsize=12, verticalalignment='top')
# Configurazione assi
plt.xlim(-1, 5)
plt.ylim(-1, 5)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.grid(True, linestyle='--', linewidth=0.5)
plt.legend()
plt.title("Distanza Euclidea tra due punti in R2")
# Mostra il grafico
plt.show()
Norma (Prodotto Scalare)
Codice che calcola la norma con il prodotto scalare tra vettore e scalare.
Norma (Prodotto Scalare)
Codice che calcola la norma con il prodotto scalare tra vettore e scalare.
import numpy as np
import matplotlib.pyplot as plt
# Definiamo un vettore v
v = np.array([3, 2])
# Definiamo un valore per alpha
alpha = 2
# Calcoliamo il vettore alpha * v
v_alpha = alpha * v
# Calcoliamo le norme dei vettori
norm_v = np.linalg.norm(v)
norm_v_alpha = np.linalg.norm(v_alpha)
# Visualizziamo i vettori v e alpha * v
plt.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='blue', label="v", width=0.005) # width modifica la larghezza
plt.quiver(0, 0, v_alpha[0], v_alpha[1], angles='xy', scale_units='xy', scale=1, color='red', label="α * v", width=0.002) # width modifica la larghezza
# Aggiungiamo le etichette delle norme
plt.text(v[0]/2, v[1]/2, f"||v|| = {norm_v:.2f}", fontsize=12, color='blue')
plt.text(v_alpha[0]/2, v_alpha[1]/2, f"||α * v|| = {norm_v_alpha:.2f}", fontsize=12, color='red')
# Impostiamo i limiti per una visualizzazione migliore
plt.xlim(-1, 7)
plt.ylim(-1, 7)
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
# Aggiungiamo la legenda
plt.legend()
# Mostriamo il grafico
plt.gca().set_aspect('equal', adjustable='box')
plt.grid(True)
plt.show()
Disuguaglianza Triagolare (Vettori)
Codice che calcola la disuguaglianza trangolare tra vettori.
Disuguaglianza Triagolare (Vettori)
Codice che calcola la disuguaglianza trangolare tra vettori.
import numpy as np
import matplotlib.pyplot as plt
# Definizione dei vettori
x = np.array([3, 2]) # Vettore x
y = np.array([-1, 3]) # Vettore y
sum_xy = x + y # Somma dei vettori
# Creazione del grafico
fig, ax = plt.subplots()
ax.set_xlim(-2, 5)
ax.set_ylim(-1, 5)
ax.set_aspect('equal')
# Disegna i vettori
ax.quiver(0, 0, x[0], x[1], angles='xy', scale_units='xy', scale=1, color='blue', label='x')
ax.quiver(x[0], x[1], y[0], y[1], angles='xy', scale_units='xy', scale=1, color='green', label='y')
ax.quiver(0, 0, sum_xy[0], sum_xy[1], angles='xy', scale_units='xy', scale=1, color='purple', label='x + y')
# Aggiunge annotazioni
ax.text(x[0]/2, x[1]/2, 'x', fontsize=12, color='blue', verticalalignment='bottom')
ax.text(x[0] + y[0]/2, x[1] + y[1]/2, 'y', fontsize=12, color='green', verticalalignment='bottom')
ax.text(sum_xy[0]/2, sum_xy[1]/2, 'x + y', fontsize=12, color='purple', verticalalignment='bottom')
# Linee per il triangolo
ax.plot([0, x[0], sum_xy[0]], [0, x[1], sum_xy[1]], 'b--')
ax.plot([x[0], sum_xy[0]], [x[1], sum_xy[1]], 'g--')
# Titolo e griglia
ax.set_title("Disuguaglianza Triangolare per Vettori")
ax.grid()
# Mostra il grafico
plt.show()
Coniche piane
Visualizzazione grafica di circonferenze ed ellissi nel piano cartesiano.
Coniche piane
Visualizzazione grafica di circonferenze ed ellissi nel piano cartesiano.
import numpy as np
import matplotlib.pyplot as plt
def plot_circle(ax, h, k, r, label):
theta = np.linspace(0, 2*np.pi, 300)
x = h + r * np.cos(theta)
y = k + r * np.sin(theta)
ax.plot(x, y, label=label)
def plot_ellipse(ax, h, k, a, b, label):
theta = np.linspace(0, 2*np.pi, 300)
x = h + a * np.cos(theta)
y = k + b * np.sin(theta)
ax.plot(x, y, label=label)
fig, ax = plt.subplots(figsize=(8, 8))
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)
ax.grid(True, linestyle='--', linewidth=0.5)
ax.set_xlim(-3, 5)
ax.set_ylim(-3, 5)
# 1. Circonferenza x^2 + y^2 = 1
plot_circle(ax, 0, 0, 1, "x^2 + y^2 = 1")
# 2. Circonferenza (x - 2)^2 + (y - 3)^2 = 1
plot_circle(ax, 2, 3, 1, "(x - 2)^2 + (y - 3)^2 = 1")
# 3. Ellisse 4x^2 + x + 4y^2 = 63/16
x = np.linspace(-2, 2, 400)
y = np.linspace(-2, 2, 400)
X, Y = np.meshgrid(x, y)
Z = 4*X**2 + X + 4*Y**2 - 63/16
ax.contour(X, Y, Z, levels=[0], colors='r', label="4x^2 + x + 4y^2 = 63/16")
# 4. Ellisse 4x^2 + y^2 = 1
plot_ellipse(ax, 0, 0, 1/2, 1, "4x^2 + y^2 = 1")
# 5. Conica x^2 + 16y^2 - 8y = 0 -> Completamento quadrato su y
Y_shifted = np.linspace(-2, 2, 400)
X = np.sqrt(1 - 16*(Y_shifted - 1/2)**2)
ax.plot(X, Y_shifted, 'g', label="x^2 + 16y^2 - 8y = 0")
ax.plot(-X, Y_shifted, 'g')
ax.legend()
plt.show()
Vettori scalati
Rappresentazione grafica di un vettore moltiplicato per scalari.
Vettori scalati
Rappresentazione grafica di un vettore moltiplicato per scalari.
import numpy as np
import matplotlib.pyplot as plt
# Definiamo un vettore v
v = np.array([3, 2])
# Calcoliamo i vettori per diversi valori di alfa
alpha_values = [-2, 0, 2] # alfa < 0, alfa = 0, alfa > 0
# Crea una figura per il grafico
plt.figure(figsize=(8, 8))
# Visualizza ogni caso
for alpha in alpha_values:
# Calcoliamo il vettore alpha * v
v_alpha = alpha * v
# Calcoliamo la norma
norm_v = np.linalg.norm(v)
norm_v_alpha = np.linalg.norm(v_alpha)
# Aggiungiamo i vettori al grafico
color = 'blue' if alpha < 0 else 'red' if alpha > 0 else 'green'
label = f"α = {alpha}"
plt.quiver(0, 0, v_alpha[0], v_alpha[1], angles='xy', scale_units='xy', scale=1, color=color, label=label, width=0.005)
# Aggiungiamo le etichette delle norme
plt.text(v_alpha[0]/2, v_alpha[1]/2, f"||α * v|| = {norm_v_alpha:.2f}", fontsize=12, color=color)
# Visualizzare il vettore originale v (sempre blu)
plt.quiver(0, 0, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='black', label="v", width=0.005)
# Aggiungiamo i limiti per una visualizzazione migliore
plt.xlim(-7, 7)
plt.ylim(-7, 7)
plt.axhline(0, color='black',linewidth=0.5)
plt.axvline(0, color='black',linewidth=0.5)
# Aggiungiamo la legenda
plt.legend()
# Mostriamo il grafico
plt.gca().set_aspect('equal', adjustable='box')
plt.grid(True)
plt.title("Vettori per diversi valori di α")
plt.show()
Settimana 1: Introduzione
Definizioni Generali.
Settimana 2-3: PM
Programmazione Matematica.
Settimana 4: Convessità
Problemi Convessi.
Settimana 5: PL
Programmazione Lineare.
Lezioni
Capitolo 01 - Richiami e Definizioni Generali
PDF - 9.2 MB
Capitolo 02 - Richiami sulle funzioni continuamente differenziabili
PDF - 3.4 MB
Capitolo 03 - Introduzione alla Programmazione Matematica
PDF - 1 MB
Capitolo 04 - Proprietà e struttura dei problemi convessi
PDF - 7.6 MB
Capitolo 05 - Ulteriori elementi di Programmazione Matematica
PDF - 1 MB
Capitolo 06 - La Programmazione Lineare come caso particolare della Programmazione Convessa
PDF - 13.5 MB
Capitolo 07 - Branch and bound
PDF - 5.2 MB
Capitolo 08 - Costo fisso & Vincoli disgiuntivi
PDF - 1.9 MB
Capitolo 09 - Massimo flusso
PDF - 3.2 MB
Capitolo 10 - Riassunto di Teoria
PDF - 11.7 MB