- •Предисловие
- •Введение
- •Зачем нужен такой практикум?
- •О чем сказано далее
- •О системе MATLAB
- •Первые задачи
- •Фигуры Лиссажу
- •Биения
- •Волны
- •Основные графические объекты и их использование
- •Отрисовка движущихся кривых
- •Об использовании безразмерных переменных
- •Маятник
- •Свободные колебания
- •Вынужденные колебания
- •Переходные колебания
- •Резонанс
- •О случайном движении
- •Движение частиц в центральном поле
- •Траектория финитного движения
- •Влияние малого возмущения
- •Движение двух частиц
- •Случайные блуждания и диффузия
- •Закономерности случайных блужданий
- •Оценка параметров движения броуновской частицы в жидкости
- •Программа, изображающая случайные блуждания
- •Броуновские частицы в поле тяжести
- •Броуновское движение
- •Случайные силы
- •Корреляционные функции
- •Шары
- •Расчет движения шаров
- •Алгоритм расчета
- •Процедура Balls
- •Динамический хаос
- •Почему движение шаров становится непредсказуемым?
- •Как убедиться в появлении хаоса?
- •Функции распределения
- •Стохастический нагрев и стохастическое охлаждение
- •Потери пучка при прохождении через вещество
- •Эффективные сечения
- •Потери частиц пучка при прохождении слоя
- •Потери энергии
- •Распределение по углам и энергиям
- •Работа с сигналами и модель диодного выпрямителя
- •Работа с сигналами
- •Расчет простейших цепей
- •Статическая модель диода. Решение нелинейных уравнений
- •ПРИЛОЖЕНИЕ
- •Свободные колебания
- •Электрические и магнитные поля
- •Частица в магнитной ловушке
- •Фокусировка пучков частиц
- •Концентрация частиц
- •Приближенные методы решения систем дифференциальных уравнений
- •Моделирование распределения случайных величин
- •Компиляция файлов MATLAB
- •Список литературы
- •Работа в командном окне
- •Вход в систему MATLAB
- •Интерактивный доступ к справочной информации и документации
- •Команда hеlр
- •Команда lookfor
- •Меню Help
- •Редактирование и перевызов командной строки
- •Формат вывода
- •Копия протокола сессии
- •Введение матриц
- •Явное определение матриц
- •Функции построения матриц
- •Операции, выражения и переменные
- •Правила записи операторов
- •Матричные операции
- •Операции с массивами
- •Сохранение данных из рабочей области
- •Операторы for, while, if, case и операторы отношения
- •Цикл for
- •Цикл while
- •Условный оператор if
- •Оператор переключения case
- •Условия (операторы отношения)
- •Функция find
- •Функции MATLAB
- •Скалярные функции
- •Векторные функции
- •Матричные функции
- •M-файлы
- •Файлы-программы, или сценарии
- •Файлы-функции
- •Текстовые строки, сообщения об ошибках, ввод
- •Работа с m-файлами
- •Список путей доступа
- •Работа со списком путей доступа
- •Текущий каталог
- •Средство просмотра и редактирования путей доступа Path Browser
- •Использование редактора/отладчика
- •Отладка m-файлов
- •Сравнение алгоритмов: flops и etime
- •Графика
- •Плоские графики
- •Команда plot
- •Разметка графика и надписи
- •Управление осями при выводе графиков
- •Несколько графиков на листе
- •Специальные виды графиков
- •Столбиковые диаграммы
- •Ступенчатые кривые
- •Гистограммы
- •Изображение функций
- •Трехмерные изображения
- •Одномерная кривая
- •Сеточные поверхности
- •Изолинии
- •Дескрипторная графика (графика низкого уровня)
- •Графические объекты и их иерархия
- •Дескрипторы и работа с ними
- •Свойства графических объектов и работа с ними. Функции get и set
- •Движущиеся графики (анимация)
- •Разработка графического интерфейса пользователя
- •Создание внешнего вида интерфейса
- •Способы взаимодействия графического интерфейса с функциями пользователя
- •Общая структура функции NAME.M графического интерфейса
- •Функционирование графического интерфейса
- •Разработка функции Run
- •Разработка функции Exit
- •Разработка функции Edit
Поскольку это свойство само является объектом, то, выполнив двойной щелчок на этом свойстве, мы раскроем его свойства. После этого следует найти свойство String, задать его значение (соответствующий текст, например ’Номер сигнала’) в среднем окне, а, найдя свойство FontUnits, задать его значение normalized.
Следует еще отметить свойство Tag, которое имеют все объекты. Особенно важно знать и/или задать это свойство для тех объектов, к которым потом в программе придется обращаться. Например, если на рисунке задано несколько окон вывода, то для вывода графика в требуемое окно проще всего его будет идентифицировать окно с помощью свойства Tag. Это свойство, как правило, имеет по умолчанию вполне осмысленное значение (Axes1, например), но при желании его можно задать так, как вам нравится.
После разработки внешнего вида графического интерфейса с помощью визуального редактора необходимо сохранить это в виде m-файла. При нажатии на панели управления пункта меню File/Close control panel появится запрос на сохранение созданного интерфейса, и в случае положительного ответа будут созданы два файла – NAME.M и NAME.MAT (где NAME – заданное вами имя). Первый файл – это соответствующий текст программы, реализующий разработанный интерфейс, а второй – набор данных для него. При необходимости впоследствии внести изменения во внешний вид графического интерфейса нужно в командном окне MATLAB запустить файл NAME.M, а потом с помощью команды guide(gcf) вызвать визуальный редактор с этим же файлом. Следует полностью выполнить этап разработки внешнего вида графического интерфейса, поскольку дальнейшая модификация текста программы NAME.M будет производиться вручную, путем изменения и/или дополнения текста программы определенными операторами. Если Вы после этого решите снова вызвать GUIDE – визуальный редактор формы, то все ваши изменения, внесенные вручную, при попытке сохранить доработанный интерфейс, пропадут. Поэтому сначала разрабатывайте внешний вид своего графического интерфейса, а потом его дорабатывайте.
9.2.Способы взаимодействия графического интерфейса с функциями пользователя
Созданный по описанной выше схеме GUI не обладает никакой функциональностью – он пока ничего не может делать за исключением стандартных функций Windows - менять размеры окна и закрывать окно. Теперь необходимо научить его выполнять требуемые действия при нажатии соответствующих кнопок и редактировании данных. Основным средством взаимодействия графического интерфейса с функциями, выполняющими требуемые действия, является задание свойств кно-
162
пок и редактируемых окон, которое называется CallBack. Значение (типа строка), которое присваивается этому свойству, и есть имя функции, которая вызывается при активации соответствующего объекта. Эта активация происходит при нажатии мышкой на соответствующую кнопку (если это свойство кнопки) и при нажатии клавиши Enter либо любой другой кнопки (если это свойство редактируемого окна).
Для задания этих свойств можно использовать визуальный редактор GUIDE (при вызванном рисунке) или с помощью стандартного редактора m-файлов дописать соответствующие параметры функции uicontrol при обращении к ней в функции NAME.M, которую создал GUIDE. Например для того, чтобы задать имя функции, вызываемой при нажатии кнопки RUN, необходимо вызвать соответствующий рисунок-интерфейс (запустить NAME.M) и после этого вызвать GUIDE. Выделив соответствующий элемент (кнопку RUN) и вызвав редактор свойств, необходимо в списке свойств выделить свойство CallBack и в строке задания свойств в кавычках вписать имя функции (например, Func_Run), которая будет вызываться при нажатии этой кнопки. Аналогично задаются функции и для других кнопок и редактируемых окон. Тогда соответствующее обращение к функции uicontrol для кнопки RUN будет выглядеть следующим образом:
h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’Callback’,’Func_Run’, ...
’FontSize’,0.45, ...
’ListboxTop’,0, ...
’Position’,[0.722 0.131 0.1 0.0542], ...
’String’,’Run’, ...
’Tag’,’Run’);
При ручной правке функции NAME.M необходимо добавить в аргументы соответствующей функции uicontrol строку вида ’CallBack’,’Func_run’, ....
9.2.1.Общая структура функции NAME.M графического интерфейса
После создания внешнего вида интерфейса и описанной его доработки M-файл имеет, как правило, следующую структуру.
1.Один или несколько операторов определения окна вывода, которые имеют вид
163
h1 = axes(’Parent’,h0, ...
’FontUnits’,’normalized’, ...
’CameraUpVector’,[0 1 0], ...
’CameraUpVectorMode’,’manual’, ...
’Color’,[1 1 1], ...
’ColorOrder’,mat7, ...
’FontSize’,0.0877, ...
’Position’,[0.061 0.048 0.63 0.24], ...
’Tag’,’Axes3’, ...
’XColor’,[0 0 0], ...
’YColor’,[0 0 0], ...
’ZColor’,[0 0 0]);
Среди всех свойств этого объекта – окна вывода – для нас наибольший интерес представляет свойство ’Tag’, ибо по имени свойства (в данном примере ’Axes3’) впоследствие можно будет направлять вывод результатов расчета в это окно.
2.Каждый оператор определения окна выбора сопровождается целым рядом операторов, определяющих разметку осей, надписи на осях и т.д. Это операторы вида
h2 = text(’Parent’,h1, ...
’Color’,[0 0 0], ...
’HandleVisibility’,’off’, ...
’HorizontalAlignment’,’center’, ...
’Position’,[-0.0648 0.487 9.160], ...
’Rotation’,90, ...
’Tag’,’Axes2Text3’, ...
’VerticalAlignment’,’baseline’);
set(get(h2,’Parent’),’YLabel’,h2);
Первый оператор ответственен за создание текста – подписи под осью. В приведенном примере сам текст отсутствует – у этого объекта свойству ’String’ никакое значение не присвоено, а, значит, под данной осью нет никакого текста. Второй оператор указывает на то, что этот текст является наследником объекта ’YLabel’ и что текст, если бы он был, размещался бы под осью Y.
164
3.Остальные операторы – операторы uicontrol, определяющие свойства таких объектов, как редактируемые окна, статический текст и кнопки. Типичный оператор, определяющий редактируемое окно, имеет вид
h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’BackgroundColor’,[1 1 1], ...
’Callback’,’Func_Edit’, ...
’FontSize’,0.260, ...
’ListboxTop’,0, ...
’Position’,[0.814 0.889 0.120 0.0583], ...
’String’,num2str(N), ...
’Style’,’edit’, ...
’Tag’,’EditN’);
Следует обратить внимание на такие свойства этого объекта, как ’Callback’
– его значение (в данном примере ’Func_Edit’) определяет имя процедуры, которая осуществляет редактирование значения, введенного в соответствующее окно. Свойство ’Tag’, имеющее в данном примере значение ’EditN’, определяет возможность найти этот объект по этому свойству. Свойство ’Style’, имеющее значение ’edit’, указывает на то, что это редактируемое окно. Значение свойства ’String’ определяет строку, которая будет выводиться в редактируемом окне. В данном примере для вывода используется функция num2str, которая переводит значение числовой переменной (в данном примере N) в строковое представление.
4.Оператор, определяющий кнопку, как правило, имеет вид
h1 = uicontrol(’Parent’,h0, ...
’Units’,’normalized’, ...
’FontUnits’,’normalized’, ...
’Callback’,’Func_Run’, ...
’FontSize’,0.45, ...
’ListboxTop’,0, ...
’Position’,[0.722 0.13125 0.1 0.0542], ...
’Style’,’pushbutton’, ...
’String’,’Run’, ...
’Tag’,’Run’);
165