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.