Gradiente funzione composta
Ci sono quei giorni in cui tutte le certezze ti sembrano crollare sotto i piedi... Oggi è uno di questi
Parliamo di composizioni di funzioni. In breve sia $\mathbf{f}: RR^n \to RR^m$ e sia $\mathbf{g}: RR^k \to RR^n$. Allora:
\[ \mathrm{D}[\mathbf{f} \circ \mathbf{g}] = (\mathrm{D}\mathbf{f} \circ \mathbf{g}) \mathrm{D}\mathbf{g}\]
dove con $ \mathbf{D}$ indico l'operatore che ad una funzione associa la sua matrice derivata/jacobiana.
Sia ora $h: RR^n \to RR$. Consideriamo la derivata della composizione $h \circ \mathbf{g}$:
\[ \mathrm{D}[h \circ \mathbf{g}] = (\mathrm{D}\text{h} \circ \mathbf{g}) \mathrm{D}\mathbf{g}\]
La matrice \(\mathrm{D}\text{h}\) non è altro che la matrice la cui prima riga è il gradiente (vedere qui).
Se ora, come è solito fare, identifichiamo, tramite l'isomorfismo con lo spazio duale, il gradiente come un vettore colonna, possiamo scrivere la stessa formula trasponendo la matrice (ricordiamo che $(\mathbf{v}^T\text{A})^T = \text{A}^T\mathbf{v}$):
\[(\mathrm{D}\mathbf{g})^T (\mathrm{D}\text{h} \circ \mathbf{g})^T = (\mathrm{D}\mathbf{g})^T (\nabla h \circ \mathbf{g})\]
Avendo trasposto tutto non otterremo più un vettore riga, ma anche il risultato sarà un vettore colonna.
In definitiva si avrebbe:
\[ \nabla (h \circ \mathbf{g}) = (\mathrm{D}\mathbf{g})^T (\nabla h \circ \mathbf{g})\]
-----
Più volte ho trovato la formula del gradiente di una funzione composta scritta così:
\[\nabla (h \circ \mathbf{g}) = \mathrm{D}\mathbf{g} (\nabla h \circ \mathbf{g})\]
Il che andrebbe bene se non fosse che la matrice non è trasposta che, carta e penna alla mano, non è una cosa da poco.
Sto sbagliando a ragionare io? Ho riempito scartoffie tutta la mattina non trovandomi a colpa di quella trasposizione
Grazie in anticipo

Parliamo di composizioni di funzioni. In breve sia $\mathbf{f}: RR^n \to RR^m$ e sia $\mathbf{g}: RR^k \to RR^n$. Allora:
\[ \mathrm{D}[\mathbf{f} \circ \mathbf{g}] = (\mathrm{D}\mathbf{f} \circ \mathbf{g}) \mathrm{D}\mathbf{g}\]
dove con $ \mathbf{D}$ indico l'operatore che ad una funzione associa la sua matrice derivata/jacobiana.
Sia ora $h: RR^n \to RR$. Consideriamo la derivata della composizione $h \circ \mathbf{g}$:
\[ \mathrm{D}[h \circ \mathbf{g}] = (\mathrm{D}\text{h} \circ \mathbf{g}) \mathrm{D}\mathbf{g}\]
La matrice \(\mathrm{D}\text{h}\) non è altro che la matrice la cui prima riga è il gradiente (vedere qui).
Se ora, come è solito fare, identifichiamo, tramite l'isomorfismo con lo spazio duale, il gradiente come un vettore colonna, possiamo scrivere la stessa formula trasponendo la matrice (ricordiamo che $(\mathbf{v}^T\text{A})^T = \text{A}^T\mathbf{v}$):
\[(\mathrm{D}\mathbf{g})^T (\mathrm{D}\text{h} \circ \mathbf{g})^T = (\mathrm{D}\mathbf{g})^T (\nabla h \circ \mathbf{g})\]
Avendo trasposto tutto non otterremo più un vettore riga, ma anche il risultato sarà un vettore colonna.
In definitiva si avrebbe:
\[ \nabla (h \circ \mathbf{g}) = (\mathrm{D}\mathbf{g})^T (\nabla h \circ \mathbf{g})\]
-----
Più volte ho trovato la formula del gradiente di una funzione composta scritta così:
\[\nabla (h \circ \mathbf{g}) = \mathrm{D}\mathbf{g} (\nabla h \circ \mathbf{g})\]
Il che andrebbe bene se non fosse che la matrice non è trasposta che, carta e penna alla mano, non è una cosa da poco.
Sto sbagliando a ragionare io? Ho riempito scartoffie tutta la mattina non trovandomi a colpa di quella trasposizione

Grazie in anticipo

Risposte
Ottima discussione, anche quelle linkate.
Anche per me è un argomento che sembra saltare fuori da qualche cappello magico, siccome non l'ho mai approfondito, come hai fatto tu. Leggendo i vari contributi, mi sono schiarito le idee.
Anche per me è un argomento che sembra saltare fuori da qualche cappello magico, siccome non l'ho mai approfondito, come hai fatto tu. Leggendo i vari contributi, mi sono schiarito le idee.
Invece di perdere una mattina a scervellarsi sull'abstract nonsense, fissa un sistema di coordinate e fai i conti, come farebbe un vero ingegnere (
). Si fa prima e si capisce subito chi ha ragione. (Anche le notazioni troppo astratte a base di pallini \(\circ\) finiscono per confondere, in questi casi). Nello specifico, abbiamo fissato un punto \(p\) di coordinate \(x^1\ldots x^n\) e vogliamo calcolare il gradiente
\[
\nabla \left[ h(g(p))\right].
\]
Sia che esso sia un vettore riga o un vettore colonna, la sua \(i\)-esima componente è
\[
\frac{\partial }{\partial x^i} \left( h(g(p)\right) = \sum_{ij} \frac{\partial h}{\partial x^i}\left( g(p)\right) \frac{\partial g^i}{\partial x^j} (p).
\]
Nota: Abbiamo finito. Questa formula contiene tutte le informazioni necessarie a esplicitare il gradiente. Ma se proprio vogliamo metterlo in una forma coordinate-free (il che può essere utile), ci basta dare un nome alla matrice
\[
Dg(p)=\left( \frac{\partial g^i}{\partial x^j} (p)\right)_{i, j}
\]
mettendoci d'accordo sul fatto che \(i\) è l'indice di riga e \(j\) è l'indice di colonna, e fare lo stesso col vettore
\[
\nabla h(g(p))= \left( \frac{\partial h}{\partial x^i}\left( g(p)\right) \right)_i,
\]
mettendoci d'accordo sul fatto che \(i\) è l'indice di colonna, cosicché si tratta di un vettore riga. Con queste convenzioni, abbiamo che
\[
\nabla(h(g(p)))=\nabla h(g(p)) . Dg(p),
\]
nel senso del prodotto righe per colonne.
Questa però non è la verità assoluta: avremmo potuto scambiare l'ordine degli indici, o addirittura interpretare il prodotto come colonne per righe (Non è uno scherzo! C'è chi lo fa). Questo avrebbe cambiato tutto, tranne la formula in coordinate, che è inequivocabile.

\[
\nabla \left[ h(g(p))\right].
\]
Sia che esso sia un vettore riga o un vettore colonna, la sua \(i\)-esima componente è
\[
\frac{\partial }{\partial x^i} \left( h(g(p)\right) = \sum_{ij} \frac{\partial h}{\partial x^i}\left( g(p)\right) \frac{\partial g^i}{\partial x^j} (p).
\]
Nota: Abbiamo finito. Questa formula contiene tutte le informazioni necessarie a esplicitare il gradiente. Ma se proprio vogliamo metterlo in una forma coordinate-free (il che può essere utile), ci basta dare un nome alla matrice
\[
Dg(p)=\left( \frac{\partial g^i}{\partial x^j} (p)\right)_{i, j}
\]
mettendoci d'accordo sul fatto che \(i\) è l'indice di riga e \(j\) è l'indice di colonna, e fare lo stesso col vettore
\[
\nabla h(g(p))= \left( \frac{\partial h}{\partial x^i}\left( g(p)\right) \right)_i,
\]
mettendoci d'accordo sul fatto che \(i\) è l'indice di colonna, cosicché si tratta di un vettore riga. Con queste convenzioni, abbiamo che
\[
\nabla(h(g(p)))=\nabla h(g(p)) . Dg(p),
\]
nel senso del prodotto righe per colonne.
Questa però non è la verità assoluta: avremmo potuto scambiare l'ordine degli indici, o addirittura interpretare il prodotto come colonne per righe (Non è uno scherzo! C'è chi lo fa). Questo avrebbe cambiato tutto, tranne la formula in coordinate, che è inequivocabile.
Ti ringrazio ancora una volta. Le tue risposte sono sempre molto utili

"dissonance":
Invece di perdere una mattina a scervellarsi sull'abstract nonsense, fissa un sistema di coordinate e fai i conti, come farebbe un vero ingegnere ()...
Spero si sia colta l'ironia di questo passaggio. Infatti chi parla è uno che ha perso moltissime mattine (e sere) a scervellarsi su vari abstract nonsense.

"Emar":
Più volte ho trovato la formula del gradiente di una funzione composta scritta così:
\[\nabla (h \circ \mathbf{g}) = \mathrm{D}\mathbf{g} (\nabla h \circ \mathbf{g})\]
Ma in questa formula le dimensioni delle matrici non tornano, o no?
"_fabricius_":
[quote="Emar"]
Più volte ho trovato la formula del gradiente di una funzione composta scritta così:
\[\nabla (h \circ \mathbf{g}) = \mathrm{D}\mathbf{g} (\nabla h \circ \mathbf{g})\]
Ma in questa formula le dimensioni delle matrici non tornano, o no?[/quote]
Appunto! Se si considera il gradiente come colonna è necessario trasporre \(\mathrm{D}\mathbf{g}\) in quella formula.
In ogni caso, dopo qualche tempo la risposta di dissonance è la più soddisfacente, la notazione a indici è l'unica che conta. Il come organizzare il tutto in matrici e vettori è relativo.