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

时间:2018-04-30 18:58:52

标签: matlab matlab-guide

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

function checkbox1_Callback(hObject, eventdata, handles)

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

clearvars ('-except', 'density')

clear height mass 

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

1 个答案:

答案 0 :(得分:1)

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

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

evalin函数允许评估特定工作空间(在本例中为基本Matlab工作空间)中的特定表达式(在本例中为clearvars调用)。但我建议你仔细调整 veeeeery ,否则风险就是处置其他非常重要的变量(我正在考虑管理当前GUI数据和处理程序的那些变量。) / p>

对于您当前GUI设计的问题,我建议您完全重新考虑它。首先,你永远不应该改变一个常见和众所周知的控件的行为:当我点击一个复选框时,我不希望开始10分钟的计算;当我按下按钮时,我期待它。最重要的是,复选框适用于表达独立选择,而不是顺序选择......所以请使用下拉组合框:

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

用户从下拉窗口中选择一个值,然后按下按钮以开始计算。然后,计算将一次性完成,您的代码将通过检查组合框值来知道何时停止。