matlab - 如何让 MATLAB 忽略函数?

标签 matlab matlab-compiler

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

sqrt(mu)

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

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

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

让我提供有关该问题的更多详细信息,

我的ma​​in.m文件调用function_a.m函数。 Function_a 函数运行另一个名为 constants 的脚本。 Constants.m 文件不是一个函数,而是一个脚本,它只保留一些变量,因此加载时它会用这些变量填充工作区。其格式为,

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

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

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

我该如何解决这个问题?

最佳答案

首先,没有名为 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;

通过这种方式,Constants.m 中的 mu 并不总是必须被称为 mu,这会导致更健壮和可重用的代码.

关于matlab - 如何让 MATLAB 忽略函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40949496/

相关文章:

image - 在 vl_feat vl_svmtrain 函数中设置成本参数

iOS 将来自 URL 的音频分成帧

c++ - 错误 : mclmcr. h:没有这样的文件或目录从 C 调用 matlab 函数

matlab - 从 Matlab 代码构建一个独立的应用程序

matlab - 我可以删除占位符变量以节省 Matlab 中的内存吗?

c++程序,用于将具有恒定(但未知)列数的未知大小的csv文件(仅填充 float )读取到数组中

matlab - 使用新的 Matlab 图形引擎绘制存储在 .mat 文件中的图形对象

matlab - 命令行不会等到 exe 执行完成

c# - 如何重定向已编译的 matlab 脚本的输出?

java - 使用 "deploytool"和Matlab编译器有什么区别?