使用不同版本的Matlab函数

Zan*_*nam 5 matlab

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

旧版本的定义如下:

function y = nanstd(x, dim);
Run Code Online (Sandbox Code Playgroud)

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

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

function y = nanstd(fts, varargin)
Run Code Online (Sandbox Code Playgroud)

以上翻译为:

Y = nanstd(X,flag,dim)
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Mat*_* B. 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
Run Code Online (Sandbox Code Playgroud)

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

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