Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用不同版本的Matlab函数_Matlab - Fatal编程技术网

使用不同版本的Matlab函数

使用不同版本的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”下 我们需要两个版本都可用

我们对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个参数输入,在“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-请参阅文档。当您请求输出并更改目录时,它会在更改路径之前返回当前工作目录。很抱歉我的仓促编辑。将来一定会使用它!