gradient with irregular grid

14 visualizaciones (últimos 30 días)
Alessio Colella
Alessio Colella el 2 de Mayo de 2023
Comentada: Star Strider el 10 de Sept. de 2025
I have as a variable the temperature at a given depth and longitude, so it is a vector (317,1) where the 317 are all latitudes.
How do I get the gradient of this variable (which I call T) knowing that the latitude grid is irregular?
I can try
gradient_T=gradient(T,e1v) where e1v is the irregular vector?

Respuesta aceptada

Star Strider
Star Strider el 2 de Mayo de 2023
The gradient function assumes a fixed step size for the second argument.
The way I calculate the numerical derivative using an irregular grid for the reference (assuming vectors here) is:
gradient_T = gradient(T) ./ gradient(e1v);
That will essentially calculate and generally produces the result I want.
.
  4 comentarios
Joshua Port
Joshua Port el 10 de Sept. de 2025
Editada: Joshua Port el 10 de Sept. de 2025
I should have realized what this was getting at. If your data looks like this:
x_1d = linspace(0, 100)';
x = repmat(x_1d, 1, 100);
And you do:
gradient(x)
You'll get 0 everywhere. To compute df/dx you would need to do:
[~, dx] = gradient(x);
dfdx = gradient(f) ./ dx;
This method doesn't work when one of your dimensions is curvy, though. I wish gradient could take in an array of points, even scattered ones, and a function defined at those points, and compute the gradient. I have a method for dealing with this, but it requires a lot of headache.
Star Strider
Star Strider el 10 de Sept. de 2025
Of course, the derivative of a constant is zero. Beyond that, I am not following your use of the gradient function.
Stopping here.

Iniciar sesión para comentar.

Más respuestas (1)

Nathan Hardenberg
Nathan Hardenberg el 2 de Mayo de 2023
You can give the positions of the corresponding values as the second function argument. In your case the lattitude for each temperature measurement.
temperature = [30 29 28 27 26 25 24 23];
latitude = [1 2 3 4 5 10 11 20];
T = gradient(temperature, latitude)
T = 1×8
-1.0000 -1.0000 -1.0000 -1.0000 -0.3333 -0.3333 -0.2000 -0.1111

Etiquetas

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by