Function MATLAB错误:输入参数类型为';的未定义函数或方法X;双倍';

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”的输入参数的未定义函数

我是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”的输入参数的未定义函数或方法“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平台上运行。我如何在那里提供?