Discussione:
gradienti... (2)
(troppo vecchio per rispondere)
nonloso
2008-07-27 00:31:24 UTC
Permalink
Sia f(x,y)=e^(-(x-a)^2 -(y-b)^2), a,b>0 definita su R^2 (un esempio
significativo per la classe di funzioni di interesse).
Sia (x0,y0) tale che x0 < x_cima=a e y0 < y_cima=b

Vorrei trovare la direzione compresa fra i versori (-1,0) e (0,-1)
(guardando in senso antiorario) che ha la derivata direzionale massima
(cioè la direzione in cui la f _decresce_ di meno, giusto?).


Cosa faccio? Trovo la derivata direzionale in (x0,y0) che è data dal
prodotto scalare di <grad(f(x0,y0)), [k, sqrt(1-k^2) ]'> e cerco di
trovarne il massimo.

Si ha:

f(x0,y0, [k,sqrt(1-k^2)])=
|-2*(x0-a)*e^(-(x0-a)^2 -(y0-b)^2)| * |k, sqrt(1-k^2)|
|-2*(y0-b)*e^(-(x0-a)^2 -(y0-b)^2)|

= -2 e^(-(x0-a)^2 +(y0-b)^2) * (k*(x0-a) + sqrt(1-k^2)*(y0-b))

A questo punto ne devo trovare il massimo e quindi derivo la precedente
rispetto a k e pongo uguale a zero. Ottengo

k*(y0-b) = (x0-a)*sqrt(1-k^2),

portando a destra ed elevando a quadrato ho

k^2 = (x0-a)^2 / ((x0-a)^2 + (y0-b)^2)

e visto che deve essere -1<=k<=0, ho

k = - (x0-a) / sqrt((x0-a)^2 + (y0-b)^2).

Ora verifico che effettivamente sia un massimo (potrebbe per esempio
essere un minimo). A questo punto però devo verificare anche il valore
della derivata direzionale nei punti estremi (-1,0) e (0,-1) e quello
che cerco è dato da quello che porta il maggiore valore della derivata
direzionale f(x0,y0, [k,sqrt(1-k^2)]).

E' giusta questa cosa?
Ci sono metodi più furbi?


Ciao
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
?manu*
2008-07-27 06:57:24 UTC
Permalink
Post by nonloso
Sia f(x,y)=e^(-(x-a)^2 -(y-b)^2), a,b>0 definita su R^2 (un esempio
significativo per la classe di funzioni di interesse).
Sia (x0,y0) tale che x0 < x_cima=a e y0 < y_cima=b
Vorrei trovare la direzione compresa fra i versori (-1,0) e (0,-1)
(guardando in senso antiorario) che ha la derivata direzionale massima
(cioè la direzione in cui la f _decresce_ di meno, giusto?).
[...]
Ci sono metodi più furbi?
La funzione è costante sulle circonferenze centrate in (a,b) che quindi
sono curve di livello di f. Il gradiente è ortogonale alle curve di
livello quindi grad f è radiale rispetto ad (a,b), come hai verificato.

Per sapere il verso del gradiente, basta che studi la derivata radiale
della funzione ovvero g(r) = e^(-r^2) e vedi facilmente che per r>0 la
funzion è decrescente, dunque il gradiente è diretto verso il punto
"centrale" (a,b).

La funzione che stai studiando è davvero un prototipo, si chiama
"gaussiana" e sicuramente è utile memorizzarne la forma (a campana).

E.
nonloso
2008-07-27 12:48:44 UTC
Permalink
Post by ?manu*
Post by nonloso
Sia f(x,y)=e^(-(x-a)^2 -(y-b)^2), a,b>0 definita su R^2 (un esempio
significativo per la classe di funzioni di interesse).
Sia (x0,y0) tale che x0 < x_cima=a e y0 < y_cima=b
Vorrei trovare la direzione compresa fra i versori (-1,0) e (0,-1)
(guardando in senso antiorario) che ha la derivata direzionale massima
(cioè la direzione in cui la f _decresce_ di meno, giusto?).
[...]
Ci sono metodi più furbi?
La funzione è costante sulle circonferenze centrate in (a,b) che quindi
sono curve di livello di f. Il gradiente è ortogonale alle curve di
livello quindi grad f è radiale rispetto ad (a,b), come hai verificato.
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?

Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
e ho riottenuto nuovamente:

k^2 = (@f/@x)^2 / ( (@f/@x)^2 + (@f/@y)^2 )

Coincidenza? La funzione che ho considerato è questa:

f(x,y)=a*x -x log x +b*y - y log y

La derivata direzionale è data da:

|a - log x0 -1| [ k, sqrt(1-k^2)]
|b - log y0 -1|

e ponendo uguale a zero la sua derivata ottengo che k è dato dalla formula
sopra (se per quel valore è un massimo, altrimenti bisogna andare a vedere
i valori nelle direzioni [-1,0] e [0, 1] ).

Intuitivamente, credo che questa cosa sia vera (supponiamo pure
differenziabilità e unimodalità) perchè le componenti x e y sono in
qualche modo "indipendenti", cioè perchè non ci siano termini che
"interagiscono mutuamente" tipo log(x+y), log(x+y^2), torna questa cosa o
è falsa?
Post by ?manu*
Per sapere il verso del gradiente, basta che studi la derivata radiale
della funzione ovvero g(r) = e^(-r^2) e vedi facilmente che per r>0 la
funzion è decrescente, dunque il gradiente è diretto verso il punto
"centrale" (a,b).
Ok, altro concetto interessante. Ho trovato poco googlando su derivata
radiale.. ma credo che sei passato in coordinate polari con questa
sostituzione: x-a=r*cos alpha, y-b=r*sen alpha

Ciao!
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
?manu*
2008-07-27 13:03:09 UTC
Permalink
Post by nonloso
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?
Non credo che sia il modo migliore. Vediamo...
Post by nonloso
Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
Coincidenza?
La direzione di massima crescita della funzione è il vettore gradiente.
Dunque quello che tu stai cercando di fare è trovare l'inclinazione di
questo vettore.

Cioè dato un vettore v=(v_x,v_y) vuoi trovare k tale che
v=|v| (k,sqrt(1-k^2). Se risolvi trovi la tua formula:

k= v_x / |v| = v_x / sqrt(v_x^2 + v_y^2).

In generale questa decomposizione dei vettori non è molto utile. Se
scrivi i vettori unitari come v=(k,sqrt(1-k^2)) stai scrivendo solo
quelli con y>0. Dunque dovresti distinguere due casi. Inoltre non c'è
simmetria tra x e y. Quasi sicuramente è meglio utilizzare le coordinate
polari scivendo v=(cos t, sin t).
Post by nonloso
Post by ?manu*
Per sapere il verso del gradiente, basta che studi la derivata radiale
della funzione ovvero g(r) = e^(-r^2) e vedi facilmente che per r>0 la
funzion è decrescente, dunque il gradiente è diretto verso il punto
"centrale" (a,b).
Ok, altro concetto interessante. Ho trovato poco googlando su derivata
radiale.. ma credo che sei passato in coordinate polari con questa
sostituzione: x-a=r*cos alpha, y-b=r*sen alpha
Sì.

E.
nonloso
2008-07-27 13:21:15 UTC
Permalink
Post by ?manu*
Post by nonloso
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?
Non credo che sia il modo migliore. Vediamo...
Post by nonloso
Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
Coincidenza?
La direzione di massima crescita della funzione è il vettore gradiente.
Nel thread "gradienti..." si è visto che non è così però...
C'è cmq confusione su questo concetto... in università anche a me hanno detto
che è la direzione di massima crescita ma a quano pare non è così.. perchè
allora si dice questo?
Post by ?manu*
Dunque quello che tu stai cercando di fare è trovare l'inclinazione di
questo vettore.
No... il mio obiettivo non è quello di trovare il gradiente, ma quello di
trovare la massima pendenza fra le direzioni [-1,0] e [0,-1] (viste in senso
antiorario), visto che nel punto di interesse, la funzione è monotona
crescente in tutte le direzioni, la mia ricerca ristretta [-1,0] e [0,-1]
dovrebbe dare la direzione in cui la funzione cresce meno velocemente. Mi sbaglio?

E' questo il mio obiettivo
Post by ?manu*
Cioè dato un vettore v=(v_x,v_y) vuoi trovare k tale che
k= v_x / |v| = v_x / sqrt(v_x^2 + v_y^2).
In generale questa decomposizione dei vettori non è molto utile. Se
scrivi i vettori unitari come v=(k,sqrt(1-k^2)) stai scrivendo solo
quelli con y>0.
Ah cavoli è vero... la mia y è _sempre_ minore di zero (con le ipotesi sopra),
ma anche la mia x ! Quindi se considero v=-(k,sqrt(1-k^2)) sono a posto! Evvai! ;)

Ciao
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
nonloso
2008-07-27 13:23:23 UTC
Permalink
[...] No... il mio obiettivo non è quello di trovare il gradiente, ma
quello di
trovare la massima pendenza fra le direzioni [-1,0] e [0,-1] (viste in senso
antiorario), visto che nel punto di interesse, la funzione è monotona
crescente in tutte le direzioni,
Sorry, tolgo "in tutte le direzioni"
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
?manu*
2008-07-27 13:38:09 UTC
Permalink
Post by nonloso
Post by ?manu*
Post by nonloso
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?
Non credo che sia il modo migliore. Vediamo...
Post by nonloso
Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
Coincidenza?
La direzione di massima crescita della funzione è il vettore gradiente.
Nel thread "gradienti..." si è visto che non è così però...
Serve che la funzione sia differenziabile, e nel tuo caso lo è.
Post by nonloso
C'è cmq confusione su questo concetto... in università anche a me hanno detto
che è la direzione di massima crescita ma a quano pare non è così.. perchè
allora si dice questo?
Molti assumono che il gradiente sia definito solo quando la funzione è
differenziabile.
Post by nonloso
Post by ?manu*
Dunque quello che tu stai cercando di fare è trovare l'inclinazione di
questo vettore.
No... il mio obiettivo non è quello di trovare il gradiente, ma quello di
trovare la massima pendenza fra le direzioni [-1,0] e [0,-1]
Allora precisiamo la questione della massima pendenza.

Sia f è una funzione differenziabile in punto x_0. Se v è un vettore
allora si ha:

@f/@v (x_0) = (grad f(x_0), v)
dove ( , ) è il prodotto scalare

in particolare se grad f(x_0) è diverso da 0 il massimo di @f/@v al
variare di v tra tutti i vettori unitari si ottiene per

v=grad f(x_0)/|grad f(x_0)|

ovvero per quel vettore unitario che ha la stessa direzione e verso di
f. Il minimo si ottiene nella direzione opposta. Derivate nulle si
ottengono nelle direzioni ortogonali. Il valore massimo risulta essere
|grad f(x_0)| e il valore minimo è -|grad f(x_0)|. Se grad f(x_0)=0
(vettore nullo) allora tutte le derivate direzionali sono nulle.

E.




(viste in senso
Post by nonloso
antiorario), visto che nel punto di interesse, la funzione è monotona
crescente in tutte le direzioni, la mia ricerca ristretta [-1,0] e [0,-1]
dovrebbe dare la direzione in cui la funzione cresce meno velocemente. Mi sbaglio?
E' questo il mio obiettivo
nonloso
2008-07-27 13:55:49 UTC
Permalink
Innanzi tutto ti ringrazio per la pazienza che stai avendo in tutti questi miei
thread.
Grazie.


?manu* <***@NO.math.unifi.SPAM.it> ha scritto:
[...]
Post by ?manu*
Post by nonloso
Post by ?manu*
Dunque quello che tu stai cercando di fare è trovare l'inclinazione di
questo vettore.
No... il mio obiettivo non è quello di trovare il gradiente, ma quello di
trovare la massima pendenza fra le direzioni [-1,0] e [0,-1]
Allora precisiamo la questione della massima pendenza.
Sia f è una funzione differenziabile in punto x_0. Se v è un vettore
@f/@v (x_0) = (grad f(x_0), v)
dove ( , ) è il prodotto scalare
variare di v tra tutti i vettori unitari si ottiene per
v=grad f(x_0)/|grad f(x_0)|
ovvero per quel vettore unitario che ha la stessa direzione e verso di
f.
Ok, ma non sto cercando il massimo fra tutti i vettori unitari
Post by ?manu*
Il minimo si ottiene nella direzione opposta.
Ok, ma non sto cercando il minimo
Post by ?manu*
Derivate nulle si
ottengono nelle direzioni ortogonali.
Ok, ma non 'è neancora quello che cerco


Le direzioni che cerco variano in un intervallo, e cerco il massimo in solo
quell'intervallo.
Questo intervallo parte dalla direzione [-1,0] si muove in senso antiorario per
90 gradi e si ferma in [0,-1]. All'interno di questo intervallo cerco la
direzione in cui la f decresce di meno

Per ipotesi, so che per queste direzioni la f è sicuramente decrescente perchè
il punto (x0,y0) viene prima di (x_cima,y_cima) e assumiamo unimodalità.

Per fare questo fisso una direzione parametrizzata da k, cioè u=[-k,
-sqrt(1-k^2)] con k>=0, trovo <grad(f),u> e studio il massimo della funzione
risultante.

Questo è il mio problema... non so se mi sono spiegato bene...
E' corretto il modo in cui procedo?


Ciao
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
?manu*
2008-07-27 14:29:01 UTC
Permalink
Post by nonloso
Post by ?manu*
Sia f è una funzione differenziabile in punto x_0. Se v è un vettore
@f/@v (x_0) = (grad f(x_0), v)
dove ( , ) è il prodotto scalare
variare di v tra tutti i vettori unitari si ottiene per
v=grad f(x_0)/|grad f(x_0)|
ovvero per quel vettore unitario che ha la stessa direzione e verso di
f.
Ok, ma non sto cercando il massimo fra tutti i vettori unitari
E' proprio quello che ti dice quel teorema. Il valore massimo tra tutti
i vettori unitari è |grad f|.
Post by nonloso
Le direzioni che cerco variano in un intervallo, e cerco il massimo in solo
quell'intervallo.
Questo intervallo parte dalla direzione [-1,0] si muove in senso antiorario per
90 gradi e si ferma in [0,-1]. All'interno di questo intervallo cerco la
direzione in cui la f decresce di meno
Cioè tutte le direzioni rappresentate nel terzo quadrante. Se grad f si
trova nel terzo quadrante (x<0, y<0) allora |grad f| è la tua soluzione.
Altrimenti la soluzione è uno dei vettori (-1,0) o (0,-1). Prendi quello
in cui la derivata è più grande.
Post by nonloso
Per ipotesi, so che per queste direzioni la f è sicuramente decrescente perchè
il punto (x0,y0) viene prima di (x_cima,y_cima) e assumiamo unimodalità.
Non capisco cosa significa "viene prima" per vettori. Nè ho ancora
capito cosa intendi con "unimodalità". Se f è decrescente in tutte le
direzioni del terzo quadrante, allora il gradiente si trova nel primo
quadrante, e tra tutti i vettori del terzo quadrante basta che controlli
(-1,0) e (1,0) come ti ho detto prima. Questo deriva dal fatto il
massimo di una funzione lineare su una certa regione (se esiste) si
trova sempre sul bordo della regione.
Post by nonloso
Per fare questo fisso una direzione parametrizzata da k, cioè u=[-k,
-sqrt(1-k^2)] con k>=0, trovo <grad(f),u> e studio il massimo della funzione
risultante.
Lascia perdere questa parametrizzazione. Se proprio vuoi parametrizzare
il tuo arco di circonferenza usa (cos(t),sin(t)) che è meglio.

E.
nonloso
2008-07-27 14:49:44 UTC
Permalink
Post by ?manu*
[...] Le direzioni che cerco variano in un intervallo, e cerco il massimo in
solo
Post by ?manu*
quell'intervallo.
Questo intervallo parte dalla direzione [-1,0] si muove in senso antiorario per
90 gradi e si ferma in [0,-1]. All'interno di questo intervallo cerco la
direzione in cui la f decresce di meno
Cioè tutte le direzioni rappresentate nel terzo quadrante. Se grad f si
trova nel terzo quadrante (x<0, y<0) allora |grad f| è la tua soluzione.
Ok
Post by ?manu*
Altrimenti la soluzione è uno dei vettori (-1,0) o (0,-1). Prendi quello
in cui la derivata è più grande.
Ecco! E' questo il mio caso!
Infatti, (x0,y0) "viene prima" di (x_cima, y_cima), dove viene prima significa
che x0<x_cima e y0<y_cima e cerco le direzioni del terzo quadrante.. e il
gradiente deve stare nel primo quadrante
Post by ?manu*
Per ipotesi, so che per queste direzioni la f è sicuramente decrescente perchè
il punto (x0,y0) viene prima di (x_cima,y_cima) e assumiamo unimodalità.
Non capisco cosa significa "viene prima" per vettori. Nè ho ancora
capito cosa intendi con "unimodalità".
Vedi sopra, e per unimodalità intendo che ha una sola moda:
http://en.wikipedia.org/wiki/Unimodal_distribution
Post by ?manu*
Se f è decrescente in tutte le
direzioni del terzo quadrante, allora il gradiente si trova nel primo
quadrante, e tra tutti i vettori del terzo quadrante basta che controlli
(-1,0) e (1,0) come ti ho detto prima. Questo deriva dal fatto il
massimo di una funzione lineare su una certa regione (se esiste) si
trova sempre sul bordo della regione.
Ecco questo devo capirlo bene che è importante. Magari se puoi consigliarmi dei
lucidi te ne sarei grato. Come si dimostra questa cosa?
Comunque non sto considerando funzioni lineari...

Ciao
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
Kiuhnm
2008-07-27 13:57:57 UTC
Permalink
Post by nonloso
Post by ?manu*
Post by nonloso
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?
Non credo che sia il modo migliore. Vediamo...
Post by nonloso
Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
Coincidenza?
La direzione di massima crescita della funzione è il vettore gradiente.
Nel thread "gradienti..." si è visto che non è così però...
Si è detto che f deve essere differenziabile e nel tuo caso lo è.

Cerca di capire il perché.
Si dimostra facilmente che se f è differenziabile in 'a' allora esiste
una matrice L che soddisfa certe ipotesi. Questa matrice è la Jacobiana
che, nel caso di funzioni R^m->R, corrisponde al gradiente. Si dimostra
facilmente che la derivata rispetto a un vettore v si può ottenere
moltiplicando la Jacobiana per v, cioè il gradiente per v, nel nostro caso.
gradf(a)*v è il prodotto scalare che sappiamo essere uguale a
|gradf(a)||v|cos(phi), dove phi è l'angolo formato dai due vettori.
Se v è un versore, abbiamo semplicemente |gradf(a)|cos(phi). Dato che
|cos(phi)|<=1, si ha
|gradf(a)*v| = |gradf(a)|cos(phi) <= |gradf(a)|.
Visto che cos(phi) è massimo quando phi = 0, è chiaro che
quell'espressione è massima quando v è un versore che ha la stessa
direzione del gradiente, quindi il gradiente, se non nullo, indica la
direzione di massima variazione.

Kiuhnm
nonloso
2008-07-27 14:18:16 UTC
Permalink
Post by Kiuhnm
Post by nonloso
Post by ?manu*
Post by nonloso
Ok, credi il metodo che ho seguito si possa applicare sempre (sotto
ipotesi di differenziabilità e unimodalità)?
Non credo che sia il modo migliore. Vediamo...
Post by nonloso
Mi sembra di sì... ho rifatto lo stesso procedimento con un'altra funzione
Coincidenza?
La direzione di massima crescita della funzione è il vettore gradiente.
Nel thread "gradienti..." si è visto che non è così però...
Si è detto che f deve essere differenziabile e nel tuo caso lo è.
Cerca di capire il perché.
Si dimostra facilmente che se f è differenziabile in 'a' allora esiste
una matrice L che soddisfa certe ipotesi. Questa matrice è la Jacobiana
che, nel caso di funzioni R^m->R, corrisponde al gradiente. Si dimostra
facilmente che la derivata rispetto a un vettore v si può ottenere
moltiplicando la Jacobiana per v, cioè il gradiente per v, nel nostro caso.
Sarà, ma con tutti questi "facilmente" mi sento proprio una mezza calzetta...
Post by Kiuhnm
gradf(a)*v è il prodotto scalare che sappiamo essere uguale a
|gradf(a)||v|cos(phi), dove phi è l'angolo formato dai due vettori.
Se v è un versore, abbiamo semplicemente |gradf(a)|cos(phi). Dato che
|cos(phi)|<=1, si ha
|gradf(a)*v| = |gradf(a)|cos(phi) <= |gradf(a)|.
Visto che cos(phi) è massimo quando phi = 0, è chiaro che
quell'espressione è massima quando v è un versore che ha la stessa
direzione del gradiente, quindi il gradiente, se non nullo, indica la
direzione di massima variazione.
Ok, "se non nullo"... mi era sfuggito... capito (spero)

Grazie
Ciao
--
I nodi vengono al pettine... se uno si pettina
--Mio fratello
Continua a leggere su narkive:
Loading...