MATLAB Answers

Kobi
0

problem with numerical derivative using gradient function

Asked by Kobi
on 15 Apr 2015
Latest activity Commented on by Star Strider
on 15 Apr 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

  0 Comments

Sign in to comment.

1 Answer

Answer by Star Strider
on 15 Apr 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.

  2 Comments

this is not the problem gradient function does some kind of interpolation to make the matrix size in the same size as the input matrix this interpolation is shown in the values located in the middle such as 3.5 the problem is that in the entire program that i'm working on i need to use a numerical derivative and result from the gradient function is suspicious
maybe for this reason
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.

Sign in to comment.