MATLAB:使用句柄将两个参数传递给nlfilter

时间:2014-03-07 10:09:58

标签: matlab function arguments

我正在尝试为fun函数的nlfilter参数提供两个参数。我想通过使用我创建的函数assign_value的句柄来做到这一点。这是我的功能:

function y = assign_value(x, ii)

index= x([1 2 3 4 6 7 8 9]);

if ismember(ii, index)==1
    x(5)= ii; % 'ii' is the cloud object ID
end
y=x;
end

我已经删除了一些MATLAB文档(例如123),并看到了一些答案(45等) ,但我仍然需要帮助来解决我的具体问题,以了解函数的句柄是如何工作的。 这是我正在尝试做的事情(x是一个9by9双类矩阵)

ii= 127
y= nlfilter(x, [3 3], @assign_value)

我得到的错误是:

??? Subscripted assignment dimension mismatch.

Error in ==> nlfilter at 75
      b(i,j) = feval(fun,x,params{:});

任何帮助都会非常感谢,提前谢谢。

ANSWER

感谢Acorbe的评论,我终于成功了。由于y函数的assign_value输出是一个数组,并且fun nlfilter参数必须只输出标量,我将我的函数更改为:

function y = assign_value(x, ii)

index= x([1 2 3 4 6 7 8 9]);

if ismember(ii, index)==1
    x(5)= ii; % 'ii' is the cloud object ID
end

y=x(5);

end

并且正在做:

y= nlfilter(x, [3 3], @(x) assign_value(x, ii));

我的结果很好。 再次感谢Acorbe的宝贵贡献。

1 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,您希望生成由assign_value的值参数化的函数ii的单变量版本。当nlfilter调用时,此函数将运行本地过滤过程。

正如您所说的功能句柄可以提供帮助;特别是你可以定义

 my_ii = 127;
 assign_value_parametric = @(x) assign_value(x,my_ii);

并将其用作

 y= nlfilter(x, [3 3], assign_value_parametric).

lambda函数assign_value_parametric依赖于一个因变量(x),因为参数ii已经被修复过一次。


一般来说,考虑到这允许一系列显着的机制。

特别是当你在定义它的函数之外返回函数句柄时,它所依赖的参数会自动被遮蔽,但是,当调用函数句柄时它们会被隐式使用。


编辑:对您的过滤内核以及您获得的错误的进一步评论。

我担心你设计的内核不会产生你需要的行为。考虑内核应该返回标量值,该标量值是x周围给定过滤窗口的x点处的过滤器输出。在您的情况下,您总是返回原始过滤窗口,可能会更改值。