Что касается вашей проблемы clearvars
, то это потому, что функция, по своему замыслу, выполняет запрошенную очистку только в той области, в которой она вызывается. Несмотря на то, что не стоит возиться с переменными рабочей области (у вас есть лучшие альтернативы, такие как хранение ваших данных в GUI
дескрипторах и очистка их, когда это будет сделано) ... вот фрагмент, основанный на вашем примере, который показывает вам как достичь своей цели:
function myFunction()
% perform some calcunations...
evalin('base','clearvars(''-except'',''density'')');
end
Функции evalin позволяют оценивать конкретное выражение (в данном случае вызов clearvars
) в пределах определенного рабочего пространства (в данном случае базового рабочего пространства Matlab). Но я рекомендую вам тщательно его настроить veeeeery , в противном случае существует риск избавиться от других очень важных переменных (я думаю о тех, которые управляют текущими данными и обработчиками GUI
).
Что касается вашего текущего GUI
дизайна, я рекомендую вам полностью переосмыслить его. Прежде всего, вы никогда не должны изменять поведение обычного и хорошо известного элемента управления: я не ожидаю начала 10-минутного вычисления, когда я нажимаю на флажок; Я ожидаю, когда я нажимаю кнопку. Кроме того, флажки хороши для выражения независимых, а не последовательных вариантов ... поэтому вместо этого используйте выпадающий список:
Which variable do you want to calculate?
> Height
> Mass
> Density
> Power
Пользователи выбирают одно из значений в раскрывающемся окне, а затем нажимают кнопку, чтобы начать вычисление. Затем вычисление будет выполнено за один раз, и ваш код узнает, когда остановиться, проверив значение поля со списком.