MATLAB中未定义的私有函数

时间:2016-06-17 18:52:29

标签: matlab function private-functions

这与我在之前的StackOverflow帖子(Undefined function in MATLAB)中提出的问题类似。

基本上,我在最新的MATLAB版本中使用了函数dtw,并想调整它的一些部分。首先,我打字:

edit dtw

我将生成的代码保存到名为dtw_Copy.m的文件中,并将该函数的名称也更改为dtw_Copy。通过一组输入参数xy逐行完成代码,我收到一条错误消息:

Undefined function 'dtwmex' for input arguments of type 'double'.

如果我没有逐行检查代码,并且在再次测试一组输入参数dtw_Current(x,y)x之后输入y,我也会收到此错误消息。

运行时:

help 'dtwmex'

表示未找到dtwmex。我也试过了:

edit 'dtwmex'

但是我被告知currentDirectory / dtwmex.m不存在。

在线搜索,我发现a resource that seemed straight-forward在解决此错误时遇到了问题。资源建议确保安装工具箱。我不确定哪个工具箱支持函数dtwmex,因此我将函数名称键入website。这会产生以下消息:"您的搜索 - dtwmex - 与任何文档都不匹配。"

资源还建议验证用于访问该功能的路径。我按照说明进行操作,当我输入时:

which -all dtwmex

我收到:

currentDirectory\matlab\toolbox\signal\signal\private\dtwmex.mexw64  % Private to signal

这似乎表明该功能是在信号工具箱中,这是私有的吗?是否有可能仍然运行dtw_Current(x,y)和/或逐行运行其内容?

我尝试打开dtwmex.mexw64文件以将其内容添加为子例程(就像我之前的问题中的解决方案一样),但是我被告知它无法打开。

1 个答案:

答案 0 :(得分:0)

该函数是一个编译的mex文件,它位于工具箱的private文件夹中。 private folders are special in MATLAB及其内容只能从父目录中的文件访问。在您的情况下,这意味着只有toolbox/signal/signal文件夹中定义的函数才能找到/调用此函数。如果你想访问这个mex文件,你真的有两个选择。

  1. 将修改后的功能保存在信号处理工具箱文件夹中,然后它就能看到private文件夹。缺点是您正在修改MATLAB安装。

  2. 将位于private文件夹中的必要文​​件复制到可从外部函数访问 的某个位置(基本上是 a { {1}}文件夹)。

  3. 但这些都不是真正推荐的。