主要内容

解决错误:函数或变量无法识别

问题

一个经常遇到的错误消息表明 MATLAB® 找不到特定的程序文件或变量:

Unrecognized function or variable 'x'.(函数或变量 'x' 无法识别。)

许多情况可能导致此错误。本主题介绍如何识别和解决常见情况。

可能的解决方案

查找拼写错误

最常见的原因之一是函数或变量名称拼写错误。尤其对于较长的名称或包含相似字符(例如,字母 l 和数字 1)的名称,很容易出错而不易察觉。

通常,如果您拼错名称,命令行窗口中将显示一个建议的名称。例如,由于以下命令在函数名称中包含大写字母,因此该命令将会失败。

accumArray(1,10)
Unrecognized function or variable 'accumArray'.
 
Did you mean:
>> accumarray(1,10)

Enter 执行建议的命令,或按 Esc 取消该命令。

检查工作区中的变量

要检查您要使用的变量是否在当前工作区中可用,请使用 whos 命令。

如果未列出该变量,可能的原因如下:

  • 在当前会话中尚未运行创建该变量的代码,或对 clearclearvars 命令的调用删除了该变量。如果您之前创建了该变量,通常可以在命令历史记录中找到代码,您可以通过使用向上箭头键从命令行访问该历史记录。

  • 如果您正在编辑脚本文件,代码可能尝试在使用该变量之前为其赋值。在编辑器中查看文件时,您可以点击变量名称以查找对该变量的所有引用并检查运算顺序。

    In a script file, the myvar variable name is highlighted throughout the code. Indicators on the right side of the Editor show where the name occurs. Pointing to an indicator shows the corresponding line number.

如果变量在工作区中并且您正在编写抛出错误的函数,请检查您是否将变量作为输入参量传递给函数。函数不使用基础工作区,因此必须将变量显式传入函数工作区。例如,即使变量 c 存在于基础工作区中,以下函数也找不到它。

function y = myfunction(x)
 y = x + c;
end

要解决此问题,请将 c 添加到函数定义行。

function y = myfunction(x,c)
 y = x + c;
end

然后,在函数调用中包含该变量。

Y = myfunction(X,c);

有关工作区的详细信息,请参阅基础和函数工作区

检查函数的可用性

如果未识别的项目是函数,而您对该函数不熟悉,请检查它是否包含在您安装的软件中。

首先,在最新 MathWorks 文档中搜索该函数。如果在文档中没有找到该函数,请检查其他资源,例如 MathWorks® File Exchange,以找到包含该函数的软件。

如果您在 MathWorks 文档中找到该函数:

  1. 运行文档中的示例代码,检查该函数是否可用。如果代码没有生成 Unrecognized function 错误,请跳到检查函数输入继续诊断问题。

  2. 检查该函数是否比您的软件版本更新。要确定函数是何时引入的,请查阅其参考页的“版本历史记录”部分。

    Version History sections appear before See Also sections and include text in the form of "Introduced in" with the release number.

    要检查您的 MATLAB 版本,请使用 version 命令。版本显示在括号中。

    version
    ans =
    
        '24.1.0.2661297 (R2024a) Update 5'
    
  3. 检查必需产品是否已安装。必需产品位于文档页的左窗格中。

    Sample doc page with the product name "Text Analytics Toolbox" in the left pane

    要检查该产品是否已安装,请使用 ver 命令。

    ver
    .
    .
    .
    MATLAB                                          Version 24.1        (R2024a)
    Deep Learning Toolbox                           Version 24.1        (R2024a)
    Statistics and Machine Learning Toolbox         Version 24.1        (R2024a)
    Text Analytics Toolbox                          Version 24.1        (R2024a)
    

    如果该产品未列出,则可能未安装。有关安装产品的信息,请参阅获取和管理附加功能

  4. 如果您已安装该产品,但它未出现在 ver 重新生成的列表中,请更新工具箱缓存。在主页选项卡的环境部分,点击 设置。选择 MATLAB > 常规,然后点击更新工具箱路径缓存

  5. 如果该产品仍未出现在 ver 生成的列表中,请确保您有该工具箱的有效许可证。使用 license 命令显示当前有效的许可证,并访问许可证中心以查看相关联的产品。有关管理许可证的详细信息,请参阅管理您的许可证

检查函数输入

当函数无法识别输入的形式时,使用现有变量调用可用函数可能会失败。请参阅函数文档以了解接受的语法和输入参量。您可以使用 doc 命令直接访问函数文档。

doc functionName

有两个常见问题可能难以识别:使用意外的索引表达式和省略对象输入。

意外的索引.  如果您在输入参量的位置键入冒号,MATLAB 会将代码解释为索引表达式而不是函数调用。例如,isnumeric 函数接受单精度输入数组,即 isnumeric(A)。在许多情况下,如果存在多个参量,isnumeric 会检测出来。

isnumeric(A,B)
Error using isnumeric
Too many input arguments.

但是,如果使用冒号代替参量,MATLAB 会将 isnumeric 解释为未定义的变量而不是函数。

isnumeric(A,:)
Unrecognized function or variable 'isnumeric'.

省略对象输入.  对象方法通常使用 method(object,inputs) 形式的函数语法进行说明。如果您习惯于使用 object.method(inputs) 形式的圆点表示法调用方法,请确保在使用函数形式时包含对象作为第一个输入。

使您的函数可用

当您编写计划从命令行或另一个文件调用的函数时:

  • 将该函数保存在与函数同名的文件中。如果函数和文件的名称不同,则文件名将覆盖函数名称。

    例如,将名为 curveplot 的函数保存在名为 curveplot 的文件中,扩展名为 .m.mlx。如果函数 curveplot 位于名为 curveplotfunction.m 的文件中,则对 curveplot 的调用将失败。

  • 确保该函数是文件中定义的第一个或唯一的函数,并且文件中不包含任何函数定义之外的代码。如果函数不符合这些条件,则它是局部函数,无法从该文件外部调用。有关详细信息,请参阅局部函数

有关编写函数的详细信息,请参阅在文件中创建函数