“types'double'的input参数的未定义函数'function_name'”。

一个以不同形状和大小频繁popup的问题是:为什么我得到以下错误信息:

“types'double'的input参数的未定义函数'function_name'”。

这篇文章试图解决这个错误信息可能发生的所有不同情况,并提出解决scheme。

如果你偶然发现这个错误信息,不知道它是什么意思。 安慰一下:我们90%的人都用同样的词组。

“types'double'的input参数的未定义函数'int'。

错误信息是不言自明的,但仍可能造成混淆。 (我随机select'int' ,也可以是'train', 'table', 'my_function'或其他)。

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

  1. 你正试图使用​​一个不存在的函数(还)
  2. 您正尝试访问不存在的variables中的元素(还)

如果你得到这个错误,你会怎么做?

首先你可能想尝试一下。 这将告诉你是否你正在使用的函数或variables被定义。

 which int 'int' not found. 

很明显,Matlab找不到任何名为int函数或variables。 试图使用它是徒劳的。 我们来比较一下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. 

但是函数“int”存在! 甚至在这里logging !

是的, int存在,但只有当你有符号工具箱 。 由于工具箱是额外的软件包,必须单独购买(并且可能相当昂贵),因此您可能没有该软件包。

如果出现“未定义函数”错误,但在文档中find该函数,请在左侧菜单中查看,或者直接检查地址。 标准的Matlab函数具有如下地址:

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

注意“matlab”部分。 如果你看到这一点,那么你正在使用的是一个核心Matlab的一部分function。

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

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

或者它可能是neural network工具箱的一部分:

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

解决scheme:find不属于您没有的工具箱的另一个function。 如果你是一个熟练的Google员工,你将有机会find你正在寻找的东西。 如果找不到,请寻求帮助。 解释你所尝试的,并表明你已经做了一些努力!

但是这个function在这里有记载 ,而且是核心Matlab的一部分!

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

在R2013b中引入

所以,如果你使用R2012b,那么你不能使用例如table

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

但是variables“my_variable”存在! 我在上面的行中创build了它!

不,你没有。 你可能会在上面的行中创buildvariablesmyvariablemy_Variablemy_Variable或类似的东西。 你也可以创build它,但意外cleared它。

解决scheme:浏览代码。 查找错别字,错误地清除variables的位置等。在Matlab编辑器中,如果标记variables,则会在底部显示以下行:“find3个”x“的用法”如果已经定义并使用了函数。 您还将在未使用的variables下面看到一条橙线。

但是当我打字的时候,我会得到“y是一个variables”。

如果你得到上面的错误“未定义的函数y”,但which告诉你存在,你的错误信息包含几行:

 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的variables(也请查看这个链接 )。

问题是函数不能访问这个工作区:

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

如果你想要一个函数来查看和使用一个variables,你必须把它作为一个parameter passing。 这样variables将成为该函数本地工作空间的一部分。 同样的,如果你希望在函数内创build的variables可以在函数之外访问,你必须把它作为函数的输出。

解决scheme:将要用作input参数的variables传递给您使用的函数。 确保函数内部的名字是内部一致的。 即它在整个函数中必须具有相同的名称。 请注意,函数外部和内部的variables名称之间没有连接。

5.但是我把variables作为input传递给函数,但是我仍然得到相同的错误信息!

是的,你可能使用variables作为input。 但是,variables名称在不同的function中不一定是相同的(通常不是)。

假设你有这个function:

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

即使您使用y作为inputvariables,并在函数中使用y ,如果您从工作空间中调用它,则会像上面的代码一样得到与上面相同的错误。

 y = 3; res = my_function(y) 

这是因为在函数my_function ,用作input的variables将被称为x ,而不pipe它在函数之外被调用的是什么。

解决scheme:更改函数标题中inputvariables名称的名称,或更改整个函数中variables的名称。

6.但是我已经创build了x作为全局variables!

首先:我build议你不要使用全局variables! 将variables作为parameter passing好得多。

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

解决scheme:重写代码并将variables作为parameter passing,而不是使用全局variables。 如果这不是一个选项,请在您使用它的所有函数中添加global x


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