【问题标题】:Working with different version of Matlab Function使用不同版本的 Matlab 函数
【发布时间】:2013-10-04 14:25:56
【问题描述】:

我们有一个 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 在“H\Util\Functions”,如果有 3 个输入使用 nanstd.m 在“C\Program Files\Matlab” .

谢谢

【问题讨论】:

    标签: matlab


    【解决方案1】:

    由于您的旧定义应该在您的路径上的内置版本之前,您可以简单地将以下内容添加到您的自定义 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 函数以退出内置定义。

    编辑:您可能希望使用try/catch 包装对统计信息nanstd 的调用,以便您的目录始终得到恢复,即使出现错误也是如此。

    【讨论】:

    • 我刚刚意识到,我们服务器上的旧版本采用向量作为输入,但 Matlab 安装文件中的那个采用金融时间序列作为输入。有什么建议吗?我可以将向量更改为一些虚拟的金融时间序列吗?最初的 Google 搜索没有给我任何答案。
    • 没关系,在 Matlab 安装中 nanstd 有两种定义。一个用于正则向量,另一个用于时间序列。
    • @Dennis - 请参阅cd 的文档。当您请求输出并正在更改目录时,它会在更改路径之前返回当前工作目录。
    • 抱歉我的仓促编辑。将来肯定会使用它!
    【解决方案2】:

    推荐方法

    这可能是我会做的方式(如果我不想在未来搞得一团糟的话)。

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

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

    然后,为了安全起见,如下定义您的函数:

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

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

    确保烧掉只接受 2 个输入参数的 nanstd 函数,以免意外引用它。

    【讨论】:

    【解决方案3】:

    替代方法

    如果您有信心,可以尝试设计一个替换规则,在不引入新功能的情况下自动更新所有旧文件。开始的东西:

    查找所有出现的

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

    并将它们替换为

    nanstd( + something+ comma + flag argument + comma
    

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

    【讨论】:

      猜你喜欢
      • 2012-12-05
      • 2013-08-24
      • 2011-08-17
      • 2013-02-09
      • 1970-01-01
      • 2015-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多