Function MATLAB错误:输入参数类型为';的未定义函数或方法X;双倍';
我是Matlab的新用户,请您帮助:Function MATLAB错误:输入参数类型为';的未定义函数或方法X;双倍';,function,matlab,Function,Matlab,我是Matlab的新用户,请您帮助: 我在.M文件中有以下代码: function f = divrat(w, C) S=sqrt(diag(diag(C))); s=diag(S); f=sqrt(w'*C*w)/(w'*s); 我已经将这个文件(divrat.M)存储在正常的Matlab路径中,因此我假设Matlab将在启动时读取该函数,因此该函数应该可以使用 然而,当我打字时 >> divrat(w, C) 我得到以下错误 ???类型为“double”的输入参数的未定义函数
我在.M文件中有以下代码:
function f = divrat(w, C)
S=sqrt(diag(diag(C)));
s=diag(S);
f=sqrt(w'*C*w)/(w'*s);
我已经将这个文件(divrat.M)存储在正常的Matlab路径中,因此我假设Matlab将在启动时读取该函数,因此该函数应该可以使用
然而,当我打字时
>> divrat(w, C)
我得到以下错误
???类型为“double”的输入参数的未定义函数或方法“divrat”
错误消息告诉我要做什么,我在代码或函数调用中看不到任何错误?错误代码表示找不到函数定义。确保从存储
divrat.m
文件的同一工作区调用函数。并确保divrat
函数不是子函数,它应该是文件中的第一个函数声明。您还可以尝试从相同的divrat.m
文件调用函数,以查看问题是出在工作区选择还是函数上
顺便问一下,你为什么不直接说
s = sqrt(diag(C));
它不是一样吗?另外,给它命名为
divrat.m
,而不是divrat.m
。这在大多数操作系统上都不重要,但谁知道呢
您还可以使用which
命令测试matlab是否可以找到函数,即
which divrat
函数本身是有效的matlab代码。问题一定是别的。
尝试从它所在的目录中调用函数,或者使用
addpath('pathname')
将该目录添加到搜索路径,正如其他人指出的,这很可能是函数文件的路径不在Matlab的“path”中的问题
验证这一点的一个简单方法是在编辑器中打开函数并按F5键。这将使编辑器尝试运行该文件,如果该文件不在路径中,它将用消息框提示您。在其中选择添加到路径
,您必须准备就绪
一个旁注:在上述过程结束时,Matlab命令窗口将给出一个错误,说明参数丢失:显然,我们在尝试从编辑器运行时没有提供任何参数。但是从现在起,您可以使用命令行中的函数提供正确的参数。此问题最常见的原因是Matlab无法在其搜索路径上找到文件。基本上,Matlab在中查找文件:
pwd
)李>
path
)@的目录中(无论第一个参数的类是什么)
位于上面任何目录中。正如其他人所建议的,您可以使用命令
,该命令,但在这种情况下通常没有帮助-它告诉您Matlab无法找到您已经知道的文件。
因此,要做的第一件事是确保该文件位于路径上。
接下来要做的是确保matlab正在查找的文件(使用该文件)需要与实际传递的第一个参数相同的类型。I.el,如果w
应该是不同的类,并且那里有一个divrat
函数,但是w
实际上是空的,[]
,那么matlab正在寻找Double/divrat
,而这里只有一个@(yourclass)/divrat。
这只是我的猜测,但这经常会咬到我
当函数不在MATLAB路径或pwd中时,会出现此错误 首先,确保您能够使用以下方法找到函数:
>> which divrat
c:\work\divrat\divrat.m
如果它返回:
>> which divrat
'divrat' not found.
它不在MATLAB路径上或PWD中
其次,使用path
命令确保包含divrat
的目录位于MATLAB路径上。可能是您认为在路径上的目录实际上不在路径上
最后,确保您没有使用“私有”目录。如果divrat
位于名为private的目录中,则父目录中的函数可以访问该目录,但不能从MATLAB命令行访问:
>> foo
ans =
1
>> divrat(1,1)
??? Undefined function or method 'divrat' for input arguments of type 'double'.
>> which -all divrat
c:\work\divrat\private\divrat.m % Private to divrat
我很确定这个问题发生的原因是因为这个函数所属的工具箱(包)的许可证。写下
哪个divrat
,看看结果如何。如果它返回函数的路径,并且注释没有可用的许可证
,则问题与许可证有关。也就是说,软件包的许可证设置不正确。大多数情况下,如果该函数的包(工具箱)是在以后添加的,即在安装了原始的matlab
之后。请检查并解决许可证问题,然后它将正常工作 我已经将代码导出到Java并在unix平台上运行。我如何在那里提供?