Скрытие определенных переменных в рабочей области после вычисления функций в MATLAB GUI - PullRequest
0 голосов
/ 30 апреля 2018

Я использую GUI в Matlab для создания некоторых матриц. У меня есть панель с 4 функциями флажков, как это:

function checkbox1_Callback(hObject, eventdata, handles)

скажем, что каждый флажок вычисляет эти матрицы высота, масса, плотность и мощность . Когда я проверяю каждый из них по отдельности, он правильно оценивает запрошенную матрицу, , но , я должен проверять их в том порядке, в каком они есть, потому что результаты каждого зависят от предыдущих. Я привел эту проблему, просто добавив код предыдущих в каждой функции. Когда я вычисляю плотность, окно рабочего пространства имеет в качестве переменных плотность, а также высоту и массу. Я хочу в функции плотности использовать команду, которая после вычислений будет отображать в рабочем пространстве только матрицу плотности. Я использовал следующие два

clearvars ('-except', 'density')

clear height mass 

но похоже, что когда я его запускаю, он не работает, потому что он сохраняет все переменные в рабочей области , , но не появляется ошибка. Когда я запускаю его в командном окне , оно работает, но я хочу, чтобы оно работало внутри функции. Как я могу этого достичь?

1 Ответ

0 голосов
/ 01 мая 2018

Что касается вашей проблемы 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

Пользователи выбирают одно из значений в раскрывающемся окне, а затем нажимают кнопку, чтобы начать вычисление. Затем вычисление будет выполнено за один раз, и ваш код узнает, когда остановиться, проверив значение поля со списком.

...