Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 1804

.pdf
Скачиваний:
9
Добавлен:
30.04.2022
Размер:
2.24 Mб
Скачать

Ис п о л ь з о в а н и е фу н к ц и и plot3 б е з mesh

20

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

4

2

 

 

 

 

 

 

 

4

 

0

 

 

 

 

 

2

 

 

-2

 

 

-2

0

 

 

 

 

 

 

 

 

 

 

 

-4

-4

 

 

 

 

 

 

 

 

 

 

 

 

 

Ис п о л ь з о в а н и е фу н к ц и и plot3 п о с л е mes

20

 

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

4

2

 

 

 

 

 

 

 

4

 

0

 

 

 

 

 

2

 

 

-2

 

 

-2

0

 

 

 

 

 

 

 

 

 

 

 

-4

-4

 

 

 

 

 

 

 

 

 

 

 

Рис. 1.9

 

 

 

 

 

 

 

 

 

mesh

 

Сеточные 3D-графики с функциональной окраской

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

Синтаксис:

mesh(X,Y,Z) – выводит в графическое окно сетчатую поверхность Z(X,Y) с функциональной окраской, при которой цвет задается высотой поверхности.

Возможна также форма mesh(Z);

meshc(…) – по синтаксису аналогична предыдущим, но строит график поверхности, объединенный с проекциями линий равного уровня (графика типа contour);

meshz(…) – аналогичный синтаксис, но строит поверхность в виде столбиков.

Пример:

»[x,y]=meshgrid([-3:0.1:3]);

»z=x.^2+y.^2;

»subplot(2,1,1),mesh(x,y,z)

»subplot(2,1,2),meshc(x,y,z)

Рис. 1.10

surf

Затененные сеточные 3D-графики

 

 

Синтаксис:

surf(X, Y, Z, C) вывод на экран сетчатой поверхности для значений массива Z, определенных на множестве значений массивов X и Y. Цвет массива определяется массивом C;

surf(Z, C) использует сетку, которая определяется одномерными массивами х = 1: n и y = 1: m;

surf(X, Y, Z) и surf(Z) используют в качестве массива цвета C = Z, то есть цвет в этом случае пропорционален высоте поверхности;

surf – возвращает свойства объекта surface.

Благодаря функциональной окраске график поверхности гораздо более выразителен, чем при построении поверхности функцией mesh, причем даже в том случае, когда цветной график печатается в черно-белом виде (в этом случае лучше использовать функцию colormap(gray), выполняющую окраску фигуры в тонах серого цвета).

1.9.3. Вспомогательные графические функции

figure

Активизация графического окна

 

 

Синтаксис:

figure(n) данная команда делает активным графическое окно с номером n (если такое окно существует) или создает пустое графическое окно.

axis

Масштабирование осей и вывод на экран

 

 

Синтаксис:

axis([xmin xmax ymin ymax]) axis(‗auto‘)

axis(axis) axis(‗square‘) axis(‗equal‘)

axis([xmin xmax ymin ymax]) устанавливает масштаб по осям x, y для активного графического окна (для трехмерных графиков добавятся аргументы zmin и zmax).

axis(‗auto‘) возвращает масштаб по осям к исходным значениям (принятым по умолчанию).

axis(axis) фиксирует текущие значения масштабов по осям для последующих графиков.

axis(‗square‘) устанавливает одинаковый диапазон изменения переменных по осям.

axis(‗equal‘) устанавливает масштаб, который обеспечивает одинаковые расстояния между метками по осям x и y.

grid

Нанесение сетки

 

 

Синтаксис:

grid on наносит координатную сетку на текущие оси; grid off удаляет координатную сетку;

grid выполняет роль переключателя с одной функции на другую.

hold

Управление режимом сохранения текущего окна

Синтаксис:

hold on включает режим сохранения текущего графика и свойств объекта axis, так что последующие команды приведет к добавлению новых графиков в активном графическом окне;

hold off выключает режим сохранения текущего графика; hold реализует переключение с одного режима на другой.

subplot

Разбиение графического окна

Синтаксис:

subplot(mnp) данная команда выполняется перед обращение к функциям построения графиков для одновременной выдачи нескольких графиков (каждый со своим объектом axis) в различных частях графического окна. значение m указывает, на сколько частей разбивается окно по горизонтали, n по вертикали, а р номер позиции, куда будет выводиться очередной график.

Эта же команда используется для перехода от одного подокна к другому. Пример:

»x=-1:0.1:1;

»y1=sin(x);

»subplot(211),plot(x,y1)

»y2=log(abs(y1));

Warning: Log of zero.

»subplot(212),plot(x,y2)

1

 

 

 

 

 

 

 

 

 

 

0.5

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

-0.5

 

 

 

 

 

 

 

 

 

 

-1

 

 

 

 

 

 

 

 

 

 

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

0

 

 

 

 

 

 

 

 

 

 

-0.5

 

 

 

 

 

 

 

 

 

 

-1

 

 

 

 

 

 

 

 

 

 

-1.5

 

 

 

 

 

 

 

 

 

 

-2

 

 

 

 

 

 

 

 

 

 

-2.5

 

 

 

 

 

 

 

 

 

 

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

 

 

 

 

 

Рис. 1.11

 

 

 

 

zoom

Увеличение масштабов графика

 

 

Синтаксис:

zoom on (off) включает (выключает) режим масштабирования активного графика. Удерживая ЛКМ вы можете выделить интересующую Вас область графика, которая будет увеличена затем до размеров текущего графического окна;

zoom out возвращает график в исходное положение.

1.9.4. Надписи и пояснения к графикам

title

Установка титульной надписи

 

 

Синтаксис: title('<текст>')

Команда title('<текст>') размещает текст над 2D- и 3D-графиком.

xlabel, ylabel, zlabel

Установка осевых надписей

 

 

Синтаксис: xlabel('<текст>') ylabel('<текст>') zlabel ('<текст>')

xlabel('<текст>') помещает текст для двумерного графика вдоль оси х, для трехмерного графика - вдоль оси х либо под графиком.

ylabel('<текст>') помещает текст для двумерного графика вдоль оси у, для трехмерного графика - вдоль оси у либо под графиком.

zlabel ('<текст>') помещает текст вдоль оси z трехмерного графика. Повторное использование команды приводит к замене старого текста

новым.

clabel

Маркировка линий равного уровня

 

 

Синтаксис: clabel(C) clabel(C, v) clabel(C, 'manual')

clabel(C) добавляет метки к линиям уровня в случайно выбранных позициях.

clabel(C, v) маркирует линии уровня контура, заданные в векторе v. clabel(C, 'manual') маркирует линии уровней в позициях, указываемых с

помощью мыши. Нажатие клавиши Return или правой кнопки мыши завершает маркировку. Если мышь недоступна, то можно использовать клавишу пробела для перехода между линиями уровней и ―клавиши-стрелки‖ для перемещения перекрестия.

Пример:

»[X,Y]=meshgrid([-3:0.1:3]);

»Z=sin(X)./(X.^2+Y.^2+0.3);

»C=contour(X,Y,Z,10);

»colormap(gray)

»clabel(C)

3

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

0.238

 

 

 

1

 

 

 

 

 

 

 

 

-0.396

-0.555

 

 

 

 

 

-0.713

 

 

 

 

 

 

 

 

 

0

 

 

0.0792

 

 

 

 

 

-0.238

 

 

 

 

 

 

 

 

 

 

 

 

0.555

 

 

 

-1

 

 

 

0.396

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.0792

-2

 

 

 

 

 

 

 

-0.0792

 

 

 

 

-3

 

 

 

 

 

 

-3

-2

-1

0

1

2

3

Рис. 1.12

 

 

 

 

 

 

text

 

 

Ввод надписи в любое место графика

Синтаксис:

text(x, у, '<текст>') text(x, y, z, '<текст>')

text(x, у, '<текст>') помещает в заданной точке (х, у) двумерного графика начало текста, указанного в качестве третьего аргумента. Если х и у одномерные массивы, заданный текст помещается во все позиции, определяемые координатами [x(i) y(i)].

text(x, у, z, '<текст>') выводит текст на трехмерный график.

Приведем примеры написания команд без показа их графической реализации.

Создать графическое окно и написать символ 'х' в трех точках с координатами (1, 1), (5, 10), (10, 20):

plot([1 5 10], [1 10 20], 'х')

Написать, начиная с позиции (5, 10), 'Action point': text(5, 10, 'Action point')

Написать, в позициях (2, 10), (7, 16) 'Нет активных точек': text([2 7], [10 16], ‗Нет активных точек‘)

gtext

Ввод текста на график с помощью мыши

 

 

Cинтаксис: gtext('<текст>')

Команда gtext('<текст>') высвечивает в активном графическом окне перекрестие, перемещение которого позволяет указать место ввода заданного текста; по завершении позиционирования нажатие кнопки мыши или любой клавиши вводит заданный текст.

Пример. Разместим на графике функции у = sin(x)/x маркер "Скорость":

»x=1e-6:0.05:10;

»plot(x,sin(x)./x)

»grid

»gtext('Скорость')

legend

Вывод пояснения

Синтаксис:

legend('<текст1>', '<текст2> ', ‗<текст3>', ...)

legend('<wi<n линии\>', '<текст\>', '<тип линии2.>', '<текст2>', .,.) legend(h,...)

legend(M) legend(h, M) legend off legend(..., n)

legend('<текст1>', '<текст2> ', ‗<текст3>', ...)

добавляет к текущему

графику пояснение в виде указанных текстовых строк.

 

legend('<wi<n линии\>', '<текст\>', '<тип линии2.>', '<текст2>', .,.)

позволяет специфицировать тип линии, которая выносится в пояснение, так, как это делается в команде plot.

legend(h. ...) добавляет пояснение к графику с дескриптором h. Команды legend(M) и legend(h, M), где М - массив строк, также допусти-

мы для формирования пояснения. Следует помнить, что строки массива М должны иметь одинаковую длину.

legend off удаляет пояснение с текущего графика.

legend(..., n) устанавливает предельное количество позиций для размещения пояснения. Если оказывается, что в области графика места недостаточно, график перестраивается и пояснение размещается вне пределов графика. Если n = -1, то пояснение размещается вне области графика. Если n = 0, то пояснение размещается в области графика, если места для этого достаточно.

Для перемещения пояснения следует нажать левую кнопку мыши, находясь в этой области, а затем переместить пояснение в нужную позицию.

Замечание:

Для того чтобы избежать пересечения пояснения с линиями графика или нанесенной сеткой, необходимо текущему графическому объекту axes присвоить дескриптор пояснения:

hi = legend(....) axes(hl)

print -dbitmap

colorbar

Вывод шкалы палитры

 

 

Синтаксис:

 

colorbar('vert')

 

colorbar('horiz')

 

colorbar(h)

 

colorbar

colorbar('vert') добавляет к текущему графику вертикальную шкалу палитры.

colorbar('horiz') добавляет к текущему графику горизонтальную шкалу палитры.

colorbar(h) добавляет к графику с дескриптором h шкалу палитры. Размещение шкалы реализуется автоматически в зависимости от соотношения ширины и высоты графика.

Команда colorbar без аргументов размещает на текущем графике новую вертикальную шкалу палитры или обновляет прежнюю.

1.10. ПРОГРАММИРОВАНИЕ И ОЛАДКА

Система MATLAB обычно работает в режиме интерпретации команд и операторов: они вводятся в ходе сеансов в командной строке, а MATLAB выполняет их немедленную обработку и выдает вычисленный результат. Однако в MATLAB есть возможность обработки заранее подготовленной последовательности команд и операторов, записанных в виде файла (эти файлы имеют расширение *.m).

М-файлы, содержащие команды и операторы MATLAB, разделяются на файлы-сценарии и процедуры-функции.

Сценарий – это внешний файл, содержащий последовательность команд, операторов и функций системы MATLAB. После ввода имени такого файла начинается последовательная интерпретация его операторов.

Замечание: имена файлов-сценариев не разрешается использовать в качестве операндов в выражениях или в качестве аргументов функций.

function

Заголовок процедуры-функции

 

 

Синтаксис:

function[<список выходных переменных>] = <имя функции>(<список входных переменных>).

Если первая строка М-файла начинается с определения

function[<список выходных переменных>] = <имя функции>(<список входных переменных>),

то этот файл представляет собой М-функцию. Эти файлы расширяют возможности системы благодаря добавлению новых функций, самостоятельно написанных пользователем на языке MATLAB.

Стандартная структура М-функции должна быть следующей:

Первая строка объявляет имя функции, а также ее входные и выходные аргументы. Без такой строки этот файл был бы М-файлом сценария;

После объявления имени функции должны быть записаны строки комментариев, содержащие справочную информацию о данной функции и поясняющие ее назначение и используемые параметры. Для этого служит символ %;

Переменные в теле функции - это локальные переменные, в отличие от переменных Script-файлов сценариев, которые являются глобальными.

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

Возможность добавления к системе MATLAB новых функций обеспечивает ей важное свойство расширяемости. Новые функции могут использовать как встроенные функции системы, так и функции, ранее написанные пользователем. Новые функции добавляются к словарю системы MATLAB и становятся доступными наряду со встроенными функциями. Собственно именно это и определяет свойство расширяемости. Эти функции оформляются в виде текстовых файлов с расширением .m.

Функция в системе MATLAB не имеет никаких отличительных признаков, и при обращении к ней MATLAB просто ищет файл с соответствующим именем, просматривая все пути доступа, определенные переменной MATLAB PATH. Когда файл найден, он проходит процедуру компиляции, размещается в оперативной памяти и только после этого начинает выполняться. В этом - также отличие функции от Script-файла, который выполняется только в режиме интерпретации. Для удаления откомпилированной функции из памяти используется команда clear <имя функции>.

Если при выполнении функции включен режим echo, то функция тоже будет выполняться в режиме интерпретации и на терминал будет выводиться результат выполнения каждого оператора.

Пример:

Типовое оформление процедуры-функции в системе MATLAB:

function w = rmovel(v)

%RMOVEL удаляет из вектора v совпадающие элементы.

%Вызов функции:

%w == rmovel(v)

%Используемые функции:

%MATLAB: length, find

%ППП SNAE: нет

%Входные переменные:

%v - исходный вектор.

%Выходные переменные:

%w - вектор, не содержащий одинаковых элементов.