【问题标题】:Why can't Matlab see my function?为什么 Matlab 看不到我的函数?
【发布时间】:2011-08-31 01:18:22
【问题描述】:

我的功能肯定是有效的;它已经过测试,并且曾一度被识别。

这是函数原型:

function [X Y] = calculateEllipse(x, y, a, b, angle)
%# Code here
end

这是我从 Matlab 终端拨打的电话:

calculateEllipse (612, 391, 107, 60, 331)

这是我弹出的错误:

??? Undefined function or method 'calculateEllipse' for input arguments of
type 'double'.

现在,我 100% 肯定我与函数位于同一目录中。我什至用过

addpath('C:\path-to-function')

以确保。它只是不起作用,我很困惑。

感谢任何帮助。

【问题讨论】:

  • 你的函数文件叫calculateEllipse.m吗?
  • 找到使用which calculateEllipse 调用的函数。有关详细信息,请参阅which
  • 一定要接受一些答案,它可以帮助人们浏览问题!
  • @user920761:您是否指的是这篇文章中的calculateEllipse函数:stackoverflow.com/questions/2153768/…
  • 这个问题的关键是:%没有可用的许可证。请参阅下面的答案。

标签: function matlab file-not-found


【解决方案1】:

总结其他帖子,这里是确定问题原因的工作流程。

  1. 您输入了错误的函数名称。检查函数定义并确保它确实调用了calculateEllipse

  2. 您已将该函数保存到一个名称与函数名称不同的文件中。检查函数的文件名并确保它与函数名匹配。

  3. 包含函数名称的文件夹不在 MATLAB 路径上。有几种方法可以检查这一点。键入 path 以查看当前路径,或键入 which calculateEllipse 以查找 MATLAB 用于该文件的位置。 (如果有问题,最后一条命令会显示'calculateEllipse' not found.。注意addpath不会永久更新路径,所以当你关闭MATLAB时,路径会被重置。为此使用savepath

  4. 包含函数的文件夹是matlabroot 的子目录。这些文件夹是为成熟的工具箱保留的;当您将代码存储在这里时,就会发生不好的事情。请参阅Bob's answer 了解更多信息。

其他有用的检查是:

  1. 可以调用存储在同一文件夹中的其他函数吗?

  2. 如果将函数保存在不同的文件夹中,它会运行吗?

【讨论】:

  • 感谢您的帮助,很抱歉回复晚了。我输入了“which calculateEllipse”,它给了我路径,但说 %Has no license available。然后我尝试将代码复制为一个新函数并给它一个不同的名称并收到相同的错误。有什么建议吗?
【解决方案2】:

补充杰夫所说的;另一种可能性是您将函数放置在 MATLAB 安装中的某个位置。默认情况下,MATLAB 不会重新搜索自己的文件结构以查找新文件;它假定其内部文件结构保持不变。确保将文件(正如 Jeff 指出的,必须命名为 calculateEllipse.m)保存在 MATLAB 安装之外的某个位置。

查看https://www.mathworks.com/help/matlab/matlab_env/toolbox-path-caching-in-the-matlab-program.html,或访问 MathWorks 网站并搜索

path cache

了解更多信息。

【讨论】:

    【解决方案3】:

    这个问题的关键是:%Has no license available。这意味着您尝试使用的函数目录中的函数与您不拥有的工具箱中的函数具有相同的名称。默认情况下,MATLAB 会禁用整个目录,而不仅仅是您不拥有的工具箱中的同名函数。这是一个例子:

    目录中的文件:

    myfunction.m
    scoobydoo.m
    blackman.m
    

    如果我没有“信号处理工具箱”,那么blackman.m 将禁用整个目录。

    【讨论】:

      【解决方案4】:

      我能想到这可能发生的几个原因。

      首先,正如 Jeff 所说,您可以将文件命名为“calcEllipse.m”而不是“calculateEllipse.m”。在这种情况下,您需要将函数重命名为与您保存的 m 文件相同。

      其次,你没有添加正确的路径。否则,没有理由对我的知识造成错误。仔细检查您是否添加了正在保存的 m 文件的路径。一个简单的检查方法是,如果您输入“calculateEll”然后按 Tab,自动完成功能是否有效?如果不是,那你就走投无路了。

      希望这是您可以快速解决的问题之一!

      【讨论】:

        猜你喜欢
        • 2016-11-16
        • 1970-01-01
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2013-05-19
        相关资源
        最近更新 更多