我是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’的输入参数。
错误消息告诉我要做什么,我在代码或函数调用中看不到任何错误?
发布于 2008-11-21 15:38:11
当函数不在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
发布于 2008-10-20 18:45:52
此问题最常见的原因是Matlab在其搜索路径上找不到该文件。基本上,Matlab在以下位置查找文件:
pwd
);path
)@(whatever the class of the first argument is)
的目录中,该目录位于上述任何目录中。正如其他人所建议的,您可以使用which
命令,但在这种情况下,这通常没有帮助-它会告诉您Matlab找不到您已经知道的文件。
因此,首先要做的是确保文件在路径上是可定位的。
接下来要做的是确保matlab正在查找的文件(使用哪个)需要的类型与您实际传递的第一个参数的类型相同。I.el,如果w
应该是不同的类,那里有一个divrat
函数,但w
实际上是空的,[]
,所以matlab正在寻找Double/divrat
,当只有一个@(yourclass)/divrat.
时,这只是我的猜测,但这经常让我头疼。
发布于 2008-10-13 13:11:21
错误代码表示找不到函数定义。确保从存储divrat.m
文件的同一工作区调用函数。并确保divrat
函数不是子函数,它应该是文件中的第一个函数声明。您还可以尝试调用同一divrat.m
文件中的函数,以查看问题是与工作区选择有关还是与函数有关。
顺便问一下,你为什么不直接说
s = sqrt(diag(C));
难道不是一样的吗?
https://stackoverflow.com/questions/197441
复制相似问题