在 MATLAB GUI 中进行函数计算后隐藏工作区中的特定变量

Hiding specific variables in workspace after function calculations in MATLAB GUI

我在 Matlab 中使用 GUI 创建一些矩阵。我有一个带有 4 个复选框功能的面板,如下所示:

function checkbox1_Callback(hObject, eventdata, handles)

假设每个 复选框 计算这些矩阵 高度、质量、密度和功率 。当我单独检查每一个时,它正确地评估了请求的矩阵,但是我必须按照它们的顺序检查它们,因为每个的结果取决于前面的。我通过在每个函数中添加前面的代码来解决这个问题。当我计算密度时, 工作区 window 将密度以及高度和质量作为变量。我想在密度函数中使用一个命令,在计算之后,它只会出现在 workspace 中的密度矩阵。我用了下面两个

clearvars ('-except', 'density')

clear height mass 

但似乎当我 运行 它时,它不起作用,因为它将所有变量保留在 工作区 但是 没有出现错误。当我 运行 它在 命令中时 window 它可以工作,但我想让它在函数内部工作。我怎样才能做到这一点?

关于您的 clearvars 问题,那是因为根据设计,该函数仅在调用它的范围内执行请求的清理。虽然乱用工作区变量并不是一个好主意(你有更好的选择,比如将数据存储在 GUI 句柄中并在完成后清除它们)......这是一个片段,基于你的例子,向您展示如何实现您的目标:

function myFunction()
    % perform some calcunations...
    evalin('base','clearvars(''-except'',''density'')');
end

evalin 函数允许在特定工作区(在本例中为基础 Matlab 工作区)内计算特定表达式(在本例中为 clearvars 调用)。但我建议你仔细调整它 veeeeery ,否则风险是处理其他非常重要的变量(我正在考虑管理当前 GUI 数据和处理程序的变量).

对于您目前的GUI设计,我建议您彻底重新考虑一下。首先,您永远不应该更改常见且众所周知的控件的行为:我不希望在单击复选框时开始长达 10 分钟的计算;当我按下一个按钮时,我期待它。最重要的是,复选框很适合表达独立的选择,而不是连续的选择……所以改用下拉组合框:

Which variable do you want to calculate?
   > Height
   > Mass
   > Density
   > Power

用户在下拉列表 window 中选择一个值,然后按下按钮开始计算。然后计算将一次性执行,您的代码将通过检查组合框值知道何时停止。