MATLAB错误:未定义的函数或方法X表示'double'类型的输入参数

时间:2008-10-13 12:38:38

标签: 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)

我收到以下错误

  

???未定义的函数或方法'divrat'表示'double'类型的输入参数。

告诉我这样做的错误信息是什么,我在代码或函数调用中看不到任何错误?

7 个答案:

答案 0 :(得分:28)

当函数不在MATLAB路径或pwd中时,会出现此错误。

首先,确保您能够使用以下方法找到该功能:

>> which divrat
c:\work\divrat\divrat.m

如果它返回:

>> which divrat
'divrat' not found.

它不在MATLAB路径上或在PWD中。

其次,使用divrat命令确保包含PATH的目录位于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

答案 1 :(得分:5)

正如其他人所指出的,这很可能是函数文件路径不在Matlab的“路径”中的问题。

验证这一点的一种简单方法是在编辑器中打开您的功能,然后按 F5 键。这将使编辑器尝试运行该文件,如果文件不在路径中,它将提示您一个消息框。选择Add to Path,你必须没事。

一方面注意:在上述过程结束时,Matlab命令窗口会出现错误,说明参数丢失:显然,当我们尝试从编辑器运行时,我们没有提供任何参数。但是从现在开始,您可以使用命令行中的函数给出正确的参数。

答案 2 :(得分:4)

此问题的最常见原因是Matlab无法在其搜索路径上找到该文件。基本上,Matlab查找文件:

  1. 当前目录(pwd);
  2. 直接在路径上的目录中(查看路径,在命令行键入path
  3. 在上面任何目录中名为@(whatever the class of the first argument is)的目录中。

    正如其他人建议的那样,您可以使用命令which,但在这种情况下通常没有用 - 它告诉您Matlab找不到您已经知道的文件。

    所以要做的第一件事就是确保文件可以在路径上找到

    接下来要做的是确保matlab找到的文件(使用哪个)需要与您实际传递的第一个参数相同的类型。 I.el,如果w应该是不同的类,并且那里有divrat函数,但w实际上是空的,[],所以matlab正在寻找Double/divrat,当只有@(yourclass)/divrat.这只是我的猜测,但这经常让我感到厌烦。

答案 3 :(得分:2)

错误代码表示找不到函数定义。确保从存储divrat.m文件的同一工作区调用该函数。并确保divrat函数不是一个子函数,它应该是文件中的第一个函数声明。您也可以尝试从同一个divrat.m文件调用该函数,以查看问题是否与工作区选择或函数有关。

顺便问一下,你为什么不简单地说

s = sqrt(diag(C));

不一样吗?

答案 4 :(得分:2)

另外,将其命名为divrat.m,而不是divrat.M。这对大多数操作系统来说无关紧要,但谁知道......

您还可以使用which命令测试matlab是否可以找到函数,即

which divrat

答案 5 :(得分:2)

函数本身是有效的matlab代码。问题必须是别的。
尝试从它所在的目录中调用该函数,或使用addpath('pathname')将该目录添加到搜索路径。

答案 6 :(得分:0)

我很确定发生此问题的原因是因为此函数所属的工具箱(包)的许可证。编写which divrat并查看结果是什么。如果它返回函数的路径和注释Has no license available,则问题与许可证有关。这意味着,未正确设置包的许可证。大多数情况下,如果稍​​后添加此函数的包(工具箱),即在安装原始matlab之后,就会发生这种情况。请检查并解决许可证问题,然后它将正常工作。