找回密码
 注册
Simdroid-非首页
查看: 89|回复: 9

自带函数调用出错

[复制链接]
发表于 2009-12-15 20:04:36 | 显示全部楼层 |阅读模式 来自 安徽马鞍山
[Rho,nu] = copulafit('t',[u v],'Method','ApproximateML')
这个statgetargs是matlab里面自带的private里面的函数,调用时为何出现如下错误:
,??? Undefined command/function 'statgetargs'.
Error in ==> copulafit at 92
[eid,errmsg,alpha,method,options] = statgetargs(pnames, dflts, varargin{:});
请高手指教!
发表于 2009-12-15 21:06:21 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
不知道你为什么要调用private下面的函数,private下的函数只是为Matlab系统函数服务的,Matlab默认情况下不允许调用private下面的函数。

如果你非得调用,你可以把private目录改一个名,然后用addpath加入Matlab搜索路径。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-12-16 17:47:59 | 显示全部楼层 来自 安徽马鞍山
上面这个copulafit函数是官网给出的,网上有一个帖子讲这个情况,但是也只是说了一下'statgetargs'是自带的。至于怎么调试不知道。 2# messenger
回复 不支持

使用道具 举报

发表于 2009-12-16 18:56:39 | 显示全部楼层 来自 浙江杭州
如果你是在运行copulafit时出现找不到statgetargs,那你就去相应的private目录下面去找找有没有这个文件。如果有这个文件,而Matlab却找不到,可能是路径的设置问题,添加一下路径试试。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-12-17 18:41:40 | 显示全部楼层 来自 安徽马鞍山
private文件夹是不能添加的,如果将statgetargs.m复制到已经添加过的路径中,也不能正确运行,还是一样的。 4# messenger
回复 不支持

使用道具 举报

发表于 2009-12-18 14:41:01 | 显示全部楼层 来自 浙江杭州
奇怪,你这个copulafit函数是和Matlab一起安装的吗?如果是和Matlab一起安装的不可能找不到需要调用的函数呀。

你which copulafit一下,看看statgetargs.m所在的private目录是不是在系统所寻找的那个copulafit.m下面
回复 不支持

使用道具 举报

 楼主| 发表于 2009-12-27 19:45:59 | 显示全部楼层 来自 安徽马鞍山
copulafit函数不是和Matlab一起安装的,在官方网站找到的一个函数,就算放在同一目录下调用也还是出错。 6# messenger
回复 不支持

使用道具 举报

发表于 2009-12-27 20:09:09 | 显示全部楼层 来自 四川成都
本帖最后由 lengyunfeng 于 2009-12-27 20:23 编辑

我觉得messenger的办法是对的,但可能没表达清楚。这里我建议你用一种办法:把copulafit函数复制到statgetargs函数所在private文件夹的父文件夹内(我在自己的机子上搜了一下,应该是\MATLAB7\toolbox\stats这个文件夹),然后再试试。

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-12-27 20:19:49 | 显示全部楼层 来自 四川成都
本帖最后由 lengyunfeng 于 2009-12-27 20:46 编辑

根据Matlab的帮助命令内容:“Private functions are functions that reside in subdirectories with the special name private. They are visible only to functions in the parent directory. ”,也就是说私有函数是指放于子文件夹(以private命名)内的的函数,它只能为父目录的函数所用。我在Matlab默认用户目录work里加建了一个名为“123”的文件夹,然后把一个当放在work文件夹里可以正常运行的函数放在了123里,再运行这个程序就运行显示出错了;但当把123文件夹的路径填加到搜索路径后又可以运行了。我又试了一下将工具箱内的private文件夹加入搜索路径,结果显示为警告;我又在private文件夹内再建了一个123的文件夹,并进行了填加搜索路径操作,显示是可以填加进去的。综上,我认为Matlab的搜索规则应该如下:
1)private是一个保留文件夹名,填加搜索路径内只要最后一级有该文件夹名出现,均要出错;
2)即便其父目录是搜索路径之一,当子目录(即便不是private文件夹)未被填加进搜索路径时,仍不能被搜索;
3)当Matlab某函数1调用另一个函数2时,它首先在同一个M文件中查找以此命名(函数2)的子函数;如果没有这个子函数,再查找函数1所在目录的Private子目录下的私有函数,最后才在Matlab的搜索路径中查找。
最后一点我是在某本书个看到的,改改拿来用。。。嘿嘿

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-12-27 20:43:41 | 显示全部楼层 来自 浙江杭州
觉得你这个问题,可以参照FAQ中的A7项《如何添加toolbox》中的方法,在file→Preferences→General的Toolbox Path Caching里点击update Toolbox Path Cache更新一下工具箱路径。或者用rehash toolbox命令也行。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 01:29 , Processed in 0.050147 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表