【问题标题】:how to define a 2d discrete delta function that can take array input in matlab如何在matlab中定义一个可以接受数组输入的二维离散delta函数
【发布时间】:2015-03-01 05:47:21
【问题描述】:
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 矩阵,否则为零

在matlab中是否已经实现了任何功能? (就像一个二维离散增量函数)我没有找到它.. dirac(x) 将返回我想要的 inf 为零。有没有办法将inf更改为1?谢谢

【问题讨论】:

    标签: arrays matlab 2d delta


    【解决方案1】:

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

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

    使用x1 作为1x4x2 作为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
    

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


    一般案例解决方案

    对于一般情况,您可以像这样定义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
    

    【讨论】:

    • 这真的很有帮助!通过 x 和 y 顺序约定将 x1(:)==0,x2(:).'==0 更改为 x1(:).'==0,x2(:)==0 可能会更好。一个后续问题:如果我在同一个文件夹中有多个函数,我该如何指定 @and 是指我的 dd2() 函数?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-09
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多