首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MATLAB错误:'double‘类型的输入参数的函数或方法X未定义

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

Stack Overflow用户
提问于 2008-10-13 12:38:38
回答 6查看 188.3K关注 0票数 20

我是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’的输入参数。

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

EN

回答 6

Stack Overflow用户

发布于 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
票数 28
EN

Stack Overflow用户

发布于 2008-10-20 18:45:52

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

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

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

因此,首先要做的是确保文件在路径上是可定位的。

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

票数 4
EN

Stack Overflow用户

发布于 2008-10-13 13:11:21

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

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

s = sqrt(diag(C));

难道不是一样的吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/197441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档