如何让MATLAB忽略一个函数?

时间:2016-12-03 15:40:23

标签: matlab matlab-compiler

我的问题是,即使有一个名为' mu'的局部变量,当代码运行命令时

  

sqrt(mu)

Matlab尝试运行名为mu的内部函数。

据我所知,这不是正常行为。如何让Matlab在其内部函数上使用局部变量?

我计划使用部署工具编译此代码,因此修改matlab的内部函数文件是不合适的。在编译版本中会出现问题。

让我详细介绍一下这个问题,

我的 main.m 文件调用 function_a.m 函数。 Function_a函数运行另一个名为常量的脚本。 Constants.m文件不是一个函数而是一个脚本,它只保留一些变量,所以当它加载时它会用这些变量填充工作区。它的格式是,

const1=3; const2=5; mu=2;

在function_a运行constant.m之后,它尝试使用mu值。这是matlab从内部mu函数中给出错误的时候。这意味着Matlab不使用由contants.m。

创建的局部mu变量

我使用调试器在运行constant.m之后但在命令中使用mu之前停止代码。穆实际上是在应有的工作空间。在调试模式下,如果我使用命令sqrt(mu),它可以正常工作。但是当我继续运行时,当在函数文件中写入相同的命令时,Matlab会给出错误,表明它正在尝试使用内部函数。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

首先,没有名为mu的内部功能,所以我不知道那里有什么混乱。

问题很可能发生,因为您已将mu用作函数,然后在Constants脚本中,您将其用作变量,并且MATLAB的静态代码分析器变得混乱,因此它随着它的第一次使用作为一种功能。这与您遇到的if you called load and tried to load a variable with the name of a function into the current workspace相同。

但总的来说,为了避免这样的问题,你应该避免使用像Constants.m这样的脚本来填充调用函数的工作空间。这是因为如果调用函数的工作空间包含具有相同名称的函数或变量,则最终会出现这种歧义。更好的方法是使Constants成为一个函数并让它返回一个struct,然后可以用它来访问常量变量

function S = Constants
    S.const1 = 3;
    S.const2 = 5;
    S.mu = 2;
end

然后从调用函数

constants = Constants();

% Use the constants
value = constants.const1 + constants.mu;

% Or assign them to "safe" variables that are specific to this calling function
my_mu = constants.mu;

通过这种方式,来自mu的{​​{1}}并不总是必须被称为Constants.m,这会导致更强大和可重复使用的代码。