- •§ 2.2. Командное окно системы matlab
- •§ 2.3. Рабочее пространство системы matlab
- •§ 2.4. Скаляры и массивы. Индексированные переменные
- •§ 2.5. Форматы представления вещественных чисел
- •§ 2.6. Арифметические выражения
- •2.6.1. Некоторая специфика использования вещественных данных
- •2.6.2. Некоторая специфика использования комплексных данных
- •2.6.3. Некоторые приемы работы с матрицами и векторами
- •2.6.4. Некоторые специфика выполнения арифметических и логических операций.
- •§ 2.7. Элементарные математические функции
- •Часть 2. Визуализация результатов вычислений
- •§ 2.8. Особенности графической подсистемы matlab
- •§ 2.9. Построение графиков функций одной переменной
- •2.9.1. Простые графики в декартовой системе координат.
- •2.9.2. Визуализация нескольких графиков.
- •2.9.3. Функция fplot.
- •2.9.4. Построение графиков в логарифмическом и полулогарифмическом масштабах.
- •2.9.5. Построение графиков в полярных координатах.
- •§ 2.10. Оформление графиков и графических окон
- •2.10.1. Выбор свойств линий.
- •2.10.2. Оформление осей координат.
- •2.10.3. Добавление надписей, заголовков и координатной сетки.
- •§ 2.11. Средства управления в графическом окне
- •§ 2.12. Общее знакомство с трехмерной графикой в matlab
- •2.12.1. Общий алгоритм визуализации функций двух переменных.
- •2.12.2. Построение трехмерных линий.
- •2.12.3. Построение поверхностей.
- •2.12.4. Задание дополнительных параметров трехмерных графиков.
- •2.12.5. Построение линий уровня.
- •2.12.6. Построение траектории точки, движущейся в пространстве.
- •2.12.7. Интерактивное редактирование графиков.
- •Часть 3. Вычисления с действительными и комплексными массивами чисел
- •§ 2.13. Операции отношения и логические операции над числами
- •2.13.1. Операции отношения.
- •2.13.2. Логические операции.
- •2.13.3. Приоритет операций.
- •§ 2.14. Формирование одномерных числовых массивов
- •2.14.1. Задание одномерных массивов и доступ к их элементам.
- •2.14.2. Об ускорении операций задания массива.
- •2.14.3. Об использовании операции формирования диапазона.
- •§ 2.15. Матрицы и векторы. Двумерные массивы чисел
- •2.15.1. Создание матриц и векторов.
- •2.15.2. Доступ к отдельным фрагментам матриц.
- •2.15.3. Удаление строк и столбцов матрицы.
- •2.15.4. Использование функций перестановки частей матриц.
- •2.15.5. Определение размеров и размерностей массивов.
- •2.15.6. Использование операций индексации.
- •2.15.7. Изменение размеров массива.
- •2.15.8. Специальные функции формирования массивов.
- •§ 2.16. Вычисления с массивами
- •2.16.1. Поэлементные и групповые операции над массивами.
- •2.16.2. Решение некоторых типовых задач линейной алгебры и аналитической геометрии.
- •2.16.3. Применение операций отношения и логических операций к массивам.
- •2.16.4. Некоторые функции для работы с массивами.
- •Часть 4. Стандартные средства решения некоторых типовых задач линейной алгебры и математического анализа
- •§ 2.17. Решение систем линейных алгебраических уравнений
- •§ 2.18. Решение некоторых задач линейной алгебры. Матричные функции
- •§ 2.19. Разреженные матрицы
- •§ 2.20. Решение нелинейных уравнений
- •§ 2.21. Поиск минимального значения функции
- •§ 2.22. Численное интегрирование
- •2.22.1. Использование метода трапеций.
- •2.22.2. Использование методов Симпсона и Гаусса-Лобатто.
- •2.22.3. Вычисление двойных интегралов.
- •§ 2.23. Операции над полиномами
- •2.23.1. Вычисление значения полинома.
- •2.23.2. Вычисление корней полинома.
- •2.23.3. Умножение и деление полиномов.
- •2.23.4. Дифференцирование и интегрирование полиномов.
- •§ 2.24. Интерполяция и аппроксимация данных
- •2.24.1. Полиномиальная аппроксимация.
- •2.24.2. Интерполяция сплайнами.
- •Часть 5. Символьные вычисления
- •§ 2.25. Создание символьных переменных, выражений и матриц
- •2.25.1. Создание символьных переменных.
- •2.25.2. Создание символьных выражений.
- •2.25.3. Создание символьных матриц.
- •§ 2.26. Символьные вычисления
- •2.26.1. Символьное дифференцирование.
- •2.26.2. Вычисление пределов.
- •2.26.3. Символьное интегрирование.
- •2.26.3. Вычисление суммы ряда. Разложение функций в ряды.
- •2.26.4. Упрощение выражений. Подстановки.
- •2.26.5. Управление точностью вычислений.
- •2.26.6. Операции над векторами. Операции над матрицами. Некоторые операции линейной алгебры.
- •2.26.7. Решение уравнений и систем уравнений.
- •§ 2.27. Визуализация результатов символьных вычислений
- •2.27.1. Построение двумерных графиков.
- •2.27.2. Построение трехмерных графиков.
- •Часть 6. Основы программирования на m-языке
- •§ 2.28. Основные понятия программирования в системе matlab
- •2.28.1. Назначение языка программирования matlab.
- •2.28.2. Основные средства программирования.
- •2.28.3. Основные типы данных.
- •2.28.4. Виды программирования.
- •2.28.5. Двойственность операторов, команд и функций.
- •2.28.6. Некоторые ограничения.
- •§ 2.29. Создание и использование m-файлов
- •2.29.1. Понятие об m-файлах.
- •2.29.2. Типы m-файлов.
- •2.29.3. Создание файл-программ.
- •2.29.4. Создание файл-функций.
- •2.29.5. Глобализация переменных и функций.
- •2.29.6. Синтаксический контроль программ.
- •§ 2.30. Управляющие структуры
- •2.30.1. Понятие об управляющих структурах.
- •2.30.2. Операторы цикла.
- •2.30.3. Операторы ветвления.
- •2.30.4. Прочие операторы.
- •§ 2.31. Работа с файлами
- •2.31.1. Общие замечания.
- •2.31.2. Подготовка файла к работе.
- •2.31.3. Завершение работы с файлами.
- •2.31.4. Контроль за исчерпанием данных.
- •2.31.5. Чтение из текстового файла.
- •2.31.6. Анализ ошибок в файловых операциях.
- •§ 2.32. Форматный ввод-вывод данных
- •2.32.1. Форматные преобразования (sprintf, sscanf).
- •2.32.2. Форматные преобразования при работе с файлами (fprintf, fscanf).
- •§ 2.33. Рекурсивные файл-функции. Производительность файл-функций
- •2.33.1. Понятие о рекурсивных файл-функциях.
- •2.33.2. Оценка производительности файл-функции.
- •§ 2.34. Файл-функции с переменным числом входных параметров и выходных значений
- •§ 2.35. Диалоговые программы
- •2.35.1. Ввод числовых и символьных данных.
- •2.35.2. Вывод результатов вычислений.
- •§ 2.36. Анимационные эффекты
- •§ 2.37. Контроль входных и выходных параметров файл-функции
- •§ 2.38. Отладка программы
- •2.38.1. Понятие о способах отладки программы.
- •2.38.2. Рекомендации по созданию и отладке программ.
- •Часть 7. Создание программ с визуальным интерфейсом
- •§ 2.39. Понятие о графическом интерфейсе пользователя (gui)
- •2.39.1. Предварительные замечания.
- •2.39.2. Основные команды для создания gui.
- •§ 2.40. Общие сведения о визуальной среде guide
- •§ 2.41. Программирование событий в matlab
- •§ 2.42. Свойства основных компонентов в matlab
- •§ 2.43. Диалоговые окна в matlab
- •§ 2.44. Динамическое создание компонентов
- •§ 2.45. Создание меню
- •§ 2.46. Некоторые рекомендации по созданию приложений с графическим интерфейсом пользователя
§ 2.41. Программирование событий в matlab
Изучение основ визуального программирования
начнем на простейшем примере программы
решения квадратного уравнения
.
Очевидно, что исходными данными для
такой задачи являются вещественные
числа
.
Результатом ее решения станет пара
корней уравне-
Рис. 2.40.7. Окно с четырьмя компонентами.
Рис. 2.40.8. Диалоговое окно выравнивания Align Objects.
Рис. 2.40.9. Окно с четырьмя компонентами, выравненное по вертикали.
Рис. 2.40.10. Окно с четырьмя компонентами, выравненное по горизонтали.
ния (
– при
,
,
где
– дискриминант), один корень (
– при условии
)
или отсутствие корней (при
,
).
Разместим в форме следующие компоненты:
1) Три окна редактирования ( ), которые служат для ввода значений коэффициентов квадратного уравнения ( );
2) Четыре метки ( ), первые три из которых служат для вывода подсказок a=, b=, c= для окон ввода значений переменных соответственно, а четвертая метка будет использоваться для вывода результатов;
3) кнопка, которая будет запускать процесс решения задачи, после того, как пользователь введет значения в окна редактирования.
В результате окно приложения примет вид, показанный на рис. 2.41.1.
Рис. 2.41.1. Окно приложения после размещения на нем компонентов.
Компоненты являются объектами MATLAB
с определенными свойствами. Для изменения
этих свойств можно воспользоваться
функцией set.
Кроме того, с помощью инспектора свойств
(Inspector) можно изменить
свойства компонентов (объектов),
размещенных в форме. После выделения
необходимого объекта инспектор свойств
можно вызвать либо открыв контекстное
меню и выбрав команду Property
Inspector, либо на щелкнув
на панели инструментов на кнопку
.
В результате на экране монитора
пользователя появится окно инспектора
свойств, показанное на рис. 2.41.2.
Рассмотрим основные свойства окна редактирования, метки и кнопки.
Прежде всего отметим, что у всех компонентов одним из основных свойств является Tag – имя компоненты (объекта) в программе (причем сначала компоненты получают имена text1, text2, … (метки); edit1, edit2, … (текстовые поля); pushbutton1, pushbutton2, … (кнопки).
У большинства компонент есть свойство String, определяющее текст для кнопок и меток, а также текст, находящийся в соответствующем текстовом поле. Почти у всех объектов есть свойство Visible, определяющее является ли элемент видимым (значение on) или нет (значение off).
Расположение элемента в форме определяется свойством Position. У графического окна свойства Position – это массив из четырех элементов [xleft,ybottom,width,height], где xleft и ybottom определяют ко-
ординаты левого нижнего угла экрана; width – ширина; height – высота окна (все в пикселях). Для осей параметр Position определяется как массив из четырех элементов [xleft,ybottom,width,height], где величины xleft, ybottom, width и height задаются в относительных координатах графического окна (т.е. ширина и высота окна принимаются равными 1, а левый нижний угол имеет координаты (0,0)).
Расположение элемента в форме определяется свойством Position. У графического окна свойства Position – это массив из четырех элементов [xleft,ybottom,width,height], где xleft и ybottom определяют координаты левого нижнего угла экрана; width – ширина; height – высота окна (все в пикселях). Для осей параметр Position определяется как массив из четырех элементов [xleft,ybottom,width,height], где величины xleft, ybottom, width и height задаются в относительных координатах графического окна (т.е. ширина и высота окна принимаются равными 1, а левый нижний угол имеет координаты (0,0)).
Установим у элементов создаваемого приложения свойства, представленные в таблицах 2.41.1, 2.41.2, после чего форма примет вид, показанный на рис. 2.41.3 (заметим, что цвет фона для первых трех меток был принят желтым (для четвертой – кремовый), размер шрифта установлен 16.0; цвет фона для кнопки принят голубым, размер шрифта установлен 14.0)).
Таблица 2.41.1. Основные свойства объектов задачи (метки).
Свойство |
Первая метка |
Вторая метка |
Третья метка |
Четвертая метка |
Tag |
text_a |
text_b |
text_c |
text_solve |
String |
a= |
b= |
c= |
|
Visible |
on |
On |
on |
on |
Таблица 2.41.2. Основные свойства объектов задачи (текстовые поля, кнопка).
Свойство |
Первое текстовое поле |
Второе текстовое поле |
Третье текстовое поле |
Кнопка |
Tag |
edit_a |
edit_b |
edit_c |
pushbutton_solve |
String |
|
|
|
Решить уравнение |
Visible |
on |
On |
on |
on |
Рис. 2.41.2. Окно инспектора свойств.
Рис. 2.41.3. Окно приложения после установки свойств компонентов.
Рис. 2.41.4. Общий вид запущенного приложения.
Теперь можно попробовать запустить
создаваемое приложение с помощью кнопки
или выбрав в главном меню пункт Run
и далее в ниспадающем окне указать
Run: Sample_GUI
(в данном случае Sample_GUI.fig
– это имя файла, в котором размещен
текст программы – перед запуском,
разумеется, следует сохранить приложение
(заметим, что после указания имени
сохраняемого файла ему автоматически
присвоится расширение .fig
– в этом файле будет храниться окно
приложения; кроме того, будет создан
еще один файл с тем же именем, но с
расширением .m
т.е. Sample_GUI.m
– в этом файле будет храниться основная
файл-функция для работы с приложением
(которая служит для инициализации
приложения) и несколько подфункций.
После запуска на экран будет выведено
окно приложения (рис. 2.41.4), но кнопка
Решить уравнение, как и следовало
ожидать, не выполнить никаких действий.
Для того, чтобы приложение начало
работать, требуется написать специальную
функцию, реагирующую на щелчок мыши по
указанной кнопке, т.е. созданная кнопка
должны быть связана с программой
обработки событий. Для каждого объекта
или совокупности объектов в окне
приложения с GUI такая
программа, именуемая Callback,
создается приложением GUIDE
автоматически.
В частности, в файле Sample_GUI.m уже есть пустая подфункция, отвечающая за работу события Callback (так в MATLAB называется «щелчок мыши по компоненту»). Эта функция Pushbutton_Solve_Callback:
% --- Executes on button press in pushbutton_solve.
function pushbutton_solve_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_solve (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Отметим, что имя функции состоит из имени компонента, символа подчеркивания и имени события (здесь уместно пояснить, что в общем случае функция-обработчик любого события в MATLAB имеет имя вида name_event, где name – имя компонента, а event – имя события, т.е. для того, чтобы построить обработчик любого события, необходимо создать функцию с именем name_event). При написании подфункции следует принять во внимание, что в переменной hObject хранится указатель на объект, событие которого обрабатывается в данный момент (в рассматриваемом случае указанный объект – это кнопка, а переменная handles является структурой с указателями на все объекты (компоненты) приложения. В этой связи для того, чтобы обратиться к любому компоненту следует написать handles.name, где name совпадает со значением свойства Tag соответствующего компонента.
Для доступа ко всем обработчикам кнопки (или какого-либо другого компонента) ее следует выделить, вызвать контекстное меню, в котором выбрать команду ViewCallbacks, и нужный обработчик (Callback).
Таким образом, осталось лишь написать текст функции Pushbutton_Solve_Callback, которая будет выполнять следующие действия:
1) Преобразование считанных строк из текстовых полей text_a, text_b и text_c в вещественные переменные a, b и c.
2) Решение уравнения и формирование по результатам решения строки с корнями (корнем) или сообщения, что корней нет.
3) Отображение результата (строки) в компоненту textSolve.
Текст функции с необходимыми пояснениями в виде комментариев приведен ниже.
% --- Executes on button press in pushbutton_solve.
function pushbutton_solve_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton_solve (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Считываем из компоненты edit_a строку,
% которую преобразовываем в вещественное число a
% (для получения строки считывается свойство String
% из компонента с именем edit_a с помощью функции get,
% обращение к нетекущему компоненту осуществляется
% с помощью функции handles.edit_a
a=str2double(get(handles.edit_a,'String'));
% Считываем из компонента с именем edit_b строку,
% которую преобразовываем в вещественное число b
b=str2double(get(handles.edit_b,'String'));
% Считываем из компонента с именем edit_c строку,
% которую преобразовываем в вещественное число c
c=str2double(get(handles.edit_c,'String'));
if a==0
% Квадраное уравнение сводится к линейному
x=-c/b;
% Формирование строки с результатом
S=sprintf('X=%g\t',x);
else
d=b*b-4*a*c
if d<0
% Случай отрицательного дискриминанта
% Формирование строки с результатом
S='Действительных корней нет';
else
% Случай неотрицательного дискриминанта
x1=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
% Формирование строки с результатом
S=sprintf('X1=%g\t X2=%g',x1,x2);
end
end
% Свойство компонента handles.textSolve String
% равно S, что приводит к выводу текста S
% на метку handles.textSolve
set(handles.textSolve,'String',S);
Запустив теперь рассматриваемое приложение на выполнение, введя значения коэффициентов a, b и c, после щелчка по кнопке Решить уравнение, получим ожидаемо верные результате, представленные на рис. 2.41.5.
Рис. 2.41.5. Окно приложения решения квадратного уравнения.
Итак, было создано законченное графическое приложение, решающее проблему отыскания корней квадратного уравнения, при этом можно выделить следующие основные этапы разработки: размещение компонентов в окне приложения, установка основных свойств компонентов, написание функций-обработчиков событий.
