我遇到了findpeaks
函数的问题,此函数位于信号处理工具箱中,并且程序还有另一个版本(用户定义的函数)。我需要在信号处理工具箱中调用on而不是用户定义的一个,我也不能重命名用户定义的函数有很多原因。任何人都可以帮我调用工具箱功能。
答案 0 :(得分:10)
MATLAB使用的优先顺序在help pages中描述。它声明当前文件夹(9.)中的函数优先于路径(10.)中其他函数。然后,选择路径中函数的第一次出现。这允许许多可能的解决方案:
<强> 1。 cd
到文件夹
一个非常简单的方法就是将当前工作空间目录更改为您需要调用的函数的文件夹,即cd
或更改为用户定义函数所在的位置,或cd
到工具箱路径。 注意:这是相当不优雅的,但有时可能是最简单的解决方案。
<强> 2。重新排序路径
如前所述,MATLAB选择了路径中第一次出现的函数。因此,您可以对路径变量进行重新排序,因此最后显示用户定义函数所在的文件夹。可以使用path
函数查看和操作路径变量。 注意:然后您只能调用工具箱功能。否则你必须再次走这条路。
第3。功能句柄
如果您需要能够同时调用这两个函数,那么为两个版本创建函数句柄会很有用。为此,您必须cd
进入定义函数的文件夹,并在那里创建一个新句柄:
cd('path/to/userdefined/function')
userFindPeaks = @findpeaks;
cd('path/to/MATLAB/installation/toolbox/signal/signal')
toolboxFindPeaks = @findpeaks;
然后,您可以使用feval
调用这些函数。
当然,正如Adriaan在评论中提到的那样,最好不将已定义函数的名称用于您自己的函数或变量名称。
答案 1 :(得分:2)
我只是来这里寻找相同的东西...我最终使用了builtin
。
https://uk.mathworks.com/help/matlab/ref/builtin.html
[y1,...,yn] = builtin(function,x1,...,xn)
@arr_sea实际上在其中一个在不同上下文中使用此功能的折叠注释中发布了link。