我有一个问题,我可以通过更改我的函数名称来解决。但我想知道是否有一个选项来调用MATLAB定义的函数,该函数与我的用户定义函数的名称相同。默认情况下,MATLAB始终使用用户定义的函数,但我想在同一个脚本中使用它们。 有什么想法吗?
MATLABfuzzytoolbox :: addrule(); 用户自定义的:: addrule()
答案 0 :(得分:5)
Matlab使用第一个具有指定名称的函数显示在路径中,并且没有机制专门调用其中一个共享相同名称的函数。
一个好的做法是将您的功能放入packages。通过这种方式,您可以使用与内置函数相同的名称命名它们,但调用稍有不同:例如,如果包addrule
中有函数Pack
( ie 文件夹addrule.m
中的文件+Pack
,您可以使用Pack.addrule
调用它,而内置addrule
函数只需{{1}调用}}
最佳,
答案 1 :(得分:4)
获取原始addrule
函数之前的句柄,用您的函数对其进行遮蔽:
fuzzy_addrule = @addrule;
本声明中的定义是"冻结",在某种意义上说,如果您以后重新定义或隐藏addrule
fuzzy_addrule
addrule
。{/ p>
您现在可以定义addrule
功能,该功能将隐藏原始fuzzy_rule
,但不会addrule = @(x,y) x+y; %// very simple example
。
>> addrule(3,4)
ans =
7 %// your function's result
所以,要使用你的功能你只需写:
fuzzy_addrule
要使用原始功能,请拨打>> fuzzy_addrule(readfis('tipper'),[]) %// example call for fuzzy/addrule function
ans =
name: 'tipper'
type: 'mamdani'
andMethod: 'min'
orMethod: 'max'
defuzzMethod: 'centroid'
impMethod: 'min'
aggMethod: 'max'
input: [1x2 struct]
output: [1x1 struct]
rule: [1x3 struct]
:
fuzzy_addrule
以上要求在定义函数之前创建工具箱函数的句柄。如果要在之后访问工具箱功能,则可以按如下方式执行此操作:
fuzzy_addrule
。由于工具箱功能现在可见,因此句柄引用该功能。curdir = pwd; %// take note of current folder
t = which('addrule', '-all'); %// t{1} is your function, t{2} is the toolbox function
fuzdir = regexp(t{2},'.+\\','match'); %// get only folder part
cd(fuzdir{1}); %// change to that folder
fuzzy_addrule = @addrule; %// define function handle
cd(curdir); %// restore folder
。代码:
{{1}}
完成此操作后,可以按上述方式调用每个函数。
答案 2 :(得分:0)