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

19 matlab function

我是Matlab的新用户,请你帮忙:
我在.M文件中有以下代码:

function f = divrat(w, C)
S=sqrt(diag(diag(C)));
s=diag(S);
f=sqrt(w'*C*w)/(w'*s);
Run Code Online (Sandbox Code Playgroud)

我已将此文件(divrat.M)存储在正常的Matlab路径中,因此我假设Matlab将在启动时读取该函数,因此该函数应该可以使用.

但是,当我输入

>> divrat(w, C)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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

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

小智 28

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

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

>> which divrat
c:\work\divrat\divrat.m
Run Code Online (Sandbox Code Playgroud)

如果它返回:

>> which divrat
'divrat' not found.
Run Code Online (Sandbox Code Playgroud)

它不在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
Run Code Online (Sandbox Code Playgroud)


sun*_*ica 5

正如其他人所指出的那样,这很可能是函数文件路径不在Matlab的"路径"中的问题.

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

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


hak*_*kan 2

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

顺便说一句,你为什么不直接说

s = sqrt(diag(C));
Run Code Online (Sandbox Code Playgroud)

难道不是一样的吗?