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

Learn moreOpportunities for recent engineering grads.

Apply Today
Asked by Alexander Malafeev on 2 May 2013

Dear forum, I have two functions

function [Md] = MDx( M, dx )

w = size(M,2);

for i=2:w-1 Md(:,i) = ( M(:,i+1) - M(:, i-1) )/(2*dx); end

Md(:,1) = ( M(:,2) - M(:, 1) )/dx; Md(:,w) = ( M(:,w) - M(:, w-1) )/dx;

return

and

function [Md] = MDy( M, dy )

h = size(M,1);

for i=2:h-1 Md(i,:) = ( M(i+1,:) - M(i-1, :) )/(2*dy); end

Md(1,:) = ( M(2,:) - M(1, :) )/dy; Md(h,:) = ( M(h,:) - M(h-1,:) )/dy;

return

this functions are computing gradient in X and Y directions, they are quite same but on square matrix MDx is 40 times faster than MDy, what is the reason for that?

Answer by John Doe on 2 May 2013

Edited by John Doe on 2 May 2013

I believe this is due to the way matrices are stored in Matlab.

A matrix is stored column-wise, as below:

A = [1 2 3;4 5 6;7 8 9];

A(1,1) = A(1) = 1; A(2,1) = A(2) = 4; ... A(1,3) = A(7) = 3;

A(:,1) = A(1:3); A(1,:) = A([1 4 7]);

This makes it faster to do calculations on entire columns, rather than rows, thus MDx is fastest.

## 0 Comments