【问题标题】:How can I make MATLAB to ignore a function?如何让 MATLAB 忽略一个函数?
【发布时间】:2016-12-03 15:40:23
【问题描述】:

我的问题是,即使有一个名为“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 之前,我使用调试器来停止代码。穆实际上应该在工作空间中。在调试模式下,如果我使用命令 sqrt(mu),它会正常工作。但是当我让继续运行时,当在函数文件中写入相同的命令时,Matlab 会给出错误,表明它正在尝试使用内部函数。

我该如何解决这个问题?

【问题讨论】:

    标签: matlab matlab-compiler


    【解决方案1】:

    首先,没有名为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,这会导致代码更加健壮和可重用。

    【讨论】:

    • 不应该是function S = Constants吗?
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    相关资源
    最近更新 更多