如何定义一个可以在matlab中获取数组输入的二维离散delta函数

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

这是行不通的,因为输入不能是数组。 我希望它可以用于 1*m 的数组 X 和 1*n 的数组 Y 所以当你 dd2(X,Y) 它创建一个 m*n 矩阵,其中 X=0,Y=0 的位置为 1,否则为零

有没有已经在matlab中实现的功能? (就像一个 2D 离散增量函数)我没有找到它。我想要的 dirac(x) 将 return inf 为零。有没有办法将 inf 更改为 1?谢谢

有一个名为 bsxfun 的神奇函数,它几乎可以完成 MATLAB 中的所有操作,并且肯定会在这里找到另一个完美的设置。它的实现看起来像这样 -

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

示例 运行,x11x4x21x6 -

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

查看 0x1x21 在输出 y 中的位置以验证结果。


一般案例解决方案

对于一般情况,您可以像这样定义一个 anonymous function -

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

然后,在 bsxfun 内使用它以获得所需的输出 -

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

因此,对于每个新的条件语句,您只需要更改 func1!例如,您可以在其中添加一个条件语句 -

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