这与我在之前的StackOverflow帖子(MATLAB中的未定义函数)中提出的问题类似。
基本上,我在最新的 MATLAB 版本中使用了函数 dtw,并希望调整其中的一些部分。首先,我键入:
edit dtw
我将生成的代码保存到名为 dtw_Copy.m 的文件中,并将函数的名称更改为dtw_Copy
。使用一组输入参数x
和y
逐行浏览代码,我收到一条错误消息:
Undefined function 'dtwmex' for input arguments of type 'double'.
如果我不逐行浏览代码,只需键入dtw_Current(x,y)
后,再次测试一组输入参数x
和y
,我也会收到此错误消息。
运行时:
help 'dtwmex'
表示未找到dtwmex
。我也试过:
edit 'dtwmex'
但是我被告知currentDirectory/dtwmex.m不存在。
在网上搜索时,我找到了一个资源,该资源似乎可以直接解决此错误。 该资源建议确保已安装工具箱。我不确定哪个工具箱支持函数dtwmex
,所以我在网站上输入函数名称。这将导致一条消息:"您的搜索 - dtwmex - 与任何文档都不匹配。
该资源还建议验证用于访问函数的路径。我按照说明进行操作,当我键入时:
which -all dtwmex
我收到:
currentDirectorymatlabtoolboxsignalsignalprivatedtwmex.mexw64 % Private to signal
这似乎表明该功能在信号工具箱中,哪个是私有的?是否有可能仍然运行dtw_Current(x,y)
和/或逐行运行其内容?
我尝试打开 dtwmex.mexw64 文件以将其内容添加为子例程(就像我上一个问题中的解决方案一样),但被告知无法打开它。
该函数是一个编译的 mex 文件,位于工具箱的private
文件夹中。private
文件夹在 MATLAB 中是特殊的,其内容只能从父目录中的文件访问。在您的情况下,这意味着只有toolbox/signal/signal
文件夹中定义的函数才能找到/调用此函数。如果要访问此mex文件,则实际上有两种选择。
-
将修改后的函数也保存在信号处理工具箱文件夹中,然后它将能够看到
private
文件夹。缺点是你正在修改你的MATLAB安装。 -
将位于
private
文件夹中的必要文件复制到可从外部函数访问的位置(基本上是除private
文件夹以外的任何位置)。
不过,这些都不推荐。