MATLAB GUI обновление графика
02.03.2020
В программе реализован динамический синусоидальный сигнал. С помощью слайдера можно менять амплитуду данного сигнала, однако при изменении амплитуды меняется весь сигнал, а мне необходимо, чтобы сигнал с предыдущей амлитудой сохранялся, а дальше продолжал строиться с новой амплитудой, т.е. чтобы весь сигнал не перезаписывался сигналом с новой амплитудой, как реализовано сейчас. Код программы представлен, подскажите, как мне реализовать задуманное
Ответы
Попробуйте так.
1. У вас в каждой итерации по i создается новый график. Представляете сколько их там у вас и как все это не оптимально?
2. Надо вам один глобальный plot создать и на нем все перерисовывать.
3. Чтоб строилось так ка вы хотите так же надо создать глобальную переменную и на каждой итеррации ДОписывать в нее, а затем перестраивать на графике. А то вы получается строите график от 1:i (имитируя этим шаги) но при этомпеременная lok (т.е. как я понимаю амплитуда) у вас всегда измененное новое значение имеет и поэтому так и строит сразу новое, т.к. старого у вас не осталось.
Плюсую всем трем пунктам!
Во вложении только п.3
Прикрепляю свой вариант.
Основная проблема была в строке:
Вы перезаписывали все данные в y, и строили график по ним. Заменил на:
Еще несколько нюансов:
Не используйте глобальные переменные - для обмена данными нужно использовать поле UserData.
Для создания анимации не стоит строить графики командой plot в цикле, скорее всего ничего хорошего не получится. В моем примере я один раз строю p=plot(), и потом в цикле изменяю данные на графике (p.XData, p.YData). Есть и другие вараинты создания анимации, это только один из них.
Не стоит несколько раз инициализировать переменную, как это было у вас с переменной lok.
А можно доп. вопросик. UserData - принадлежность объекта GUI. А есть что-то (что-то встроенное может быть) когда не используется GUI, а просто скрипт? Тоже какая-то такая встроенная фиговинка. Или тут уже глобальные переменные только?