"Undefined function 'function_name' for input arguments of type 'double'."



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

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

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

如果您偶然发现这个错误消息,并且不知道它的含义。让我们感到欣慰的是:90%的人都在谷歌上搜索过同一个短语。

"为"double"类型的输入参数定义了未定义的函数"int">

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

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

  1. 您正在尝试使用一个(尚未)存在的函数
  2. 您正试图访问(尚未)存在的变量中的元素

如果出现此错误,该怎么办

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

which int
'int' not found.

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

which max
built-in (C:Program FilesMATLABR2014btoolboxmatlabdatafun@logicalmax)  % logical method

但是,即使你得到了";未定义的函数"x"&";。如果是,请参阅下文第3点。

which x
x is a variable.

1.但是函数";int";存在!这里甚至有记录

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

如果你得到";未定义的函数";错误,但是在文档中找到函数,查看左侧菜单,或者简单地检查地址。标准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,则不能使用例如table

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

3。但是变量";my_ variable";存在!我在上面的一行中创建了它

不,你没有。很可能您在上面的行中创建了变量myvariablemy_Variablemy_Variable或类似的内容。也有可能是您创建了它,但意外地cleared了它。

解决方案:浏览代码。查找拼写错误、意外清除变量的地方等。在Matlab编辑器中,如果您标记一个变量,您将在底部得到以下行:;";x〃;找到";如果您已经定义并使用了函数。您还会在未使用的变量下面得到一条橙色的线。

4.但我得到了";y是一个变量"y";当我键入which y

如果你得到上面的错误";未定义的函数"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工作空间中有一个名为y的变量(也可以查看这个链接)。

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

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

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

解决方案:将要用作输入参数的变量传递给所使用的函数。确保函数内部的名称在内部一致。也就是说,它在整个函数中必须具有相同的名称。请注意,函数外部和内部的变量名之间没有连接。

5.但我将变量作为输入传递给函数,但仍然收到相同的错误消息

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

假设你有一个功能:

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

如果您像下面的代码中那样从工作区调用它,即使您使用y作为输入变量,并且在函数中使用y,也会得到与上面相同的错误。

y = 3;
res = my_function(y)

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

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

6.但是我已经创建了x作为全局变量

首先:如果你正在阅读这篇文章,那么你最好将变量作为自变量传递,而不是使用全局变量。

仅仅在Matlab工作空间中将变量声明为全局变量是不够的。它必须在你使用它的每个函数中声明。所以,如果你有一个全局变量x,你需要在每个函数中做global x

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


除了这个答案,你还可以参考官方的Matlab常见问题解答。

我也得到了

未定义的函数"…"用于类型为"double"的输入参数。

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

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

另一种看待问题的方法:

输入自变量的顺序应使函数的解释能够读取。

最新更新