Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

discrete second order derivative operator for unequally spaced data

Asked by David Kusnirak

David Kusnirak (view profile)

on 14 Feb 2013

Hi,

I need help to obtain a discrete second order derivative operator, that could be applied on a matrix. The best way, I guess, is to reshape the matrix into vector form and create a diagonal matrix with the operator, which is easy for equally spaced data in the matrix,but how can I incorporate the distances (width and heigth of the cells) for unequally spaced data?

Thanks

2 Comments

Matt J

Matt J (view profile)

on 14 Feb 2013

I don't see how a diagonal matrix could ever give you a derivative operator, even with equally spaced data. A diagonal matrix can only weight each element of the operand independently, not take differences between them. Please describe the organization of your data more clearly. Does each column of your matrix contain signal samples to be differentiated? Is the spacing between these samples the same for all columns?

David Kusnirak

David Kusnirak (view profile)

on 15 Feb 2013

sorry, I wrote it unclear, I meant diagonal matrix with 4 off-diagonals.

example:

if ma data matrix is

M = magic(3)

and the width and height of each cell is 1, the operator looks like:

L=[ -4 1 0 0 1 0 0 0 0;
    1 -4 1 0 0 1 0 0 0;
    0 1 -4 1 0 0 1 0 0;
    0 0 1 -4 1 0 0 1 0;
    1 0 0 1 -4 1 0 0 1;
    0 1 0 0 1 -4 1 0 0;
    0 0 1 0 0 1 -4 1 0;
    0 0 0 1 0 0 1 -4 1;
    0 0 0 0 1 0 0 1 -4];

so the product of the operator (in vector form) is

dz = L * reshape(m,1,[]);

and back to matrix

dz = reshape(dz,3,3)

My question is how to implement proper geometry of the cells, for example width = 2*heigth

David Kusnirak

David Kusnirak (view profile)

Products

4 Answers

Answer by Teja Muppirala

Teja Muppirala (view profile)

on 15 Feb 2013

Could you possibly use the GRADIENT command? This allows you to pass in unevenly spaced values for X and Y.

help gradient

3 Comments

Youssef KHMOU

Youssef KHMOU (view profile)

on 15 Feb 2013

hi, you mean, apply the gradient twice ?

Teja Muppirala

Teja Muppirala (view profile)

on 15 Feb 2013

I though he meant a first derivative (to second order accuracy), so just calling GRADIENT once.

Teja Muppirala

Teja Muppirala (view profile)

Answer by Youssef KHMOU

Youssef KHMOU (view profile)

on 15 Feb 2013

Discrete Laplacian :

 del2(matrix)

Example :

 [x,y]=meshgrid(-4:.1:4);
 z=exp(-x.^2-y.^2);
 dz2=del2(z);

0 Comments

Youssef  KHMOU

Youssef KHMOU (view profile)

Answer by Jan Simon

Jan Simon (view profile)

on 15 Feb 2013

A fast gradient with 2nd order method for unevenly distributed data: FEX: DGradient.

0 Comments

Jan Simon

Jan Simon (view profile)

Answer by David Kusnirak

David Kusnirak (view profile)

on 15 Feb 2013

Thanks for hints. However I'm not as interested in the solution as in the operator itself, I need to know how does it look and work.

thanks for any help

0 Comments

David Kusnirak

David Kusnirak (view profile)

Contact us