Ste*_*fin 20 matlab undefined octave
以不同形状和大小经常弹出的问题是:为什么我会收到以下错误消息:
"未定义函数'function_name'用于'double'类型的输入参数."
本文试图解决可能出现此错误消息的所有不同方案,并提出解决方案的解决方案.
Ste*_*fin 30
如果您偶然发现此错误消息并且不知道它的含义.请放心:我们90%的人用Google搜索同一个词.
"未定义的函数'int'用于'double'类型的输入参数."
错误消息非常明显,但仍可能导致混淆.(我'int'随意选择,它也可以'train', 'table', 'my_function'或其他任何东西).
出现此错误的主要情况有两种:
如果收到此错误,您会怎么做?
首先你可能想尝试一下which.这将告诉您是否定义了您尝试使用的函数或变量.
which int
'int' not found.
Run Code Online (Sandbox Code Playgroud)
很明显,Matlab找不到任何命名的函数或变量int.因此试图使用它是徒劳的.让我们来比较一下max:
which max
built-in (C:\Program Files\MATLAB\R2014b\toolbox\matlab\datafun\@logical\max) % logical method
Run Code Online (Sandbox Code Playgroud)
但是,即使你得到"未定义函数'x'......",你也可能得到以下结果.如果是,请参见下面的第3点.
which x
x is a variable.
Run Code Online (Sandbox Code Playgroud)
但是函数"int"存在!它甚至记录在这里!?
是的,int存在,但只有你有符号工具箱.由于工具箱是必须单独购买的附加包(并且可能非常昂贵),因此您可能没有该包.
如果您收到"未定义函数"错误,但在文档中找到该函数,请查看左侧菜单,或者只是检查地址.标准Matlab函数具有以下地址:
mathworks.com/help/matlab/ref/max.html
^^^^^^
Run Code Online (Sandbox Code Playgroud)
注意"matlab"部分.如果你看到这个,那么你正在使用一个功能,它是核心Matlab的一部分.
但是,如果您看到如下所示的地址,那么您尝试使用的功能是符号工具箱的一部分:
mathworks.com/help/symbolic/int.html
^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
或者它可能是神经网络工具箱的一部分:
mathworks.com/help/nnet/ref/train.html
^^^^
Run Code Online (Sandbox Code Playgroud)
解决方案:找到另一个不属于您没有的工具箱的功能.如果你是一名熟练的Google员工,你有可能找到你想要的东西.如果找不到,请寻求帮助.解释你的尝试,并表明你已经做了一些努力!
但是这里记录了这个函数,它是核心Matlab的一部分!?
即使函数是标准Matlab安装的一部分,并且有详细记录,您仍可能会收到此错误.导致此错误的最可能原因是您使用的是旧版本的Matlab.如果您查看文档,您将在页面底部看到以下内容:
在R2013b中引入
因此,如果您使用的是R2012b,那么就不能使用table.
解决方案:检查您的Matlab版本中是否定义了该功能.如果它尚未实现,那么您需要更新Matlab或找到另一种方法来实现它.table例如,可以使用细胞或结构的替代方案.
但是变量"my_variable"存在!我在上面的行中创建了它!
不,你没有.机会是你创建的变量myvariable,my_Variable,my_Variable或在上面的线类似的东西.您也可能已经创建了它,但偶然发生了cleared它.
解决方案:浏览代码.查找拼写错误,您意外清除变量的位置等.在Matlab编辑器中,如果您标记变量,您将在底部获得以下行:"如果已定义并使用了该函数,则"3"使用"x"找到" .您还将在未使用的变量下面获得橙色线.
但是当我输入时,我得到"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.
Run Code Online (Sandbox Code Playgroud)
这告诉你的是你y在Matlab工作区中调用了一个变量(也请查看此链接).
问题是函数无法访问此工作空间:
函数不使用基本工作空间.每个函数都有自己的函数工作区.
如果希望函数查看和使用变量,则必须将其作为参数传递.这样,变量将成为该函数的本地工作空间的一部分.同样,如果希望在函数内部创建的变量可以在函数外部访问,则必须将其作为函数的输出.
解决方案:将要用作输入参数的变量传递给您使用的函数.确保函数内部的名称内部一致.即它在整个功能中必须具有相同的名称.请注意,函数外部和内部的变量名之间没有任何关联.
但是我将变量作为函数的输入传递,但我仍然得到相同的错误信息!?
是的,你可能使用变量作为输入.但是,变量名在不同的函数中不一定相同(通常它们不是).
假设你有这个功能:
function output = my_function(x)
output = 2*y;
end
Run Code Online (Sandbox Code Playgroud)
如果你从下面的代码中的工作区调用它,你将得到与上面相同的错误,即使你y用作输入变量,并y在函数内部使用.
y = 3;
res = my_function(y)
Run Code Online (Sandbox Code Playgroud)
这是因为在函数内部,无论在函数外部调用什么,都my_function将调用用作输入的变量x.
解决方案:在函数头中更改输入变量名的名称,或在整个函数中更改变量的名称.
6.但我创造x了全球变量!?
首先:我建议你不要使用全局变量!将变量作为参数传递会更好.
仅在Matlab工作空间中将变量声明为全局变量是不够的.它必须在您使用它的每个函数中声明.因此,如果您有一个全局变量x,则需要global x在每个函数中执行.
解决方案:重写代码并将变量作为参数传递,而不是使用全局变量.如果这不是一个选项,请添加global x您正在使用它的所有功能.
除了这个答案,你可以参考官方的Matlab FAQ.