使用MATLAB执行文件或调用其文件放在另一个文件夹中的函数?

时间:2011-05-27 14:02:04

标签: matlab

尝试Googling,但找不到任何东西 我当前的MATLAB文件夹中有一些文件和文件夹 其中一个文件夹称为“Map”,它有一个'map1.m'文件,我想从当前MATLAB文件夹中的代码中调用它。
在我的代码中,我不能这样称呼它:

/Map/map1;

但我可以这样做:

cd Map;
map1;
cd ..;

不知何故,上述方法似乎不正确。有更优雅的方式吗?

3 个答案:

答案 0 :(得分:38)

您可以使用run命令运行文件,而无需手动将文件夹添加到路径中,该命令专门用于此类情况。来自文档:

  

run是一个便捷函数,可以运行当前不在路径上的脚本。

您将功能/脚本称为

run /Map/map1 

如果您只想输入其名称而不是完整(或相对)路径来运行函数/脚本,则应将该文件夹添加到路径中。

如@mutzmatron所述,您不能使用run来调用具有输入/输出参数的函数。因此,除非它是没有输入/输出参数的脚本/函数,否则使用run将无效,您必须将文件夹添加到路径中。


修改

就像良好的编码习惯一样,并且在您的功能具有输入/输出的情况下工作,从路径添加/删除文件夹是正确的方法。所以对于你的情况,

addpath /Map
...

map1;

...
rmpath /Map

重要的是你的函数调用夹在addpathrmpath命令之间。如果你在两个文件夹中都有相同名称的功能,那么你应该把它夹得更紧,即前一行和后一行,以避免冲突。

答案 1 :(得分:7)

只需将所有这些目录添加到带有addpath的Matlab路径,就像gnovice建议的那样。然后,您将能够正常调用这些函数,并且它们对于(),help(),depfun()和其他Matlab元编程命令都是可见的。您可以在addpath()文件中添加startup.m次调用,以便在每次启动Matlab时自动显示这些调用。

每次使用addpath / map1()/ rmpath更改路径都有一些缺点。

  • 这是一个性能损失,因为您正在为每个调用添加路径操作。
  • 不同目录中的功能将无法相互看到。
  • 编写和调试函数会更难,因为它们执行的路径上下文将动态更改,并且与您在编辑器和基础工作区中看到的内容不同。
  • 如果被调用的函数出错,则需要额外的错误处理代码以确保路径已正确恢复。
  • 如果您希望在某些时候部署此代码,则无法使用Matlab编译器。

使用run()或cd()本身很难看,因为相对路径会有问题。

如果你真的想要将子目录中的函数分开,以便它们不能相互“看到”,你可以通过在它们的名字前放一个“+”来使那些目录命名空间,然后使用它来限定函数调用。命名空间,如Map.map1()

答案 2 :(得分:0)

只是为改变路径的辩论做出贡献......

让它变得更安全的一种方法"是写

% start of my code: create function handles 
% to the functions I need:
try
   cd Map
   map1_func = @map1;
catch mexception
end
cd ..

这会尝试保留当前目录,并在另一个目录中获取该函数的句柄。

唯一的问题是,如果map1依赖于Map目录中的其他功能,则此方法不会工作。