diodeBucks
diodeBucks

Reputation: 173

how to define a 2d discrete delta function that can take array input in matlab

function y = dd2(x1,x2)
y=0;
if x1==0 && x2==0
  y=1;
end

This would not work because the input cannot be an array. I hope to make it can work for an array X of 1*m, and an array Y of 1*n so when you dd2(X,Y) it creates a m*n matrix with 1 at the position where X=0, Y=0 and zero otherwise

Is there any function that does this has already been implemented in matlab? (like a 2D discrete delta function) I didn't find it.. The dirac(x) would return inf which I want is zero. Is there a way to change the inf to 1? Thanks

Upvotes: 3

Views: 1853

Answers (1)

Divakar
Divakar

Reputation: 221534

There is a magical function called bsxfun that does almost everything in MATLAB and certainly finds another perfect setup here. The implementation with it would look something like this -

y = bsxfun(@and,x1(:)==0,x2(:).'==0)

Sample run with x1 as 1x4 and x2 as 1x6 -

x1 =
     0    -1    -1     0
x2 =
    -1    -1    -1    -1     0     0
y =
     0     0     0     0     1     1
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     1     1

Look at the positions of 0's in x1, x2 and 1's in the output y to verify the results.


General Case Solution

For a general case, you can define an anonymous function like so -

func1 = @(x1,x2) x1==0 & x2==0

Then, use it within bsxfun for the deseired output -

y = bsxfun(func1,x1(:),x2(:).')

Thus, with every new conditional statement, you only need to change func1! As an example, you can add one more conditional statement in it -

func1 = @(x1,x2) x1==0 & x2==0 | x1 <0

Upvotes: 2

Related Questions