首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用不同版本的Matlab函数

使用不同版本的Matlab函数
EN

Stack Overflow用户
提问于 2013-10-04 14:25:56
回答 3查看 375关注 0票数 5

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

遗留版本的定义如下:

代码语言:javascript
复制
function y = nanstd(x, dim);

上述定义存储在本地服务器驱动器"H\Util\Functions“中。

最新版本的matlab有一个不同的定义,即:

代码语言:javascript
复制
function y = nanstd(fts, varargin)

上述翻译为:

代码语言:javascript
复制
Y = nanstd(X,flag,dim)

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

我们需要这两个版本都可用。我是否有可能编写这样的代码:如果有2个参数输入,请在“H\Util\Files”处使用nanstd.m,如果有3个输入,则在"C\Program \Matlab“处使用nanstd.m。

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-04 14:49:17

由于您的遗留定义应该在路径上的内置版本之前,所以您可以简单地将以下内容添加到您的自定义nanstd中,这样它的行为如下:

代码语言:javascript
复制
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函数,以启动到内置定义。

编辑:您可能需要将对stats nanstd的调用包装为一个try/catch,以便您的目录总是被恢复,即使发生错误。

票数 7
EN

Stack Overflow用户

发布于 2013-10-04 14:43:08

推荐的方法

这可能是我做这件事的方式(如果我不想在未来弄得一团糟)。

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

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

然后,为了安全起见,将您的功能定义如下:

代码语言:javascript
复制
function y = nanstdold(fts, varargin)

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

您可能需要调整对nanstd的第一个调用,但我认为这条思路应该能让您达到目的。

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

票数 3
EN

Stack Overflow用户

发布于 2013-10-04 15:07:49

交替法

如果您感到自信,您可以尝试设计一个替换规则,以自动更新所有旧文件而不引入新功能。首先要做的事:

找出所有发生的事

代码语言:javascript
复制
nanstd( + something+ comma that is not between {} or () 

并代之以

代码语言:javascript
复制
nanstd( + something+ comma + flag argument + comma

特别是对于这一个,你会想要备份你的文件第一!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19183734

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档