"未定义的函数' function_name'对于输入参数类型' double'。"

时间:2016-07-07 08:01:48

标签: matlab undefined octave

以不同形状和大小经常弹出的问题是:为什么我收到以下错误消息:

  

"未定义的功能' function_name'输入参数类型为' double'。"

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

3 个答案:

答案 0 :(得分:26)

如果您偶然发现此错误消息并且不知道其含义。请放心:我们90%的人用Google搜索同一个词。

  

"未定义的功能' int'输入参数类型为' double'。"

错误消息非常明显,但仍可能导致混淆。 (我随机选择了'int',它也可能是'train', 'table', 'my_function'或其他任何内容。

发生此错误有两种主要情况:

  1. 您正在尝试使用尚未存在的功能
  2. 您正在尝试访问尚未存在(尚未)
  3. 的变量中的元素

    如果您收到此错误,该怎么办?

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

    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' ...&#34 ;.如果是,请参见下面的第3点。

    which x
    x is a variable.
    

    <强> 1。但功能&#34; int&#34;存在!它甚至是documented here

    是的,int存在,但前提是Symbolic Toolbox。由于工具箱是必须单独购买的额外包装(并且可能非常昂贵),因此您可能没有该包装。

    如果你得到&#34;未定义的功能&#34;错误,但找到文档中的功能,看看左边的菜单,或只是检查地址。标准Matlab函数具有以下地址:

    mathworks.com/help/matlab/ref/max.html
                       ^^^^^^
    

    注意&#34; matlab&#34;部分。如果你看到这个,那么你正在使用一个功能,它是核心Matlab的一部分。

    但是,如果您看到下面的地址,那么您尝试使用的功能是符号工具箱的一部分:

    mathworks.com/help/symbolic/int.html
                       ^^^^^^^^
    

    或者它可能是神经网络工具箱的一部分:

    mathworks.com/help/nnet/ref/train.html
                       ^^^^ 
    

    解决方案:查找不属于您不具备的工具箱的其他功能。如果您是熟练的Google员工,您有机会找到您所寻找的内容。如果找不到,请寻求帮助。解释你的尝试,并表明你已经做了一些努力!

    <强> 2。但函数是documented here,并且是核心Matlab的一部分!

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

      

    在R2013b中引入

    因此,如果您使用的是R2012b,那么您就无法使用table

    解决方案:检查您的Matlab版本中是否定义了该功能。如果它尚未实现,那么您需要更新Matlab或找到另一种方法来实现它。 table的替代方法可以是例如使用单元格或结构。

    第3。但变量&#34; my_variable&#34;存在!我在上面的行中创建了它!

    不,你没有。您有可能在上面的行中创建变量myvariablemy_Variablemy_Variable或类似内容。您也可能已创建它,但偶然cleared它。

    解决方案:浏览代码。查找拼写错误,您意外清除变量的位置等。在Matlab编辑器中,如果您标记变量,您将在底部获得以下行:&#34;&#34; x&#34;发现&#34;如果您已定义并使用该功能。您还将在未使用的变量下面获得橙色线。

    <强> 4。但我得到的是#变量&#34;当我输入which y

    如果您收到上述错误&#34;未定义的功能&#39; y,但which告诉您y存在,则您的错误消息包含更多行:

    my_function(x)
    Undefined function or variable 'y'.
    Error in my_function (line 2)
    t = x*y; 
    
    >> which y
    y is a variable.
    

    这告诉您,Matlab Workspace中有一个名为y的变量(也请检查this link)。

    问题是功能无法访问此工作区:

      

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

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

    解决方案:将要用作输入参数的变量传递给您使用的函数。确保函数内部的名称内部一致。即它在整个函数中必须具有相同的名称。请注意,函数外部和内部的变量名之间没有任何关联。

    <强> 5。但我将变量作为函数的输入传递,但我仍然收到相同的错误消息!

    是的,您可能使用该变量作为输入。但是,变量名在不同的函数中不一定相同(通常它们不是)。

    假设你有这个功能:

    function output = my_function(x)  
    output = 2*y;
    end
    

    如果您从工作区调用它,就像在下面的代码中一样,即使您使用y作为输入变量,并在其中使用y,也会得到与上述相同的错误功能

    y = 3;
    res = my_function(y)
    

    这是因为在函数my_function内部,用作输入的变量将被称为x,无论在函数外部调用它是什么。

    解决方案:更改函数标题中输入变量名的名称,或在整个函数中更改变量的名称。

    <强> 6。但是我创建了x作为全局变量!

    首先:我建议你不要使用全局变量!将变量作为参数传递会更好。

    在Matlab工作区中将变量声明为global是不够的。它必须在您使用它的每个函数中声明。因此,如果您有一个全局变量x,则需要在每个函数中执行global x

    解决方案:重写代码并将变量作为参数传递,而不是使用全局变量。如果这不是一个选项,请在您正在使用它的所有功能中添加global x

    除了这个答案,您还可以参考官方Matlab FAQ

答案 1 :(得分:1)

我也有

  

未定义函数'...'表示'double'类型的输入参数。

错误,我尝试了上面提到的建议,但他们无法解决我的问题。然后,我意识到我当前的工作目录中有一个特殊的字符(*),所以当我更改目录的名称时,我解决了这个问题。

最后,不要忘记使用cd参数在更改操作后更改当前目录。

答案 2 :(得分:0)

解决问题的另一种方法:

输入自变量的顺序应使函数的说明可以读取它。