d9e5a92d

Функции создания объектов

Некоторые графики, например с несколькими кривыми, состоят из многих объектов, каждый из которых имеет свой собственный идентификатор (handle). Чем пытаться прочитать их с экрана и повторно вводить, вы увидите, что всегда лучше хранить значение в переменной и использовать его по необходимости.
Идентификатор объекта root всегда нуль. Идентификатор figure - это целое число, которое по умолчанию отображается в заголовке окна.

Идентификаторы других объектов являются числа с плавающей точкой, которые содержат информацию, используемую MATLAB. Например, если A - это магический квадрат Дюрера, то
h = plot(A)
создаст линейный график с четырьмя линиями, для каждого столбца А, а также возвратит вектор-идентификатор, такой как
h =
3.0022
1.0038
4.0020
5.0016
Данные численные значения являются несущественными и могут изменяться от одной системы к другой. Какие бы числа не были, важным является то, что h(1) - это идентификатор первой кривой на графике, h(2) - второй и т.д.
MATLAB имеет несколько функций для получения доступа к часто используемым объектам:
- gcf
- gca
- gco
Вы можете использовать эти функции в качестве входных аргументов других функций, оперирующих с идентификаторами figure и axes. Получить идентификаторы других объектов можно во время их создания.

Все функции MATLAB, которые создают объекты, возвращают идентификатор (или вектор идентификаторов) созданного объекта.
Для удаления объекта служит функция delete, использующая идентификатор объекта в качестве аргумента. Например, удалим текущие оси (axes), а вместе с ними и все дочерние объекты.
delete(gca)

Функции создания объектов

Вызов функции с именем какого-либо объекта создает этот объект. Например, функция text создает объект text, функция figure создает объект figure и т.д.

Графические функции MATLAB высокого уровня (такие как plot и surface) вызывают необходимые функции низкого уровня для отображения соответствующих графиков.
Функции низкого уровня просто создают один из одиннадцати графических объектов определенных MATLAB, за исключением корневого объекта (root), который создает только MATLAB. Например,
line( [1 3 6], [8 -2 0], 'Color', 'red' )

Свойства объекта

Все объекты обладают свойствами, которые определяют, как они выводятся на экран. MATLAB предоставляет два механизма для задания свойств.

Свойства объекта могут быть установлены функцией создания объекта или могут быть изменены функцией set, когда объект уже существует. Например, следующий элемент кода создает три объекта и заменяет некоторые из их свойств по умолчанию. days = [ 'Su' ; 'Mo' ; 'Tu' ; 'We' ; 'Th' ; 'Fr' ; 'Sa' ] temp = [ 21.1 22.2 19.4 23.3 23.9 21.1 20.0 ]; f = figure;
a = axes( 'YLim' , [16 26] , 'Xtick' , 1:7 , 'XtickLabel' , days )
h = line(1:7, temp)
Temperature



это массив символов, содержащий сокращения дней недели, а temp - это численный массив с типичной температурой. Окно изображений создается после вызова figure без аргументов, т.е. со значениями по умолчанию.

Оси существуют внутри figure и имеют заданный диапазон по у и заданные метки для приращений по х. Линии существуют внутри осей и имеют заданные значения для данных по х и у. Три идентификатора объектов f, а и h сохранены для дальнейшего использования.

set и get

Свойства объекта задаются обращением к нему после его создания. Для этого используйте идентификатор, возвращаемый создаваемой функцией.
Функция set позволяет устанавливать свойства объектов, указанием идентификатора объекта и совокупности пар название свойства / значение. В качестве упражнения изменим цвет и ширину линии из предыдущего примера.
set( h , 'Color' , [0 .8 .8] , 'LineWidth' , 3)
Для того, чтобы увидеть список всех доступных свойств заданного объекта, вызовете set с идентификатором объекта.
set(h)
Color
EraseMode: [ {normal} | background | xor | none ]
LineStyle: [ {-} | -- | : | -. | none ]
LineWidth
Marker: [ + | o | * | . | x | square | diamond | v | Л | | |
pentagram | hexagram | {none} ]
MarkerSize
XData
YData
Zdata
Чтобы вывести список всех текущих установленных свойств заданного объекта, вызовете get с идентификатором объекта
get(h)
Color = [0 0.8 0.8]
EraseMode = normal LineStyle = -LineWidth = [3]
Marker = none MarkerSize = [6]
XData = [ (1 by 7) double array]
YData = [ (1 by 7) double array]
ZData = []
Для запроса значения отдельного свойства используйте get с именем свойства.
get(h , 'Color')
ans =
0 0.8000 0.8000
Объекты axes имеют много детальных свойств для всего графика. Например, заголовок - title.


t = get(a , 'title' );
set(t , 'String' , 'Temperature' , 'FontAngle' , 'oblique')
Функция title обеспечивает другой интерфейс к этим же свойствам.

Графический Пользовательский Интерфейс (GUI)

Ниже приведен пример иллюстрирующий использование управляемой графики (Handle Graphics) для создания пользовательского интерфейса.
b = uicontrol( 'Style' , 'pushbutton' , . . .
'Units' , 'normalized' , . . .
'Position' , [.5 .5 .2 .1] , . . .
'String' , 'click here' );
создает pushbutton в центре окна изображения {figure) и возвращает идентификатор нового объекта. Однако пока, нажатие на эту кнопку ни к чему не приводит.
s = ' set(b , ' 'Position' ' , [.8*rand .9*rand .2 .1]) ';
создает строку, содержащую команду, которая меняет положение кнопки. Повторное использование
eval(s)
будет передвигать кнопку в случайные места. Окончательно, set(b , 'Callback' , s)
установит s в качестве обработки нажатия кнопки. Поэтому каждый раз, когда вы её нажимаете, она перемещается на новое место.

Анимация

MATLAB предоставляет несколько способов для создания двигающейся, анимационной графики. Использование свойства EraseMode предназначено для длинной последовательности простых графиков, где изменение от кадра к кадру минимально.

Ниже представлен пример, моделирующий броуновское движение. Определим количество точек
n = 20;
Температуру или скорость как
s = .02;
Лучшие значения этих параметров зависят от скорости вашей машины. Сгенерируем n случайных точек с координатами (x,y) между -У и У.
x = rand(n,1)-0.5; y = rand(n,1)-0.5;
Отобразим точки в квадрате со сторонами в пределах от -1 до 1. Сохраним идентификатор для вектора точек и установим свойство EraseMode равным xor. Это укажет графической системе MATLAB не перерисовывать весь график, когда изменяется координата одной точки, а восстанавливать цвет фона в окрестности точки, используя операцию исключающего ИЛИ.
h = plot(x , y , ' . ' );
axis([-1 1 -1 1]) axis square grid off
set(h , 'EraseMode' , 'xor' , 'MarkerSize' , 18 );
while 1
x = x + s*randn(n,1); y = y + s*randn(n,1); set(h, 'Xdata' , x , 'Ydata' , y) end
Сколько нужно времени, чтобы одна из точек вышла за пределы квадрата? Через какое время все точки окажутся вне квадрата?



первых, пусть число кадров
nframes = 50;
Во-вторых, установим первый график как и ранее, за исключением использования EraseMode
x = rand(n,1)-0.5; y = rand(n,1)-0.5; h = plot(x, y, ' . ' )
set(h, 'MarkerSize' , 18) axis([-1 1 -1 1]) axis square grid off
Теперь выделим достаточно памяти для сохранения нашего фильма.
M = moviein(nframes);
Это установит большую матрицу с nframes столбцами. Каждый столбец достаточно длинный, чтобы сохранить один кадр. Полное количество требуемой памяти пропорционально количеству кадров и области текущих осей, но она не зависит от сложности отдельных графиков. Для 50 кадров и осей по умолчанию необходимо около 7.5 мегабайт памяти.

В нашем примере используются квадратные оси, которые немного меньше, поэтому требуется около 6 мегабайт.
Сгенерируем полученный фильм и используя getframe, сохраним каждый кадр.
for k = 1:nframes x = x + s*rand(n,1); y = y + s*rand(n,1); set(h , 'XData' , x , 'YData' , y)
M(: , k) = getframe; end
Теперь проиграем фильм 30 раз movie(30)

Дополнение

Чтобы увидеть дополнительные примеры MATLAB, выберите Examples and Demos из меню, или наберите
demo
в командной строке MATLAB. Выберите из меню примеры, которые вас заинтересовали, и следуйте инструкциям на экране.
Для более детального объяснения отдельных тем, затронутых в этой книге, обращайтесь к следующей литературе:
- MATLAB Installation Guide, описывает, как установить MATLAB на вашу платформу
- Using MATLAB представляет более глубокий материал по языку MATLAB, рабочей среде и математическим темам.
- Using MATLAB Graphics, описывает использование графики и инструментов для визуализации MATLAB.
- MATLAB Application Program Interface Guide объясняет, как писать программы на Си и Фортране, которые взаимодействуют с MATLAB.
- MATLAB 5.1 New Features Guide предоставляет полезную информацию для перехода от MATLAB 4.х к MATLAB 5.1.
MATLAB Toolboxes - это группы М-файлов, которые расширяют возможности MATLAB в различных технических областях. Доступны отдельные руководства по каждой из них. Вот некоторые из тем, которые они охватывают:
Связь
Системы контроля Финансовые вычисления Идентификация в частотной области Нечеткая логика
Спектральный анализ высокого порядка Обработка изображений Линейные матричные неравенства Управление с эталонной моделью р - анализ и синтез Численные алгоритмы
Нейронные сети
Уравнения в частных производных
Проектирование робастных систем с обратной связью
Робастное управление
Обработка сигналов
Моделирование (Simulink)
Сплайны
Статистика
Символьная математика Идентификация систем Вэйвлеты
Для получения последней информации о MATLAB и других продуктах Math-Works обращайтесь к и используйте ваш Internet New reader для доступа к группе новостей comp.soft-sys.matlab
Книги о MATLAB выпускают различные издания. Брошюра, озаглавленная MATLAB-BasedBooks, может быть получена от компании MathWorks, а последний список доступен на Web сайте.
Если вы прочитали всю эту книгу и запустили все примеры, поздравляем, вы начали работу с MATLAB просто великолепно. Если вы пропустили некоторые разделы или не попробовали отдельные примеры, мы советуем вам потратить еще немного времени на изучение Getting Started. В любом случае добро пожаловать в мир MATLAB



Содержание раздела