Moltiplicatori di Lagrange: teoria, esercizi svolti, grafici Python e applicazioni reali

Cerca nel sito

Altri risultati..

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Cerca nelle Categorie


Ogni decisione strategica o ingegneristica si scontra prima o poi con un limite fisico, finanziario o di tempo.

Abbiamo un budget prefissato, una quantità di materiale contata o un livello di rischio massimo che possiamo tollerare.

L’ottimizzazione vincolata è l’architettura matematica che ci permette di prendere la decisione migliore all’interno di questi recinti operativi.

In questo articolo vedremo il metodo dei Moltiplicatori di Lagrange in azione. Non ci limiteremo a calcolare derivate parziali, ma interpreteremo il significato geometrico e applicativo delle soluzioni attraverso tre scenari concreti: l’allocazione di risorse fisiche, il design industriale per la riduzione dei costi e l’ottimizzazione del rapporto rischio-rendimento in finanza.

La Mappa dell’Ottimizzazione Vincolata

Prima di calcolare derivate, tracciamo la mappa concettuale del problema.

L’ottimizzazione vincolata è il linguaggio con cui la matematica e la Data Science risolvono problemi reali in presenza di risorse limitate.

                  ┌─────────────────────────────────────────┐
                  │ PROBLEMA: Massimizzare/Minimizzare f(x) │
                  │     soggetto al vincolo g(x) = 0        │
                  └────────────────────┬────────────────────┘
                                       │
                    ┌──────────────────┴──────────────────┐
                    ▼                                     ▼
      GEOMETRIA DEL PROBLEMA                CONDIZIONE DI REGOLARITÀ
   Curve di livello f(x) tangenti              Il gradiente del vincolo
     alla superficie g(x)=0                 DEVE essere non nullo (∇g ≠ 0)
                    │                                     │
                    └──────────────────┬──────────────────┘
                                       │
                                       ▼
                  ┌─────────────────────────────────────────┐
                  │  LAGRANGIANO: L(x, λ) = f(x) - λ g(x)   │
                  │        Sistema: ∇L = 0  => ∇f = λ∇g     │
                  └─────────────────────────────────────────┘

1. Che cosa ottimizza Lagrange?

Nel calcolo multivariabile standard senza vincoli, cerchiamo i punti in cui il gradiente si annulla:

[math]\nabla f = \mathbf{0}[/math].

Quando introduciamo un vincolo di uguaglianza [math]g(\mathbf{x}) = 0[/math], la ricerca si restringe a un’ipersuperficie (un segmento, una curva o una varietà di dimensione inferiore).

Non cerchiamo più i picchi assoluti della funzione [math]f[/math], ma il punto più alto o più basso raggiungibile senza uscire dal tracciato imposto da [math]g(\mathbf{x}) = 0[/math].

2. Perché funziona? (Il principio di tangenza)

Spostarsi lungo il vincolo significa muoversi lungo le direzioni ortogonali al suo gradiente [math]\nabla g[/math].

Se nel punto in cui ci troviamo il gradiente [math]\nabla f[/math] ha una componente parallela al vincolo, significa che possiamo aumentare (o diminuire) il valore di [math]f[/math] semplicemente muovendoci di poco lungo il vincolo stesso.

L’unico modo in cui non possiamo più migliorare [math]f[/math] rimanendo sul vincolo è che [math]\nabla f[/math] sia completamente perpendicolare al vincolo.

Poiché anche [math]\nabla g[/math] è per definizione perpendicolare alla superficie di vincolo [math]g=0[/math], l’unica condizione possibile di stazionarietà vincolata è che i due vettori gradiente siano paralleli:

[math]\nabla f(\mathbf{x}) = \lambda \nabla g(\mathbf{x})[/math]

Il moltiplicatore [math]\lambda[/math] (escalare) esprime il rapporto di proporzionalità tra la variazione della funzione obiettivo e la variazione del vincolo (spesso interpretato in economia come prezzo ombra).

3. Quando NON funziona? (I punti ciechi del metodo)

Il metodo dei Moltiplicatori di Lagrange è uno strumento potente, ma richiede una condizione fondamentale detta Qualificazione del Vincolo (o Constraint Qualification).

Il metodo fallisce o restituisce risultati incompleti nei seguenti casi:

  • Punti singolari del vincolo ([math]\nabla g = \mathbf{0}[/math]): Se il gradiente del vincolo si annulla in un punto ammissibile, la direzione perpendicolare al vincolo perde di significato matematico. L’equazione [math]\nabla f = \lambda \mathbf{0}[/math] imporrebbe [math]\nabla f = \mathbf{0}[/math], ignorando possibili estremi vincolati reali che si trovano proprio in quella singolarità (es. le cuspidi o gli auto-incroci del vincolo).
  • Vincoli non differenziabili: Se [math]f[/math] o [math]g[/math] presentano spigoli vivi (es. norma [math]L_1[/math] assoluta [math]|x|[/math] senza regolarizzazione), il gradiente non è definito e occorre ricorrere al subgradiente o alle condizioni KKT (Karush-Kuhn-Tucker) estese.
  • Dominio aperto senza limiti: Se la regione ammissibile definita da [math]g(\mathbf{x}) = 0[/math] non è compatta (non è chiusa e limitata), un punto stazionario trovato con Lagrange potrebbe non essere né un massimo né un minimo assoluto, poiché la funzione potrebbe tendere a [math]\pm\infty[/math] all’infinito.

Perché usare Lagrange? Confronto con le Alternative

Prima che Lagrange formalizzasse il suo metodo nel 1788, esistevano già altri modi per affrontare i problemi vincolati.

Perché continuiamo a usare i moltiplicatori invece di sostituire semplicemente le variabili?

Metodo Come funziona Vantaggi Svantaggi / Limiti
Sostituzione Diretta Si esplicita una variabile dal vincolo ([math]y = h(x)[/math]) e si sostituisce nella funzione obiettivo [math]f(x, h(x))[/math]. Concettualmente semplice; riduce il numero di variabili del sistema. Spesso analiticamente impossibile (es. vincoli non lineari complessi); rompe la simmetria del problema; produce equazioni algebricamente insostenibili.
Curve di Livello (Grafico) Si disegnano le curve di livello [math]f(x,y)=c[/math] e si individua ad occhio la curva [math]c[/math] tangente a [math]g(x,y)=0[/math]. Intuizione visiva immediata; ottimo per la didattica e per capire il problema. Applicabile solo a 2 o al massimo 3 dimensioni; non fornisce precisione numerica né dimostrazioni analitiche.
Ottimizzazione Numerica Pura (Penalità / Barriera) Si trasforma il problema in un’ottimizzazione non vincolata aggiungendo una penale al costo: [math]f(x) + \mu [g(x)]^2[/math]. Funziona su problemi ad altissima dimensione (milioni di parametri, AI, reti neurali). Restituisce soluzioni approssimate; richiede il tuning degli iperparametri ([math]\mu[/math]); soffre di problemi di condizionamento numerico.
Moltiplicatori di Lagrange Aggiunge una variabile ausiliaria ([math]\lambda[/math]) mantenendo tutte le variabili originali su un piano di parità. Esatto e analitico; scala perfettamente a [math]n[/math] variabili e [math]m[/math] vincoli; [math]\lambda[/math] fornisce il significato fisico/economico del vincolo. Richiede la risoluzione di un sistema di equazioni (spesso non lineari); necessita della verifica della regolarità del vincolo.

Il verdetto operativo

Usa la Sostituzione Diretta solo se il vincolo è un’equazione lineare banalmente esplicitabile (es. [math]y = 10 – x[/math]).

Usa il Metodo di Lagrange quando hai vincoli non lineari, più vincoli contemporanei, o quando vuoi analizzare la sensibilità della soluzione tramite il valore di [math]\lambda[/math].

Usa l’Ottimizzazione Numerica Pura ( per es.con SciPy e SLSQP) quando le equazioni analitiche derivate da Lagrange diventano troppo complesse da risolvere a mano.

Esercizio 1 – Il recinto contro il muro (difficoltà ★☆☆☆☆)

Testo

Un allevatore vuole realizzare un recinto rettangolare sfruttando un muro già esistente come uno dei quattro lati. Possiede 100 m di rete metallica.

Ti potrebbe interessare anche:  Come Calcolare l'Area Tra Due Curve e il Volume dei Solidi: Esercizi Svolti

Indicando con [math]x[/math] la profondità (lato perpendicolare al muro) e con [math]y[/math] la lunghezza (lato parallelo al muro), il perimetro da recintare è [math]2x + y = 100[/math].

Quali dimensioni [math](x, y)[/math] massimizzano l’area [math]A = xy[/math] del recinto?

✅ Risoluzione

1. Formulazione del problema

Massimizzare

[math]f(x,y) = xy[/math]

soggetto al vincolo di uguaglianza

[math]g(x,y) = 2x + y – 100 = 0, \quad x > 0, \; y > 0.[/math]

2. Lagrangiano

Costruiamo la funzione

[math]\mathcal{L}(x,y,\lambda) = xy – \lambda(2x + y – 100).[/math]

Il segno di [math]\lambda[/math] è ininfluente; scegliamo la forma classica [math]f – \lambda g[/math].

3. Condizioni del primo ordine

[math]\displaystyle \frac{\partial \mathcal{L}}{\partial x} = y – 2\lambda = 0 \Rightarrow y = 2\lambda \tag{1}[/math]

[math]\displaystyle \frac{\partial \mathcal{L}}{\partial y} = x – \lambda = 0 \Rightarrow x = \lambda \tag{2}[/math]

[math]\displaystyle \frac{\partial \mathcal{L}}{\partial \lambda} = -(2x + y – 100) = 0 \Rightarrow 2x + y = 100 \tag{3}[/math]

4. Risoluzione

Da (1) e (2), [math]y = 2x[/math]. Sostituendo in (3):

[math]2x + 2x = 100 \Rightarrow 4x = 100 \Rightarrow x = 25[/math], quindi [math]y = 50[/math].

5. Verifica

Il punto critico è [math](25, 50)[/math], area [math]A = 1250 \text{ m}^2[/math].

Poiché la regione ammissibile (il segmento [math]2x + y = 100[/math] con [math]x, y > 0[/math]) è limitata e chiusa (nel senso topologico, ma gli estremi [math]x = 0[/math] o [math]y = 0[/math] danno area nulla), il punto trovato è un massimo assoluto.

💡 Osservazione strategica

La condizione [math]\nabla f = \lambda \nabla g[/math] esprime la tangenza tra la curva di livello di [math]f[/math] (un’iperbole [math]xy = \text{cost}[/math]) e il vincolo (la retta). Nel punto ottimo, le due curve hanno la stessa retta tangente.

❓ Mini quiz

Nel punto ottimo, il vincolo è tangente a una curva di livello.

Qual è il significato geometrico di questa condizione?


Esercizio 2 – Il contenitore cilindrico senza coperchio (difficoltà ★★☆☆☆)

Testo

Un’azienda produce contenitori cilindrici senza coperchio (solo fondo e superficie laterale).

Deve avere un volume fisso [math]V = 1000 \text{ cm}^3[/math].

Determina il raggio [math]r[/math] e l’altezza [math]h[/math] che minimizzano la superficie totale [math]S = \pi r^2 + 2\pi r h[/math].

✅ Risoluzione

1. Modello

Minimizzare

[math]S(r,h) = \pi r^2 + 2\pi r h[/math]

soggetto a

[math]V(r,h) = \pi r^2 h – 1000 = 0, \quad r > 0, \; h > 0.[/math]

2. Lagrangiano

[math]\mathcal{L}(r,h,\lambda) = \pi r^2 + 2\pi r h – \lambda(\pi r^2 h – 1000).[/math]

3. Derivate

[math]\displaystyle \begin{aligned}
\frac{\partial \mathcal{L}}{\partial r} &= 2\pi r + 2\pi h – 2\lambda \pi r h = 0 \\
&\Rightarrow 2\pi(r + h – \lambda r h) = 0 \tag{1}
\end{aligned}[/math]

[math]\displaystyle \begin{aligned}
\frac{\partial \mathcal{L}}{\partial h} &= 2\pi r – \lambda \pi r^2 = 0 \\
&\Rightarrow \pi r(2 – \lambda r) = 0
\end{aligned}[/math]

Poiché [math]r > 0[/math], otteniamo

[math]\lambda r = 2 \Rightarrow \lambda = \frac{2}{r}. \tag{2}[/math]

Sostituendo in (1):

[math]r + h – \frac{2}{r} r h = r + h – 2h = r – h = 0 \Rightarrow h = r.[/math]

4. Vincolo

[math]\displaystyle \begin{aligned}
\pi r^2 h &= \pi r^3 = 1000 \\
r &= \sqrt[3]{\frac{1000}{\pi}} \approx 6.83 \text{ cm}
\end{aligned}[/math]

Quindi [math]h = r \approx 6.83 \text{ cm}[/math].

5. Natura del punto

La funzione [math]S(r)[/math] ottenuta sostituendo [math]h = V/(\pi r^2)[/math] è [math]S(r) = \pi r^2 + 2V/r[/math], con [math]V = 1000[/math].

La derivata seconda [math]S”(r) = 2\pi + 4V/r^3 > 0[/math], quindi il punto è un minimo globale.

💡 Osservazione

Anche se il vincolo è non lineare, il metodo di Lagrange funziona perché il gradiente del vincolo [math]\nabla V = (2\pi r h, \pi r^2)[/math] non si annulla sulla regione ammissibile ([math]r, h > 0[/math]), quindi la condizione di regolarità (qualificazione del vincolo) è soddisfatta.

❓ Mini quiz

Se il volume [math]V[/math] raddoppiasse, come cambierebbero le dimensioni ottime?


Esercizio 3 – Rendimento di un portafoglio (difficoltà ★★★☆☆)

Testo

Un investitore gestisce due asset. Il rendimento atteso del portafoglio è modellato dalla funzione non lineare [math]R(x,y) = x^2 y[/math], dove [math]x[/math] e [math]y[/math] rappresentano le quote di capitale investite (in milioni). Il profilo di rischio impone un vincolo quadratico stretto:

[math]x^2 + y^2 = 1.[/math]

Trova i punti di massima e minima resa del portafoglio nel rispetto del vincolo di rischio.

✅ Risoluzione

1. Modello

Dobbiamo trovare gli estremi della funzione obiettivo:

[math]f(x,y) = x^2 y[/math]

soggetta al vincolo di uguaglianza:

[math]g(x,y) = x^2 + y^2 – 1 = 0.[/math]

2. Lagrangiano

Costruiamo la funzione ausiliaria:

[math]\mathcal{L}(x,y,\lambda) = x^2 y – \lambda(x^2 + y^2 – 1).[/math]

3. Condizioni del primo ordine (Sistema di Lagrange)

Uguagliamo a zero le derivate parziali:

[math]\displaystyle \begin{cases}
\dfrac{\partial \mathcal{L}}{\partial x} = 2xy – 2\lambda x = 2x(y – \lambda) = 0, \\[6pt]
\dfrac{\partial \mathcal{L}}{\partial y} = x^2 – 2\lambda y = 0, \\[6pt]
x^2 + y^2 = 1.
\end{cases}[/math]

4. Sviluppo e Casi

Dalla prima equazione, [math]2x(y – \lambda) = 0[/math], otteniamo due scenari possibili:

Caso 1: [math]x = 0[/math].

Sostituendo nel vincolo (terza equazione) si ottiene [math]y^2 = 1 \Rightarrow y = \pm 1[/math].

Troviamo i punti [math](0, 1)[/math] e [math](0, -1)[/math]. In entrambi, la funzione obiettivo vale [math]f = 0[/math].

Caso 2: [math]x \neq 0[/math], il che implica [math]y = \lambda[/math].

Sostituendo [math]y = \lambda[/math] nella seconda equazione:

[math]x^2 – 2y^2 = 0 \Rightarrow x^2 = 2y^2.[/math]

Sostituendo questo risultato nel vincolo:

[math]\displaystyle \begin{aligned}
2y^2 + y^2 &= 1 \\
3y^2 &= 1 \\
y &= \pm \frac{1}{\sqrt{3}}
\end{aligned}[/math]

Di conseguenza, le ascisse corrispondenti sono [math]x = \pm \sqrt{\frac{2}{3}}[/math].

Otteniamo quattro punti critici.

Calcoliamo il valore di [math]f(x,y) = x^2 y[/math]:

[math]\left(\pm \sqrt{\frac{2}{3}}, \frac{1}{\sqrt{3}}\right): \quad f = \frac{2}{3\sqrt{3}} \approx 0.385[/math]

[math]\left(\pm \sqrt{\frac{2}{3}}, -\frac{1}{\sqrt{3}}\right): \quad f = -\frac{2}{3\sqrt{3}} \approx -0.385[/math]

5. Classificazione degli estremi

Confrontando i valori ottenuti:

  • Il massimo assoluto è [math]\frac{2}{3\sqrt{3}}[/math] nei punti con [math]y > 0[/math].
  • Il minimo assoluto è [math]-\frac{2}{3\sqrt{3}}[/math] nei punti con [math]y < 0[/math].

Cosa succede nei punti [math](0, 1)[/math] e [math](0, -1)[/math] dove [math]f = 0[/math]?

Analizzando il comportamento della funzione ristretta al vincolo in un intorno molto piccolo di questi punti:

  • Vicino a [math](0, 1)[/math], la coordinata [math]y[/math] rimane positiva. Quindi [math]f(x,y) = x^2y[/math] sarà il prodotto tra un quadrato e un numero positivo, risultando sempre [math]\ge 0[/math]. Poiché in [math](0, 1)[/math] vale esattamente 0, questo punto è un minimo locale vincolato.
  • Vicino a [math](0, -1)[/math], la coordinata [math]y[/math] rimane negativa. Quindi [math]f(x,y) = x^2y[/math] sarà sempre [math]\le 0[/math]. Di conseguenza, [math](0, -1)[/math] è un massimo locale vincolato.
Ti potrebbe interessare anche:  Guida Pratica alla Scelta Ottima: 6 Esercizi Svolti di Microeconomia

💡 Osservazione

Quando il sistema di Lagrange produce casi che sembrano “banali” (come [math]x = 0[/math]), è fondamentale non scartarli. Essi indicano i punti in cui il gradiente del vincolo è ortogonale a un asse, e nascondono spesso estremi locali cruciali per l’analisi completa della funzione.

Dal calcolo manuale al codice: L’Asset Allocation in Python

Se l’Esercizio 3 vi è sembrato astratto, guardatelo attraverso le lenti del codice. Abbiamo appena scritto lo scheletro di un algoritmo di ottimizzazione finanziaria. Se sostituiamo la funzione giocattolo [math]x^2y[/math] con il rendimento atteso reale ([math]\mu^T w[/math]), e il vincolo quadratico [math]x^2 + y^2 = 1[/math] con una vera metrica di varianza di portafoglio ([math]w^T \Sigma w = \sigma^2[/math]), stiamo letteralmente implementando la Teoria Moderna di Portafoglio di Markowitz.

Ecco come tradurre l’architettura logica dell’Esercizio 3 in uno script Python utilizzando scipy.optimize.

L’approccio manuale con il Lagrangiano è perfetto per la didattica, ma nel mondo reale, con matrici di covarianza [math]50 \times 50[/math], i sistemi diventano irrisolvibili a mano. I solver numerici fanno esattamente lo stesso lavoro (cercano le condizioni di stazionarietà dei gradienti) in modo iterativo.

Nel codice implementeremo:

  • Una funzione obiettivo (da minimizzare).
  • Un dizionario per il vincolo di uguaglianza.
  • Il metodo SLSQP (Sequential Least Squares Programming), lo standard de facto in SciPy per gestire vincoli non lineari.
  • Un sistema di validazione per assicurarci che l’ottimizzatore non fallisca silenziosamente restituendo risultati errati.
import numpy as np
from scipy.optimize import minimize

def objective(w):
    """
    Funzione obiettivo: R(x,y) = x^2 * y
    SciPy è progettato per MINIMIZZARE. Per trovare il massimo rendimento,
    restituiamo il valore negativo della funzione.
    """
    x, y = w[0], w[1]
    return -(x**2 * y)

def risk_constraint(w):
    """
    Vincolo di rischio: x^2 + y^2 = 1.
    Per SciPy, i vincoli di uguaglianza (type 'eq') devono essere formulati 
    in modo che la funzione ritorni 0.
    """
    x, y = w[0], w[1]
    return (x**2 + y**2) - 1

def optimize_portfolio():
    # Punto di partenza (initial guess). 
    # Attenzione: i solver numerici sono sensibili ai minimi locali. 
    # Scegliere [0.5, 0.5] spinge l'algoritmo verso il quadrante positivo.
    w0 = np.array([0.5, 0.5])
    
    # Definizione del dizionario dei vincoli
    constraints = [{'type': 'eq', 'fun': risk_constraint}]
    
    # Esecuzione del solver SLSQP
    result = minimize(
        objective, 
        w0, 
        method='SLSQP', 
        constraints=constraints,
        options={'disp': False} # Mantiene l'output pulito nella console
    )
    
    # Validazione rigorosa: mai fidarsi ciecamente dell'output
    if not result.success:
        raise RuntimeError(f"Ottimizzazione fallita: {result.message}")
        
    # Estrazione risultati (ricordandosi di invertire il segno dell'obiettivo)
    x_opt, y_opt = result.x
    max_return = -result.fun
    
    return x_opt, y_opt, max_return

if __name__ == "__main__":
    try:
        x, y, max_r = optimize_portfolio()
        print("=== Risultati Ottimizzazione Vincolata ===")
        print(f"Allocazione Asset X : {x:.4f} (Teorica: {np.sqrt(2/3):.4f})")
        print(f"Allocazione Asset Y : {y:.4f} (Teorica: {1/np.sqrt(3):.4f})")
        print(f"Rendimento Massimo  : {max_r:.4f}")
    except Exception as e:
        print(f"Errore di esecuzione: {e}")
=== Risultati Ottimizzazione Vincolata ===
Allocazione Asset X : 0.8165 (Teorica: 0.8165)
Allocazione Asset Y : 0.5773 (Teorica: 0.5774)
Rendimento Massimo  : 0.3849

Vedere la matematica: La geometria dei Moltiplicatori

La matematica esprime il suo massimo potenziale quando le equazioni si traducono in geometria.

Abbiamo calcolato analiticamente i punti di massimo e minimo del nostro portafoglio, ma cosa significa realmente l’equazione fondante di Lagrange, [math]\nabla f = \lambda \nabla g[/math]?

Per rispondere, usciamo dalla teoria pura e passiamo alla visualizzazione dati.

Lo script Python che segue utilizza numpy e matplotlib per tracciare una mappa esatta del nostro Esercizio 3. Il codice non si limita a disegnare la funzione obiettivo e la circonferenza del rischio, ma è costruito attorno a due accortezze tecniche specifiche per illustrare il meccanismo dei moltiplicatori:

  • Il forcing delle curve di livello: Invece di lasciare a Matplotlib la scelta arbitraria dei contorni, iniettiamo nell’algoritmo il valore esatto dell’ottimo calcolato ([math]f \approx 0.3849[/math]). Questo costringe la libreria a tracciare la curva di livello esatta che sfiora il vincolo, rendendo inequivocabile il punto di tangenza.
  • La prova vettoriale: Attraverso la funzione quiver, calcoliamo e disegniamo i due vettori gradiente (quello della funzione e quello del vincolo) facendoli partire dal punto di ottimo.

Il risultato è la dimostrazione visiva del teorema: nel punto di massima resa, i due gradienti si allineano perfettamente sulla stessa retta.

Ecco lo script Python completo, basato sulle librerie numpy e matplotlib.

Questo codice non si limita a tracciare la funzione, ma utilizza alcune accortezze tipiche della visualizzazione dati (come il forcing del livello ottimo nella lista dei contour) per far risaltare perfettamente la tangenza tra il vincolo e la curva di livello.

import numpy as np
import matplotlib.pyplot as plt

def plot_lagrange_optimization():
    # 1. Creazione dello spazio bidimensionale (griglia)
    x = np.linspace(-1.5, 1.5, 400)
    y = np.linspace(-1.5, 1.5, 400)
    X, Y = np.meshgrid(x, y)

    # 2. Definizione della funzione obiettivo Z = x^2 * y
    Z = (X**2) * Y

    # 3. Coordinate geometriche dell'ottimo (prendiamo il massimo nel 1° quadrante)
    x_opt = np.sqrt(2/3)
    y_opt = 1/np.sqrt(3)
    f_opt = (x_opt**2) * y_opt  # circa 0.3849

    # Inizializzazione della figura
    fig, ax = plt.subplots(figsize=(9, 9))

    # 4. Tracciamento del vincolo (Circonferenza x^2 + y^2 = 1)
    theta = np.linspace(0, 2*np.pi, 200)
    x_c = np.cos(theta)
    y_c = np.sin(theta)
    ax.plot(x_c, y_c, color='red', linewidth=2.5, label='Vincolo: $x^2 + y^2 = 1$')

    # 5. Tracciamento delle curve di livello
    # IL TRUCCO: Inseriamo f_opt e -f_opt esplicitamente nei livelli per forzare 
    # Matplotlib a disegnare esattamente le curve che tangono il vincolo.
    levels = sorted([-0.8, -0.6, -f_opt, -0.1, 0.1, f_opt, 0.6, 0.8])
    cs = ax.contour(X, Y, Z, levels=levels, cmap='viridis', alpha=0.8, linewidths=1.5)
    ax.clabel(cs, inline=True, fontsize=9, fmt='%.2f')

    # 6. Evidenziamo i punti di ottimo assoluto (massimi)
    ax.plot(x_opt, y_opt, 'ko', markersize=7, zorder=5, label='Punto di Max/Tangenza')
    ax.plot(-x_opt, y_opt, 'ko', markersize=7, zorder=5) 

    # 7. Calcolo dei Gradienti nel punto di ottimo (x_opt, y_opt)
    # Gradiente di f(x,y) = (2xy, x^2)
    df_dx = 2 * x_opt * y_opt
    df_dy = x_opt**2

    # Gradiente di g(x,y) = (2x, 2y)
    dg_dx = 2 * x_opt
    dg_dy = 2 * y_opt

    # 8. Visualizzazione dei Gradienti (Quiver plot)
    # Riduciamo la scala per visualizzare chiaramente la collinearità senza invadere il grafico
    ax.quiver(x_opt, y_opt, df_dx, df_dy, color='blue', scale=6, 
              width=0.005, zorder=6, label=r'$\nabla f$ (Gradiente Obiettivo)')
    ax.quiver(x_opt, y_opt, dg_dx, dg_dy, color='green', scale=6, 
              width=0.005, zorder=6, label=r'$\nabla g$ (Gradiente Vincolo)')

    # 9. Estetica del grafico
    ax.set_aspect('equal', 'box') # Mantiene le proporzioni geometriche (il cerchio non diventa ellisse)
    ax.set_xlim([-1.3, 1.3])
    ax.set_ylim([-1.3, 1.3])
    
    # Assi cartesiani
    ax.axhline(0, color='black', linewidth=0.8, linestyle='--')
    ax.axvline(0, color='black', linewidth=0.8, linestyle='--')
    
    # Etichette e Legenda
    ax.set_title('Metodo di Lagrange: Collinearità dei Gradienti', fontsize=14, pad=15)
    ax.set_xlabel('Asse X (Quota Asset 1)', fontsize=11)
    ax.set_ylabel('Asse Y (Quota Asset 2)', fontsize=11)
    ax.legend(loc='upper right', framealpha=0.9)
    ax.grid(True, linestyle=':', alpha=0.6)

    plt.tight_layout()
    plt.show()

if __name__ == "__main__":
    plot_lagrange_optimization()

Collinearità dei gradienti

Come leggere il grafico

Ti potrebbe interessare anche:  Tema d'Esame Matematica per le Scienze Economiche: Massimizzare il Rendimento Atteso Corretto per il Rischio

L’immagine traduce in pura geometria tutto il lavoro analitico ed il codice svolto finora.

Per comprenderne a pieno il significato, analizziamo il grafico nei suoi elementi fondamentali:

Il recinto rosso (Il Vincolo): La circonferenza rossa rappresenta la nostra equazione [math]x^2 + y^2 = 1[/math]. È il confine invalicabile imposto dal nostro profilo di rischio. Qualsiasi portafoglio reale e ammissibile deve trovarsi esattamente su questa linea. Non possiamo investire né all’interno né all’esterno.

La topografia colorata (Le Curve di Livello): Le linee curve di sfondo rappresentano il rendimento atteso [math]f(x,y) = x^2 y[/math]. Come in una mappa topografica, i colori indicano l'”altitudine” del rendimento: spostandosi verso le linee gialle e verdi saliamo verso rendimenti maggiori, mentre scivolando verso le linee viola sprofondiamo in rendimenti negativi.

I punti neri (Gli Ottimi): Guardate i due punti neri nel semipiano superiore. Sono i punti esatti in cui la circonferenza rossa “sfiora” (è tangente a) la curva di livello più alta possibile (quella con valore [math]\approx 0.38[/math]). È il massimo rendimento che possiamo ottenere senza uscire dal nostro recinto di rischio. Se cercassimo di raggiungere la curva gialla ([math]0.80[/math]), dovremmo inevitabilmente abbandonare la linea rossa, violando le regole del problema.

Le frecce sovrapposte (La magia di Lagrange): Dal punto di ottimo in alto a destra partono due vettori.

  • La freccia blu, parzialmente coperta ([math]\nabla f[/math]), è il gradiente della funzione obiettivo: indica la direzione in cui il rendimento cresce più violentemente.
  • La freccia verde ([math]\nabla g[/math]) è il gradiente del vincolo, che punta sempre ortogonalmente verso l’esterno della circonferenza.

Il significato geometrico: Nel punto di tangenza, i due vettori sono perfettamente sovrapposti (collineari). Questa è la prova visiva della condizione di Lagrange: [math]\nabla f = \lambda \nabla g[/math]. Geometricamente, significa che la “spinta” per aumentare ulteriormente il rendimento (freccia blu) va a sbattere perpendicolarmente contro il muro del nostro vincolo (freccia verde). Qualsiasi passo laterale lungo il cerchio rosso ci farebbe “scendere” verso curve di livello inferiori. Abbiamo formalmente ottimizzato il sistema.


📚 Risposte ai Mini Quiz

Esercizio 1

Domanda: Nel punto ottimo, il vincolo è tangente a una curva di livello. Qual è il significato geometrico di questa condizione?

Risposta:

La condizione [math]\nabla f = \lambda \nabla g[/math] implica che i gradienti sono paralleli. Geometricamente, il gradiente di [math]f[/math] è perpendicolare alle curve di livello di [math]f[/math], e il gradiente di [math]g[/math] è perpendicolare al vincolo. Se i due gradienti sono paralleli, allora le rette tangenti alla curva di livello e al vincolo coincidono. Ciò significa che muovendosi lungo il vincolo, la funzione [math]f[/math] non varia al primo ordine, cioè siamo in un punto stazionario vincolato.

Esercizio 2

Domanda: Se il volume [math]V[/math] raddoppiasse, come cambierebbero le dimensioni ottime?

Risposta:

Dalla soluzione [math]r = h = (V/\pi)^{1/3}[/math]. Se [math]V \to 2V[/math], allora:

[math]\displaystyle \begin{aligned}
r_{\text{nuovo}} &= \left(\frac{2V}{\pi}\right)^{1/3} \\
&= 2^{1/3} \left(\frac{V}{\pi}\right)^{1/3} \\
&= 2^{1/3} r_{\text{vecchio}}
\end{aligned}[/math]

Quindi sia raggio che altezza aumentano di un fattore [math]\sqrt[3]{2} \approx 1.26[/math]. La forma rimane invariata ([math]r = h[/math]).


📐Ottimizzazione matematica, moltiplicatori di Lagrange e applicazioni alla microeconomia

Se vuoi approfondire le tecniche di ottimizzazione utilizzate in matematica, economia e ingegneria, questi articoli ti guideranno dai principi teorici dei moltiplicatori di Lagrange alle condizioni di Karush-Kuhn-Tucker (KKT), fino ad applicazioni concrete nella funzione di produzione Cobb-Douglas, nella massimizzazione del profitto e nella minimizzazione dei costi.

👉Come usare i moltiplicatori di Lagrange: esempio pratico e spiegazione teorica

👉Funzione lagrangiana: risolvere problemi di ottimizzazione con Lagrange e KKT

👉Ottimizzazione con le derivate: 6 esempi concreti per massimizzare profitti e risorse

👉Studio di funzione applicato: casi reali di ottimizzazione, costi e ingegneria

👉Funzione Cobb-Douglas: esercizi svolti su utilità, minimizzazione dei costi e massimizzazione del profitto

(4)

PubblicitàPubblicità