Matlab &引用;未定义函数';函数名';对于类型为';双倍'&引用;

Matlab &引用;未定义函数';函数名';对于类型为';双倍'&引用;,matlab,undefined,octave,Matlab,Undefined,Octave,在不同的形状和大小中经常出现的一个问题是:为什么我会收到以下错误消息: “类型为'double'的输入参数的未定义函数'function_name'。” 这篇文章试图解决可能出现此错误消息的所有不同情况,并提出解决方案。如果您无意中发现此错误消息而不知道其含义。让我们感到安慰的是:90%的人都在谷歌上搜索过同样的短语 “类型为'double'的输入参数的未定义函数'int'。” 这个错误消息是不言自明的,但仍然可能导致混乱。(我随机选择了'int',它也可以是'train'、'table'、'm

在不同的形状和大小中经常出现的一个问题是:为什么我会收到以下错误消息:

“类型为'double'的输入参数的未定义函数'function_name'。”


这篇文章试图解决可能出现此错误消息的所有不同情况,并提出解决方案。

如果您无意中发现此错误消息而不知道其含义。让我们感到安慰的是:90%的人都在谷歌上搜索过同样的短语

“类型为'double'的输入参数的未定义函数'int'。”

这个错误消息是不言自明的,但仍然可能导致混乱。(我随机选择了
'int'
,它也可以是
'train'、'table'、'my_function'
或其他任何东西)

出现此错误的主要情况有两种:

  • 您正在尝试使用一个(尚未)不存在的函数
  • 您正在尝试访问(尚未)不存在的变量中的元素
  • 如果出现此错误,您该怎么办?

    首先你可能想试试。这将告诉您尝试使用的函数或变量是否已定义

    which int
    'int' not found.
    
    很明显,Matlab找不到任何名为
    int
    的函数或变量。因此,试图使用它是徒劳的。让我们将其与
    max
    进行比较:

    which max
    built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max)  % logical method
    
    但是,即使得到“未定义的函数‘x’…”,也可能会得到以下结果。如果是,见下文第3点

    which x
    x is a variable.
    
    1。但是函数“int”存在!甚至是

    是的,
    int
    存在,但前提是您拥有。由于工具箱是额外的软件包,必须单独购买(而且可能非常昂贵),所以您可能没有该软件包

    如果出现“Undefined function”(未定义函数)错误,但在文档中找到了该函数,请查看左侧的菜单,或者简单地检查地址。标准Matlab函数具有如下地址:

    mathworks.com/help/matlab/ref/max.html
                       ^^^^^^
    
    注意“matlab”部分。如果您看到这一点,那么您正在使用的函数是核心Matlab的一部分

    但是,如果您看到如下地址,则您尝试使用的函数是符号工具箱的一部分:

    mathworks.com/help/symbolic/int.html
                       ^^^^^^^^
    
    或者它可能是神经网络工具箱的一部分:

    mathworks.com/help/nnet/ref/train.html
                       ^^^^ 
    
    解决方案:查找另一个不属于您没有的工具箱的函数。如果你是一个熟练的谷歌搜索者,你很可能会找到你想要的东西。如果你找不到,请寻求帮助。解释你做了什么,并表明你做了一些努力

    2。但是函数是,并且是核心Matlab的一部分

    即使函数是标准Matlab安装的一部分,并且有很好的文档记录,您仍然可能会遇到此错误。此错误最可能的原因是您使用的是旧版本的Matlab。如果查看文档,您将在页面底部看到以下内容:

    在R2013b中引入

    因此,如果您使用的是R2012b,那么您就不能使用例如

    解决方案:检查函数是否在您的Matlab版本中定义。如果它还没有实现,那么您要么需要更新Matlab,要么找到另一种方法。例如,
    表格
    的替代方法可以是使用单元格或结构

    3。但是变量“my_variable”存在!我在上面的行中创建了它

    不,你没有。您很可能创建了变量
    myvariable
    myu variable
    myu variable
    或上面一行中的类似内容。也可能是您创建了它,但无意中创建了它

    解决方案:检查代码。查找输入错误、意外清除变量的位置等。在Matlab编辑器中,如果标记变量,将在底部显示以下行:“3个“x”的用法,如果定义并使用了函数。在未使用的变量下面还会有一条橙色线

    4。但当我键入
    哪个y

    如果在“未定义函数“y”上方出现错误,但
    告诉您
    y
    存在,则错误消息将包含更多行:

    my_function(x)
    Undefined function or variable 'y'.
    Error in my_function (line 2)
    t = x*y; 
    
    >> which y
    y is a variable.
    
    这告诉您的是,您的(也检查)中有一个名为
    y
    的变量

    问题是函数无法访问此工作区:

    函数不使用基本工作区。每个函数都有自己的函数工作区

    如果希望函数查看并使用变量,则必须将其作为传递。这样,变量将成为该函数本地工作区的一部分。同样,如果希望在函数内部创建的变量在函数外部可访问,则必须将其作为函数的输出

    y = 3;
    res = my_function(y)
    
    解决方案:将要用作输入参数的变量传递给所使用的函数。确保函数内部的名称在内部一致。即,整个函数中的名称必须相同。请注意,函数外部和内部的变量名称之间没有连接

    y = 3;
    res = my_function(y)
    
    5。但我将变量作为输入传递给函数,但仍然得到相同的错误消息!?

    是的,您可能使用变量作为输入。但是,不同函数中的变量名不一定相同(通常情况下并非如此)

    假设您具有以下功能:

    function output = my_function(x)  
    output = 2*y;
    end
    
    如果您从工作区调用它(如下面的代码所示),即使您使用
    y
    作为输入变量,并在函数内部使用
    y
    ,也会得到与上面相同的错误

    y = 3;
    res = my_function(y)
    
    这是因为在函数
    my_函数
    内部,用作输入的变量将被称为
    x
    ,而不管它在函数外部被称为什么

    y = 3;
    res = my_function(y)
    
    <