使用不同版本的Matlab函数

时间:2013-10-04 14:25:57

标签: matlab

我们有一个matlab函数nanstd.m的遗留定义,它在很多函数中被调用。

旧版本的定义如下:

function y = nanstd(x, dim);

以上定义存储在我们的本地服务器驱动器" H \ Util \ Functions"。

较新版本的matlab有一个不同的定义:

function y = nanstd(fts, varargin)

以上翻译为:

Y = nanstd(X,flag,dim)

以上内容存储在" C \ Program Files \ Matlab"。

我们需要两个版本都可用。是否有可能我可以编写一个代码,如果有2个参数输入使用nanstd.m at" H \ Util \ Functions"如果有3个输入则使用nanstd.m在" C \ Program Files \ Matlab"。

由于

3 个答案:

答案 0 :(得分:7)

由于您的旧版定义应位于路径上的内置版本之前,因此您只需将以下内容添加到自定义nanstd中,以便其行为如下:

function y = nanstd(x,varargin)

if nargin > 2
    wd = cd(fullfile(matlabroot,'toolbox','stats','stats'));
    y = nanstd(x,varargin{:});
    cd(wd)
    return
elseif nargin == 2
    flag = varargin{1};
end

%// ... continue custom nanstd function

根据this discussion on MatlabCentral,运行阴影函数的唯一方法是更改​​为其目录。令人惊讶的是,路径偏爱当前目录到当前函数 - 这让我感到惊讶 - 但这对于这种情况是有益的。这使您可以简单地修改自定义遗留的nanstd函数,以启动内置定义。

编辑:您可能希望使用nanstd将调用包装到统计信息try/catch,这样即使出现错误,您的目录也会始终恢复。

答案 1 :(得分:3)

推荐方法

这可能是我这样做的方式(如果我以后不想弄得一团糟)。

找到所有旧文件,并将nanstd(替换为nanstdold(,这可以通过多种方式实现自动化。

(如果你真的有名为nanstd的变量,你会感到痛苦的当然)

然后,为了安全地定义你的功能如下:

function y = nanstdold(fts, varargin)

if nargin = 2
   y = nanstd(fts,[],varargin)
else
   y = nanstd(fts,varargin)
end

您可能需要调整对nanstd的第一次调用,但我认为这种思路可以帮助您。

确保刻录只有2个输入参数的nanstd函数,这样就不会意外地引用它。

答案 2 :(得分:1)

替代方法

如果您有信心,可以尝试设计替换规则,以自动更新所有旧文件,而无需引入新功能。一些事情开始:

查找所有出现的

nanstd( + something+ comma that is not between {} or () 

并用

替换它们
nanstd( + something+ comma + flag argument + comma

特别是对于这个,您需要先备份文件!