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

时间:2015-03-01 05:47:21

标签: arrays matlab 2d delta

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

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

是否有任何功能可以在matlab中实现? (就像2D离散delta函数)我没有找到它.. dirac(x)将返回我想要的inf为零。有没有办法将inf改为1?感谢

1 个答案:

答案 0 :(得分:2)

有一个名为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的{​​{1}}的位置验证结果。


一般案例解决方案

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

y

然后,在func1 = @(x1,x2) x1==0 & x2==0 内使用它来获取所需的输出 -

bsxfun

因此,对于每个新的条件语句,您只需要更改y = bsxfun(func1,x1(:),x2(:).') !例如,您可以在其中添加一个条件语句 -

func1