使用不同版本的Matlab函数
我们对matlab函数nanstd.m有一个传统的定义,它在很多函数中被调用 旧版本的定义如下:使用不同版本的Matlab函数,matlab,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”下 我们需要两个版本都可用
function y = nanstd(x, dim);
上述定义存储在本地服务器驱动器“H\Util\Functions”中
较新版本的matlab有一个不同的定义,即:
function y = nanstd(fts, varargin)
上述情况转化为:
Y = nanstd(X,flag,dim)
以上内容存储在“C\Program Files\Matlab”下
我们需要两个版本都可用。我是否可以编写一个代码,比如如果有2个参数输入,在“H\Util\Functions”中使用nanstd.m,如果有3个输入,在“C\Program Files\Matlab”中使用nanstd.m
谢谢推荐的方法 这可能就是我要做的(如果我不想在将来把事情搞得一团糟的话) 找到所有旧文件,并用
nanstdold(
)替换nanstd(
),这可以通过多种方式实现自动化
(如果您确实有名为nanstd
的变量,您当然会感到痛苦)
然后,为了安全起见,请按如下方式定义您的函数:
function y = nanstdold(fts, varargin)
if nargin = 2
y = nanstd(fts,[],varargin)
else
y = nanstd(fts,varargin)
end
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
您可能需要调整对nanstd
的第一个调用,但我认为这条思路应该能让您达到目的
请确保烧录只接受2个输入参数的
nanstd
函数,这样您就不会意外引用它。由于您的旧定义应该在路径上的内置版本之前,您可以简单地将以下内容添加到自定义nanstd中,使其行为如下:
function y = nanstdold(fts, varargin)
if nargin = 2
y = nanstd(fts,[],varargin)
else
y = nanstd(fts,varargin)
end
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
根据,运行隐藏函数的唯一方法是更改到其目录。令人惊讶的是,该路径将当前目录偏向于当前函数-这让我感到惊讶-但这对这种情况很有好处。这允许您只需修改自定义遗留NastD函数,即可跳转到内置定义
编辑:您可能想用一个try/catch来包装对stats
nanstd
的调用,这样即使出现错误,您的目录也会被还原。替代方法
如果您有信心,可以尝试设计一个替换规则,在不引入新功能的情况下自动更新所有旧文件。首先:
查找所有发生的
nanstd( + something+ comma that is not between {} or ()
并用
nanstd( + something+ comma + flag argument + comma
特别是对于这一版本,您需要首先备份您的文件!这就是我们小组处理荒谬问题的方式。虽然这是一种痛苦,但它对未来更为强大。我刚刚意识到,我们服务器上的旧版本采用向量作为输入,而Matlab安装文件上的版本采用金融时间序列作为输入。有什么建议吗关于这一点?我可以将向量更改为虚拟金融时间序列吗?最初的谷歌搜索没有给我任何答案。没关系,在Matlab安装中有两个nanstd的定义。一个是常规向量,另一个是时间序列。@Dennis-请参阅文档。当您请求输出并更改目录时,它会在更改路径之前返回当前工作目录。很抱歉我的仓促编辑。将来一定会使用它!