Contenuto principale

gradient

Gradiente numerico

Descrizione

FX = gradient(F) restituisce il gradiente numerico monodimensionale del vettore F. L'output FX corrisponde a ∂F/∂x, che sono le differenze nella direzione x (orizzontale). Si presume che la spaziatura tra i punti sia 1.

esempio

[FX,FY] = gradient(F) restituisce i componenti x e y del gradiente numerico bidimensionale della matrice F. L'ulteriore output FY corrisponde a ∂F/∂y, che sono le differenze nella direzione y (verticale). Si presume che la spaziatura tra i punti in ciascuna direzione sia 1.

esempio

[FX,FY,FZ,...,FN] = gradient(F) restituisce i componenti N del gradiente numerico di F, dove F è un array con N dimensioni.

[___] = gradient(F,h) utilizza h come spaziatura uniforme tra i punti in ciascuna direzione. È possibile specificare uno qualsiasi degli argomenti di output nelle sintassi precedenti.

esempio

[___] = gradient(F,hx,hy,...,hN) specifica i parametri di spaziatura N per la spaziatura in ciascuna dimensione di F.

esempio

Esempi

comprimi tutto

Calcolare il gradiente di un vettore crescente in modo monotono.

x = 1:10
x = 1×10

     1     2     3     4     5     6     7     8     9    10

fx = gradient(x)
fx = 1×10

     1     1     1     1     1     1     1     1     1     1

Calcolare il gradiente bidimensionale di xe-x2-y2 su una griglia.

x = -2:0.2:2;
y = x';
z = x .* exp(-x.^2 - y.^2);
[px,py] = gradient(z);

Tracciare le linee del contorno e i vettori nella stessa figura.

figure
contour(x,y,z)
hold on
quiver(x,y,px,py)
hold off

Figure contains an axes object. The axes object contains 2 objects of type contour, quiver.

Utilizzare il gradiente in un punto specifico per approssimare il valore della funzione in modo lineare al punto vicino e confrontarlo con il valore effettivo.

L'equazione per l'approssimazione lineare del valore di una funzione è

f(x)f(x0)+(f)x0(x-x0).

Ossia, se il valore della funzione f(x0) e la pendenza della derivata (f)x0 sono note in un punto particolare x0, è possibile utilizzare queste informazioni per approssimare il valore della funzione al punto vicino f(x)=f(x0+ϵ).

Calcolare alcuni valori della funzione seno compresi tra -1 e 0,5. Quindi calcolare il gradiente.

y = sin(-1:0.25:0.5);
yp = gradient(y,0.25);

Utilizzare il valore della funzione e la derivata in x = 0.5 per prevedere il valore di sin(0.5005).

y_guess = y(end) + yp(end)*(0.5005 - 0.5)
y_guess = 
0.4799

Calcolare il valore effettivo per il confronto.

y_actual = sin(0.5005)
y_actual = 
0.4799

Trovare il valore del gradiente di una funzione multivariata in un punto specificato.

Si consideri la funzione multivariata f(x,y)=x2y3.

x = -3:0.2:3;
y = x';
f = x.^2 .* y.^3;
surf(x,y,f)
xlabel('x')
ylabel('y')
zlabel('z')

Figure contains an axes object. The axes object with xlabel x, ylabel y contains an object of type surface.

Calcolare il gradiente sulla griglia.

[fx,fy] = gradient(f,0.2);

Estrarre il valore del gradiente nel punto (1,-2). A tal fine, occorre innanzitutto ottenere gli indici del punto su cui si desidera lavorare. Quindi, utilizzare gli indici per estrarre i valori corrispondenti del gradiente da fx e fy.

x0 = 1;
y0 = -2;
t = (x == x0) & (y == y0);
indt = find(t);
f_grad = [fx(indt) fy(indt)]
f_grad = 1×2

  -16.0000   12.0400

Il valore esatto del gradiente di f(x,y)=x2y3 nel punto (1,-2) è

(f)(1,-2)=2xy3iˆ+3x2y2jˆ=-16iˆ+12jˆ.

Argomenti di input

comprimi tutto

Array di input, specificato come vettore, matrice o array multidimensionale.

Tipi di dati: single | double
Supporto numeri complessi:

Spaziatura uniforme tra i punti in tutte le direzioni, specificata come scalare.

Esempio [FX,FY] = gradient(F,2)

Tipi di dati: single | double
Supporto numeri complessi:

Spaziatura tra i punti in ciascuna direzione, specificata come input separati di scalari o vettori. Il numero di input deve corrispondere al numero di dimensioni dell'array di F. Ciascun input può essere uno scalare o un vettore:

  • Uno scalare specifica una spaziatura costante in quella dimensione.

  • Un vettore specifica le coordinate dei valori lungo la dimensione corrispondente di F. In questo caso, la lunghezza del vettore deve corrispondere alla grandezza della dimensione corrispondente.

Esempio [FX,FY] = gradient(F,0.1,2)

Esempio [FX,FY] = gradient(F,[0.1 0.3 0.5],2)

Esempio [FX,FY] = gradient(F,[0.1 0.3 0.5],[2 3 5])

Tipi di dati: single | double
Supporto numeri complessi:

Argomenti di output

comprimi tutto

Gradienti numerici, restituiti come array della stessa grandezza di F. Il primo output FX è sempre il gradiente lungo la 2a dimensione di F, che attraversa le colonne. Il secondo output FY è sempre il gradiente lungo la 1a dimensione di F, che attraversa le righe. Per il terzo output FZ e per quelli successivi, l'N-esimo output è il gradiente lungo l'N-esima dimensione di F.

Ulteriori informazioni

comprimi tutto

Suggerimenti

  • Utilizzare diff o un algoritmo personalizzato per calcolare più derivate numeriche, piuttosto che chiamare gradient più volte.

Algoritmi

gradient calcola la differenza centrale per i punti dati interni. Ad esempio, consideriamo una matrice con dati spaziati in modo unitario A, che ha un gradiente orizzontale G = gradient(A). I valori interni del gradiente G(:,j) sono

G(:,j) = 0.5*(A(:,j+1) - A(:,j-1));

Il pedice j varia tra 2 e N-1, con N = size(A,2).

gradient calcola i valori lungo i bordi della matrice con differenze unilaterali:

G(:,1) = A(:,2) - A(:,1);
G(:,N) = A(:,N) - A(:,N-1);

Se si specifica la spaziatura tra i punti, gradient ridimensiona le differenze in modo appropriato. Se si specificano due o più output, la funzione calcola anche le differenze lungo altre dimensioni in modo analogo. A differenza della funzione diff, gradient restituisce un array con lo stesso numero di elementi dell'input.

Funzionalità estese

espandi tutto

Generazione di codice C/C++
Genera codice C e C++ con MATLAB® Coder™.

Generazione di codice GPU
Genera codice CUDA® per GPU NVIDIA® con GPU Coder™.

Cronologia versioni

Introduzione prima di R2006a