Effacer les filtres
Effacer les filtres

problem with numerical derivative using gradient function

7 vues (au cours des 30 derniers jours)
Kobi
Kobi le 15 Avr 2015
while using gradient i encounter a phenomenon that i cannot explain, as you can see from the example below
a=[1 2 7 9;
9 8 4 1;
1 2 3 7]
gradient(a)
ans =
1.0000 3.0000 3.5000 2.0000
-1.0000 -2.5000 -3.5000 -3.0000
1.0000 1.0000 2.5000 4.0000
i get this weird 3.5 value that is not expected all i need's a simple derivative that subtract one value with another similar to the diff function where i get this result
a=[1 2 7 9;
9 8 4 1;
1 2 3 7]
diff(a)
ans =
8 6 -3 -8
-8 -6 -1 6
the problem with diff is that i don't get the same matrix size

Réponses (1)

Star Strider
Star Strider le 15 Avr 2015
You’re only getting half the information that gradient is calculating.
Use this to get the gradient in the default (horizontal, along rows) direction as well as the vertical (along columns) direction:
[dadx,dady] = gradient(a)
The diff function takes the difference in the first dimension >1 by default. (You can specify a different dimension as the third argument.) So if a matrix, it will take the differences between rows (along columns) by default.
So if you want the output of gradient to correspond with the default output of diff, use the second output of gradient, here ‘dady’ in my code.
  3 commentaires
Star Strider
Star Strider le 15 Avr 2015
No, there is nothing suspicious about the gradient function. (See the documentation — doc gradient — for the algorithm it uses.) It produces an accurate numerical derivative, not simply the difference between adjacent elements as diff does. If there is a specific, constant, spacing between the elements in each direction that you want to provide, gradient will use them rather than the default spacing of 1.
Michael Mauersberger
Michael Mauersberger le 30 Avr 2020
I agree. Furthermore gradient calculates mean values of neighbouring differences. That is why you get a .5 value. All is written in the doc.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by