[Matlab] Gradiente

freddofede
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
Robyone1
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ì!

freddofede
Non è esattamente quello che cercavo... comunque me la sto facendo da me ;-).

Robyone1
Cosa ti serve sapere esattamente?

freddofede
Te gli passi la funzione, il punto, e lui ti ridà il valore del gradiente...

Robyone1
Quindi tu hai una funzione generica, y=mx+q ad es. e non una serie di punti discreti intervallati da un dx ad es.

freddofede
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.

freddofede
Servisse a qualcun altro, ho utilizzato il seguente metodo:

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})$.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.