以不同形状和大小经常弹出的问题是:为什么我收到以下错误消息:
"未定义的功能' function_name'输入参数类型为' double'。"
本文试图解决可能出现此错误消息的所有不同方案,并提出解决方案的解决方案。
答案 0 :(得分:26)
如果您偶然发现此错误消息并且不知道其含义。请放心:我们90%的人用Google搜索同一个词。
"未定义的功能' int'输入参数类型为' double'。"
错误消息非常明显,但仍可能导致混淆。 (我随机选择了'int'
,它也可能是'train', 'table', 'my_function'
或其他任何内容。
发生此错误有两种主要情况:
如果您收到此错误,该怎么办?
首先,您可能想尝试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;存在!我在上面的行中创建了它!
不,你没有。您有可能在上面的行中创建变量myvariable
,my_Variable
,my_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)
解决问题的另一种方法:
输入自变量的顺序应使函数的说明可以读取它。