[Matlab] Gradiente
Una domanda a tutti i matlabiani del forum: come si utilizza la funzione gradient di Matlab, per calcolare il gradiente di una funzione f in un punto x, a n dimensioni?
Risposte
Non ho più Matlab installato, quindi non posso verificare quanto ti sto per dire.
Ho cercato la sintassi in internet:
[FX,FY,FZ,...] = gradient(F,h1,h2,h3,...)
io la interpreto cosi:
la tua funzione f che tu hai è immessa nella funtion come matrice a n dimensioni. Ci sono cioè tanti vettori quante sono le dimensioni della funzione, e i vettori sono dati da numeri rappresentanti la funzione in diversi step. Gli step possono essere costanti per tutti e le dimensioni o diversi (in questo caso vanno inseriti come h1, h2, ...)
Dovrei provare a farla girare per verificare, ma credo sia così!
Ho cercato la sintassi in internet:
[FX,FY,FZ,...] = gradient(F,h1,h2,h3,...)
io la interpreto cosi:
la tua funzione f che tu hai è immessa nella funtion come matrice a n dimensioni. Ci sono cioè tanti vettori quante sono le dimensioni della funzione, e i vettori sono dati da numeri rappresentanti la funzione in diversi step. Gli step possono essere costanti per tutti e le dimensioni o diversi (in questo caso vanno inseriti come h1, h2, ...)
Dovrei provare a farla girare per verificare, ma credo sia così!
Non è esattamente quello che cercavo... comunque me la sto facendo da me
.

Cosa ti serve sapere esattamente?
Te gli passi la funzione, il punto, e lui ti ridà il valore del gradiente...
Quindi tu hai una funzione generica, y=mx+q ad es. e non una serie di punti discreti intervallati da un dx ad es.
Esattamente. Uno, approssimando la derivata prima e con un pò di inventiva, se la dovrebbe cavare. Mi torna strano che le librerie MATLAB non offrano nulla.
Servisse a qualcun altro, ho utilizzato il seguente metodo:
basato sull'approssimazione $f'(x)=\frac{f(x+h)-f(x-h)}{2*h}+O(h^{2})$.
function g=grad(f,x,h) %Calcolo del gradiente della funzione in un punto if nargin<3, h=.00001; end N=length(x); I=eye(N); for n=1:N g(n)=(feval(f,x+I(:,n).*h)-feval(f,x-I(:,n).*h))/(2*h); end g=g';
basato sull'approssimazione $f'(x)=\frac{f(x+h)-f(x-h)}{2*h}+O(h^{2})$.