- •§ 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.42. Свойства основных компонентов в matlab
Одним из наиболее часто используемых компонентов является переключатель , позволяющий выбрать одно из нескольких свойств. Нередко сразу несколько переключателей располагаются на обычной панели или панели для объединения переключателей или флажков . Отметим, что расположение кнопки на панели связано исключительно с удобством перемещения панели вместе с переключателями и флажками.
Основными свойствами объекта «переключатель» являются следующие: имя объекта (Tag); строка, выводимая рядом с объектом (String) и
число, позволяющее определить, какой из переключателей выделен (у выделенного переключателя значение Value совпадает со значением свойства Max, которое по умолчанию равно 1).
Работу переключателя
рассмотрим на примере создания приложения,
выполняющего построение графика одной
из выбранных функций:
,
,
,
в интервале
.
Для создания приложения разместим в окне следующие элементы:
1) Метка (статический текст) для вывода текста a=.
2) Окно редактирования для ввода значения переменной a.
3) Метка (статический текст) для вывода текста b=.
4) Окно редактирования для ввода значения переменной b.
5) Панель для объединения переключателей или флажков .
6) Четыре переключателя для выбора одной из функций , , , .
7) Оси, в которых будет отображаться график функции.
8) Кнопка.
Разместим перечисленные компоненты в окне, после чего последние примет вид, показанный на рис. 2.42.1.
Далее изменим свойства компонентов таким образом, чтобы окно приложения приняло вид, представленный на рис. 2.42.2. В таблицах 2.42.1, 2.42.2, 2.42.3 приведены свойства соответствующих компонентов, расположенных в окне приложения.
Таблица 2.42.1. Свойства компонентов задачи (метки, текстовые поля, панель).
Свойство |
Первая метка |
Вторая метка |
Первое текстовое поле |
Второе текстовое поле |
Панель |
Tag |
text_a |
text_b |
edit_a |
edit_b |
uipanelm |
String |
a= |
b= |
-pi |
pi |
|
Title |
|
|
|
|
функция |
Таблица 2.42.2. Свойства компонентов задачи (переключатели).
Свойство |
Переключатели |
|||
1 |
2 |
3 |
4 |
|
Tag |
rb1 |
rb2 |
rb3 |
rb4 |
String |
y1=cos(x) |
y2=sin(x) |
y3=exp(cos(x)) |
y4=exp(sin(x)) |
Title |
|
|
|
|
Таблица 2.42.3. Свойства компонентов задачи (оси, кнопка).
Свойство |
Оси |
Кнопка |
Tag |
axes_ my |
pushbutton_my |
String |
|
График |
Title |
|
|
Текст функции-обработчика события Callback кнопки График с соответствующими комментариями представлен ниже.
% --- Executes on button press in pushbuttonm.
function pushbuttonm_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
Рис. 2.42.1. Шаблон для создания приложения.
Рис. 2.42.2. Окно приложения после изменения свойств компонентов.
% Считываем из компонента 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'));
% Задаем шаг изменения dx
dx=(b-a)/1000;
% Формируем массив x
x=a:dx:b;
% Формируем массив y1
y1=cos(x);
% Формируем массив y2
y2=sin(x);
% Формируем массив y3
y3=exp(cos(x));
% Формируем массив y4
y4=exp(sin(x));
% Если активен первый переключатель y1(x)
if get(handles.rb1,'Value')==1
% Строим график y1(x)
plot(x,y1)
% Если активен первый переключатель y2(x)
elseif get(handles.rb2,'Value')==1
% Строим график y2(x)
plot(x,y2)
% Если активен первый переключатель y3(x)
elseif get(handles.rb3,'Value')==1
% Строим график y3(x)
plot(x,y3)
% Если активен первый переключатель y4(x)
elseif get(handles.rb4,'Value')==1
% Строим график y4(x)
plot(x,y4)
end
% Если нет линий сетки, перпендикулярных оси x,
% то изображаем эти линии сетки
if get(gca,'XGrid')=='off'
set(gca,'XGrid','on');
end
% Если нет линий сетки, перпендикулярных оси y,
% то изображаем эти линии сетки
if get(gca,'YGrid')=='off'
set(gca,'YGrid','on');
end
На рис. 2.42.3 представлен результат выполнения приложения при выборе для построения графика.
Рис. 2.42.3. Окно приложения построения графика функции.
Обратимся теперь к рассмотрению компонента флажок , позволяющего выбрать одно из нескольких свойств. Главным свойством флажка является значение Value – оно равно 1, если пользователь выбрал флажок и 0 в противоположном случае. Добавим в последнюю программу возможность опциальной визуализации линий сетки посредством введения двух флажков: Сетка по оси X и Сетка по оси Y.
Поместим указанные флажки на новую панель для объединения переключателей или флажков, свойства которых указаны в таблицах 2.42.4 и 2.42.5 (рис. 2.42.4).
Таблица 2.42.4. Свойства компонентов (панель, флажки).
Свойство |
Панель |
Первый флажок |
Второй флажок |
Tag |
uipanel_grid |
checkbox_x |
checkbox_y |
String |
|
Ось X |
Ось Y |
Title |
Сетка |
|
|
Таблица 2.42.5. Свойства компонентов (текстовое поле, список, кнопка).
Свойство |
Текстовое поле |
Список |
Кнопка |
Tag |
editm |
listboxm |
pushbuttonm |
String |
|
|
Добавить |
Title |
|
|
|
Рис. 2.42.4. Окно приложения после изменения свойств компонентов.
Скорректированный должным образом обработчик событий представлен ниже.
function pushbuttonm_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=str2double(get(handles.edit_a,'String'));
b=str2double(get(handles.edit_b,'String'));
dx=(b-a)/1000;
x=a:dx:b;
y1=cos(x);
y2=sin(x);
y3=exp(cos(x));
y4=exp(sin(x));
if get(handles.rb1,'Value')==1
plot(x,y1)
elseif get(handles.rb2,'Value')==1
plot(x,y2)
elseif get(handles.rb3,'Value')==1
plot(x,y3)
elseif get(handles.rb4,'Value')==1
plot(x,y4)
end
% Если флажок линий сетки, перпендикулярных оси x
% активен, то отображаем эти линии сетки
% (и не отображаем в противном случае)
if get(handles.checkbox_x,'Value')==1
set(gca,'XGrid','on');
else
set(gca,'XGrid','off');
end
% Если флажок линий сетки, перпендикулярных оси y
% активен, то отображаем эти линии сетки
% (и не отображаем в противном случае)
if get(handles.checkbox_y,'Value')==1
set(gca,'YGrid','on');
else
set(gca,'YGrid','off');
end
Линии сетки будут отображаться и удаляться при щелчке мыши по соответствующим флажкам. Для этого, разумеется, необходимо написать соответствующие обработчики событий Callback для компонентов checkbox_x и checkbox_y. Имеем:
% --- Executes on button press in checkbox_x.
function checkbox_x_Callback(hObject, eventdata, handles)
% hObject handle to checkbox_x (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of checkbox_x
% Обработчик флажка "Ось X"
% Если флажок линий сетки (текущий объект gca),
% перпендикулярных оси X активен, то отображаем
% линии сетки, перпендикулярные оси X
% (в противном случае - не отображаем)
if get(hObject,'Value')==1
set(gca,'XGrid','on');
else
set(gca,'XGrid','off');
end
% --- Executes on button press in checkbox_y.
function checkbox_y_Callback(hObject, eventdata, handles)
% hObject handle to checkbox_y (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of checkbox_y
% Обработчик флажка "Ось Y"
% Если флажок линий сетки (текущий объект gca),
% перпендикулярных оси Y активен, то отображаем
% линии сетки, перпендикулярные оси Y
% (в противном случае - не отображаем)
if get(hObject,'Value')==1
set(gca,'YGrid','on');
else
set(gca,'YGrid','off');
end
На рис. 2.42.5 представлен результат
выполнения приложения при выборе
для построения графика.
Рис. 2.42.5. Окно приложения построения графика функции с переключателями.
Еще одним компонентом, часто используемым в приложениях, является список. Основными свойствами последнего являются массив ячеек, в котором хранятся элементы списка (String) и номер текущего элемента списка (Value). Если какой-либо элемент списка выделен, то в свойстве Value хранится его номер. После обращения по этому номеру к массиву ячеек, хранящемуся в свойстве String, можно получить выделенный элемент. Использование списка рассмотрим на конкретном примере.
Пусть требуется записать на место текущего элемента списка значение, хранящееся в текстовом поле, предварительно сдвинув в списке вперед все элементы, начиная с текущего.
В создаваемом приложении будет три элемента: текстовое поле editm, список listboxm и кнопка pushbottomm. На рис. 2.42.6 показано окно приложения после размещения в нем компонентов.
Рис. 2.42.6. Шаблон для создания приложения.
Для помещения в список нескольких значений следует обратиться к инспектору его свойств (предварительно выделив список) и щелкнуть мышкой по кнопке радом со свойством String. В результате появится окно для редактирования элементов списка (рис. 2.42.7).
Рис. 2.42.7. Окно редактирования элементов списка.
Основной функцией в рассматриваемой программе является обработчик события Callback кнопки pushbottomm, представленный ниже.
% --- Executes on button press in pushbuttonm.
function pushbuttonm_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonm (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Считываем содержимое свойства String в массив s1
s1=str2double(get(handles.listboxm,'String'));
% Считываем содержимое свойства Value в массив s1
% Таким образом, был получен список в массиве ячеек s1
% и номер текущего элемента в переменной numberm
numberm=get(handles.listboxm,'Value');
% Считываем строку из текстового поля в переменную se
se=str2double(get(handles.editm,'String'));
% Вычисляем длину массива ячеек
l=length(s1);
% Сдвигаем массив ячеек, начиная с номера numberm
% на один элемент вправо
for i=l+1:-1:numberm+1
s1(i)=s1(i-1);
end
% В элементе с номером numberm записываем содержимое
% текстового поля
s1(numberm)=se;
% Обновленный массив ячеек записываем в список
% listboxm (в свойство String записываем s1)
set(handles.listboxm,'String',s1);
На рис. 2.42.8 представлен результат выполнения приложения.
