MATLAB中nlfilter
的语法是:
B = nlfilter(A, [m n], fun)
我正在考虑使用test
函数创建一个包含多个子函数的M-File;即,我想要一个选择,每次我可以选择在fun
下调用哪个子功能。
% Main Function
function test
B = nlfilter(A, [m n], fun)
% Subfunction 1
function sub1
.......
% Subfunction 2
function sub2
.......
% Subfunction 3
function sub3
.......
是否可以概括fun
,以便我可以从sub1
拨打sub2
或sub3
或test
。
修改
我的功能:
function funct(subfn)
clc;
I = rand(11,11);
ld = input('Enter the lag = ') % prompt for lag distance
fh = {@dirvar,@diagvar};
feval(fh{subfn});
A = nlfilter(I, [7 7], subfn);
% Subfunction
function [h] = dirvar(I)
c = (size(I)+1)/2
EW = I(c(1),c(2):end)
h = length(EW) - ld
end
% Subfunction
function [h] = diagvar(I)
c = (size(I)+1)/2
NE = diag(I(c(1):-1:1,c(2):end))
h = length(NE) - ld
end
end
当我运行funct(1)
时,这是输出错误:
Enter the lag = 1
ld =
1
??? Input argument "I" is undefined.
Error in ==> funct>dirvar at 12
c = (size(I)+1)/2
Error in ==> funct at 6
feval(fh{subfn});
我很困惑现在的问题是什么?
答案 0 :(得分:1)
如果您知道子功能的名称,则可以使用str2func
:
更改test
函数以接受包含子功能名称的字符串:
function test (subfunNm)
并按照以下方式致电nlfilter
:
B = nlfilter(A, [m n], str2func (subfunNm));
现在您可以致电test
:
test ('sub1')
等
修改强>
对于嵌套函数,您可以保存函数句柄的单元格数组,并传入索引(而不是字符串):
function test(fnInd)
fh = {@f1,@f2,@f3};
feval(fh{fnInd});
function f1
disp('f1')
end
function f2
disp('f2')
end
function f3
disp('f3')
end
end
使用test (1)
等来调用它。
答案 1 :(得分:1)
查看str2func
和/或函数句柄。
我个人远离字符串传递函数,但您可能只需要使用它。