MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

discrete numerical 2D gradient

  • To: mathgroup at
  • Subject: [mg113084] discrete numerical 2D gradient
  • From: Sebastian Schmitt <sschmitt at>
  • Date: Tue, 12 Oct 2010 13:49:53 -0400 (EDT)

Dear all!

I have 2D data represented as a matrix. I would like to obtain the
gradient. I searched quite some time in the Mathematica documentation to
find a function that does the job without success. Therefore I came up
with something myself. It is more for illustrative purposes than real
life application, e.g. I'm taking a simply forward difference. Could you
please take a look at my solution? (it should be copy'n'pastable)


nrows = 10; ncolumns = 10;

dataMatrix = Table[i*j, {i, nrows}, {j, ncolumns}];


fwdDifferenceMatrix =
  SparseArray[{Band[{1, 1}] -> 1, Band[{1, 2}] -> -1}, {nrows,
    ncolumns}, 0] ;


dxMatrix = dataMatrix.fwdDifferenceMatrix;

dyMatrix = Transpose[Transpose[dataMatrix].fwdDifferenceMatrix];

dxyMatrix = Function[{u, v}, List[u, v], Listable][dxMatrix, dyMatrix];

subdxyMatrix = dxyMatrix[[2 ;;, 2 ;;]];



Is there a better (both mathematical and Mathematical) to construct the
y-derivatives (dyMatrix)?

I had also expected to find a built-in function to combine dxMatrix and
dyMatrix to a matrix of vectors. But maybe I just have to accept to use
pure function a lot.

The last problem I have is that ListVectorPlot has its origin in the
lower-left corner while the matrix counts from upper-left to
lower-right. I simply rotated the plot. Could I have done something else?

Thanks in advance,


  • Prev by Date: Re: Why I keep getting error exporting notebooks to HTML?
  • Next by Date: Re: Graphics3D. How to join random points with a single line
  • Previous by thread: Re: Why I keep getting error exporting notebooks to HTML?
  • Next by thread: Re: discrete numerical 2D gradient