Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
MATLAB и русский язык
Поскольку разработчики системы MATLAB не предусматривали работы с кириллицей, при попытке использования русского языка в MATLAB возникает ряд проблем. Конкретный набор возможных неприятностей зависит от конкретных версий MATLAB и операционной системы, поэтому перечислим здесь лишь несколько вещей, характерных для шестой версии MATLAB. Во-первых, в комментариях и текстовых константах нельзя использовать строчную букву «я» (это вообще довольно типичная беда программ, написанных на языке С). Именно по этой причине в комментариях к листингам в данной книге везде используется прописная буква «Я». Во-вторых, при наборе в командной строке строчной русской буквы «с» происходит переход на следующую строку, причем уже набранная строка не выполняется и не запоминается. В-третьих, при попытке использовать русский текст в надписях на графиках иногда возникают проблемы с кодировкой выбираемого MATLAB шрифта. Впрочем, последнюю проблему, как правило, удается решить, изменив настройки, используемые для вывода надписей по умолчанию.
Графика
Говоря о графических средствах MATLAB, прежде всего нужно отметить следующее. MATLAB - матричная программа, и ее графические команды могут лишь разнообразными способами визуализировать векторы и матрицы. На практике это означает, что точки, соответствующие элементам векторов и матриц, могут соединяться лишь прямыми линиями - никакого сглаживания или интерполяции производиться не будет. Если вы хотите, чтобы график выглядел более плавным, позаботьтесь о том, чтобы в визуализируемом массиве было больше точек. Если строится график функции, уменьшите шаг между соседними значениями ее аргумента. Если необходимо сгладить экспериментально полученные данные, для которых получить дополнительные точки затруднительно, следует воспользоваться функциями интерполяции (interp* spline, pchip, griddata*) или аппроксимации (polyfit; кроме того, имеется графический интерфейс аппроксимации, вызываемый командой Basic Fitting из меню Tools графических окон). За более подробными сведениями обратитесь к документации MATLAB.
Двумерная графика
Основным средством двумерной графики является функция plot. Наиболее типичный вариант ее использования выглядит следующим образом:
plot(x, у)
Здесь х и у - векторы одинаковой длины, задающие соответствующие координаты точек, выводимых на график. По умолчанию точки соединяются сплошными линиями синего цвета. Тип и цвет линий и символов точек можно изменить, об этом будет рассказано далее, в разделе «Настройка внешнего вида графиков».
В качестве примера построим график функции у = sin(7Lr)/(7u;), которая в MATLAB имеет имя sine (рис. А.И):
» х = -10:0.1:10; % значения координаты х
» у = sinc(x); % значения координаты у
» plot(x. у)
Рис. А.11. График построенный функцией plot
Если на экране еще не было графиков, функция plot создаст графическое окно. Если на экране уже имелись графические окна, график будет выведен в текущее окно то, которое последним выводилось на передний план. О том, как можно создать несколько графических окон, будет рассказано далее, в разделе «Одновременный вывод нескольких графиков».
ЗАМЕЧАНИЕ
Можно использовать функцию plot с одним аргументом plot(y). В этом случае вектор у задает вертикальные координаты точек, а по горизонтали откладываются номера элементов вектора.
Панель управления графического окна
В верхней части графического окна расположена панель инструментов (рис. А. 12), кнопки которой выполняют следующие функции:
New Figure создает новое графическое окно;
Open File позволяет создать новое графическое окно, загрузив в него ранее сохраненный график;
Рис. А.12. Панель инструментов графического окна
Save Figure позволяет сохранить графическое окно в виде файла с расширением .fig (к сожалению, в окне сохранения файла это расширение не добавляется к имени автоматически его приходится вводить вручную). Сохраняемый файл представляет собой МАТ-файл (см. ранее раздел «Ввод и вывод данных»), в котором записаны массивы данных, представленных на графике, а также все параметры настройки графического окна. Сохраненный fig-файл впоследствии можно загрузить с помощью кнопки Open File, воссоздав записанный график;
Print Figure позволяет распечатать содержимое графического окна;
Edit Plot включает режим редактирования графика. В этом режиме можно . выделять элементы графика мышью и настраивать их свойства;
Insert Text включает режим интерактивного размещения текста на графике;
Insert Arrow включает режим рисования стрелок на графике;
Insert Line включает режим рисования линий на графике;
Zoom In включает режим увеличения масштаба. В этом, режиме щелчок левой кнопкой мыши в области графика увеличивает масштаб отображения, правой уменьшает;
Zoom Out включает режим уменьшения масштаба. В этом режиме щелчок левой кнопкой мыши в области графика уменьшает масштаб отображения, правой увеличивает;
Rotate 3D включает режим настройки точки обзора. В этом режиме перемещение указателя мыши в области графика при нажатой левой кнопке мыши приводит к повороту габаритного параллелепипеда трехмерного графика. Использование данного режима для двумерных графиков не имеет особого смысла.
Команды меню графического окна в основном совпадают с кнопками панели инструментов. Отметим лишь несколько команд, представляющих особый интерес:
File > Export позволяет сохранить график в виде файла одного из поддерживаемых графических форматов;
Tools > Basic Fitting выводит окно настройки аппроксимации, с помощью которого можно подобрать подходящую аппроксимирующую кривую для представленных на графике данных;
Tools > Data Statistics выводит окно просмотра статистической информации о представленных на графике данных.
ВНИМАНИЕ
График MATLAB является векторным графическим объектом, для превращения которого в экранные пикселы может понадобиться проделать значительный объем вычислений. При перетаскивании окна размер графика не меняется, так что нет необходимости пересчитывать его заново Windows лишь перемещает растровый образ окна. Если же вы меняете размер окна, разворачивая его, перетаскивая его границы или используя команду Размер системного меню окна, все вычисления, необходимые для построения растрового образа графика, системе придется проделать заново. Поэтому перерисовка графика после изменения размеров его окна потребует столько же времени, сколько и первоначальное построение. Имейте это в виду, если ваш график содержит большое количество элементов.
Ситуация усугубляется, если в Windows установлен режим отображения содержимого окна при перетаскивании (соответствующий флажок расположен на вкладке Эффекты окна свойств экрана). При этом система попытается отследить перетаскивание границы окна, непрерывно перерисовывая график. В случае сложного графика это может привести к весьма существенному торможению работы.
Другие разновидности двумерных графиков
Кроме функции plot есть еще целый ряд функций с аналогичным синтаксисом, позволяющих получить другие разновидности двумерных графиков. Ниже перечислены только некоторые из этих функций, наиболее полезные в инженерных и научных приложениях:
semilogx(x, у) график с логарифмическим масштабом по оси х;
semilogy(x, у) график с логарифмическим масштабом по оси y;
loglog(x, у) график с логарифмическим масштабом по обеим осям;
plotyy(xl, yl, х2, у2) вывод зависимостей yl от xl и у2 от х2 с раздельной оцифровкой вертикальных осей (для первого графика оцифровка вертикальной оси наносится слева, для второго справа);
stem(x, у) график в виде «стебельков»;
stairs(x, у) график в виде ступенчатой линии;
polar(phi, г) график в полярных координатах (phi угловые координаты точек в радианах, г соответствующие им радиусы).
Трехмерная графика
В MATLAB имеется функция с именем plots, но, вопреки ожиданиям, основным средством трехмерной графики является вовсе не она. Дело в том, что функция plots(х, у, z) является просто трехмерным аналогом функции plot, то есть она позволяет построить линию в трехмерном пространстве по координатам точек, задаваемым векторами х, у и z. На практике гораздо чаще бывает необходимо строить графики функций двух переменных в виде поверхностей или линий равного уровня.
Для построения трехмерных поверхностей служит функция surf, имеющая следующий синтаксис:
surf(X. Y, Z)
Здесь X, Y и Z двумерные массивы одинакового размера. Функция строит поверхность, состоящую из четырехугольных ячеек. Координаты углов каждой ячейки задаются значениями четырех соседних элементов массивов X, Y и Z с индексами (i, j), (i, j+1), (i+1. j) и (i+1, j+1). Цвет ячеек (точнее, индекс цвета в текущей палитре) по умолчанию меняется пропорционально координате z.
Из способа задания параметров для функции surf видно, что ее возможности не ограничиваются построением двухкоординатных функциональных зависимостей. Действительно, функция surf позволяет строить произвольные трехмерные поверхности. Однако эта гибкость несколько усложняет построение обычных графиков функций двух переменных.
Чтобы построить график функционально заданной поверхности z = f(x, z/), массивы X и Y, передаваемые функции surf, должны задавать сетку (как правило, равномерную). Значения массива Z рассчитываются по формуле функциональной зависимости с использованием поэлементных операций над массивами X и Y.
Массивы X и Y в данном случае удобнее всего формировать с помощью специальной функции meshgrid, имеющей следующий синтаксис:
[X. Y] = meshgrldCx, у)
Здесь х и у векторы, задающие наборы значений х- и г/-координат. Формируемые массивы X и Y имеют length(y) строк и length(x) столбцов. Строки массива X являются копиями вектора х, а столбцы массива Y копиями вектора у. Чтобы пояснить работу функции meshgrid, передадим ей два целочисленных вектора: » [X, Y] = meshgrid(l:5. -3:3)
X = |
||||
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
1 |
2 |
3 |
4 |
5 |
у = |
||||
-3 |
-3 |
-3 |
-3 |
-3 |
-2 |
-2 |
-2 |
_2 |
-2 |
-1 |
-1 |
-1 |
-1 |
-1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
2 |
2 |
3 |
3 |
3 |
3 |
3 |
В качестве примера построим график функции
при изменении х и у от -5 до 5 с шагом 0,2 (рис. А. 13):
» х = -5:0.2:5;
» [X, Y] = meshgrid(x);
» Z = s1nc(sqrt(X.~2+Y.-2));
» surf(X. Y. Z)
» colormap gray
Рис. А.13. трехмерная повыерхность построенная с помощью функции surf
ЗАМЕЧАНИЕ
В приведенном фрагменте кода функция meshgrid используется с одним входным параметром. Это сокращенный вариант вызова, эквивалентный meshgrid(x, х).
Для построения графика функции двух переменных в виде линий равного уровня служит функция contour, имеющая следующий синтаксис:
[с. h] = contour(X, Y. Z. V)
Здесь Z двумерный массив, содержащий значения функции, а параметры X и Y могут быть как массивами, полученными от функции meshgrid (см. выше), так и векторами координат, передаваемыми функции meshgrid. При отсутствии этих параметров в качестве координат используются номера строк и столбцов матрицы Z. Параметр V может быть числом (тогда он задает количество выводимых линий уровня) или вектором (тогда этот параметр трактуется как набор значений функции для построения линий равного уровня). При отсутствии данного параметра значения уровня выбираются автоматически.
Возвращаемыми результатами с и h являются структуры данных, которые необходимо передать другой функции, clabel, для нанесения оцифровки на линии уровня:
clabel(c. h)
В качестве примера построим линии уровня для функции peaks. Это демонстрационная функция трехмерной графики MATLAB, генерирующая поверхность с несколькими пиками и впадинами. Нанесем также на линии уровня оцифровку с помощью функции clabel (рис. А.14):
» [с. h] = contour(peaks);
» clabel(c. h)
Рис. А.14. линии равного уровня, построенные с помощьюфункции contour, с оцифровкой, нанесеррой функцией clabel
Другие разновидности трехмерных графиков
Кроме функций surf и contour есть еще целый ряд функций с аналогичным синтаксисом, позволяющих получить другие разновидности трехмерных графиков. Ниже перечислены только некоторые из этих функций, наиболее полезные в инженерных и научных приложениях:
surfcCX, Y, Z) комбинация функций surf и contour. Линии равного уровня выводятся на нижней координатной плоскости;
mesh(X, Y, Z) построение поверхности в виде сетки с окрашенными ребрами и незакрашенными четырехугольными ячейками;
meshcCX, Y, Z) комбинация функций mesh и contour. Линии равного уровня выводятся на нижней координатной плоскости;
meshz(X, Y, Z) то же, что mesh, но с краев построенной сетчатой поверхности вниз спадает «занавес»;
waterfall (X. Y, Z) то же, что mesh, но ребра, разделяющие ячейки, проводятся только вдоль оси х. В результате объемное тело выглядит «нарезанным на ломтики»;
stemS(X, Y. Z) •- вывод трехмерного графика в виде «стебельков», начинающихся при z = 0 в точках, задаваемых массивами X и Y. Высота «стебельков» определяется массивом Z;
contourf(X, Y, Z) то же, что contour, но пространство между линиями равного уровня окрашено в различные цвета в зависимости от значений Z;
contour3(X, Y, Z) то же, что contour, но линии равного уровня рисуются не в одной плоскости, а при соответствующих значениях г-координаты;
pcolorCX. Y, Z) строит двумерный график, представляющий собой сетку из четырехугольных ячеек, координаты вершин которых задаются массивами X и Y. Ячейки закрашены цветами, определяемыми значениями элементов массива Z. Тот же результат можно получить, если для поверхности, построенной функцией surf, установить точку обзора точно сверху.
Настройка внешнего вида графиков
В большинстве случаев параметры оформления графиков, выбираемые по умолчанию, оказываются вполне приемлемыми. Однако иногда для повышения выразительности изображения возникает необходимость изменить тип и цвет линий, нанести на график поясняющие надписи и т. п. В данном разделе кратко рассматриваются соответствующие средства MATLAB.
Настройка линий и точек
Соединение точек графика отрезками синего цвета не единственный вариант отображения. MATLAB позволяет управлять цветом графика, типом линии и способом отображения точек данных. Для этого используется дополнительный параметр команд plot, stem и т. п. Этот параметр представляет собой текстовую строку 'LineSpec', символы которой и указывают нужные режимы:
plot(x, у. 'LineSpec')
Список возможных символов и их значения приведены в табл. А.1.
Таблица А.1. Символы управления линиями и точками графиков
Символ |
Назначение |
|
Управление цветом |
||
b |
Синий (по умолчанию) |
Blue |
с |
Голубой Cyan |
|
9 |
Зеленый Green |
|
k |
Черный ЫасК |
|
• |
Фиолетовый Magenta |
|
г |
Красный Red |
|
W |
Белый White |
|
У |
Желтый Yellow |
|
Управление типом линии |
||
- |
Непрерывная (по умолчанию) |
|
-- |
Пунктирная, длинный штрих |
|
: |
Пунктирная, короткий штрих |
|
-. |
Штрихпунктирная |
|
Управление маркерами точек данных |
||
. |
Точка (по умолчанию) |
|
+ |
Знак «плюс» |
|
* |
Звездочка |
|
0 |
Кружок |
|
X |
Крестик |
|
S |
Квадрат Square |
|
d |
Ромб Diamond |
|
Р |
Пятиконечная звезда Pentagram |
|
h |
Шестиконечная звезда Hexagram |
|
V |
Треугольник острием вниз |
|
Л |
Треугольник острием вверх |
|
< |
Треугольник острием влево |
|
> |
Треугольник острием вправо |
Перечисленные в таблице символы можно комбинировать. К примеру, строка ' -. dr' задаст вывод точек графика ромбиками (d), а соединяющих точки линий штрих-пунктиром (-.). И точки, и линии при этом будут красного цвета (г).
Функции оформления графиков
Только что рассмотренные параметры управления точками и линиями задаются непосредственно при выводе графика функцией plot или одной из ей подобных.
Кроме того, существует еще целый ряд функций, которые вызываются уже после построения графика и меняют его внешний вид. Эти функции воздействуют только на текущий график (то есть график в текущем графическим окне и, если использовалась команда subplot, в текущей клетке этого окна). Ниже приведен список наиболее важных из этих функций:
axis настройка координатных осей. Вот некоторые способы использования этой функции (обратите внимание на то, что не все перечисленные режимы являются взаимоисключающими):
ax1s([xm1n xmax yrnin ymax]) настройка предельных значений осей для двумерного графика; ax1s([xm1n xmax ymin ymax zmin zmax]) - настройка предельных значений осей для трехмерного графика;
axis auto - автоматический выбор пределов (этот режим установлен по умолчанию);
axis tight предельные значения осей в точности соответствуют диапазонам изменения данных;
axis equal - для всех осей графика устанавливается одинаковый масштаб;
axis image то же, что комбинация axis equal и axis tight;
axi s square делает длину осей одинаковой (а область графика - квадратной);
axis normal отменяет действие режимов axis square и axis equal;
axis off отключает отображение осей вместе с оцифровкой, подписями и фоном графика; axis on включает отображение осей, их оцифровки, подписей, а также фона графика;
grid - включение (grid on) и выключение (grid off) отображения линий
сетки; a box - включение (box on) и выключение (box off) отображения обрамляющего
график прямоугольника или параллелепипеда;
legend(`stringl`,. 'string2', 'string31. ...) - добавление аннотации («легенды») к графику. Каждая из строк-параметров задает аннотацию для одной из выведенных на график зависимостей; titleC 'text') добавление заголовка к графику;
xlabel (' text') добавление подписи к оси х;
yl abel (' text') добавление подписи к оси у;
zlabel (' text') добавление подписи к оси z;
text(x, у, 'string') или text(x, у, z, 'string') - размещение строки'string1
в точке двумерного или трехмерного графика с указанными координатами;
xlim([xmin xmax]) - задание пределов по оси х;
ylim([ymin ymax]) задание пределов по оси y;
zlim([zmin zmax]) задание пределов по оси z.
В качестве примера повторим вывод графика, показанного ранее на рис. А.11, штрихпунктирной линией. Кроме того, добавим сетку, подписи к осям, «легенду» и заголовок. Результат показан на рис. А. 15.
» х = -10:0.1:10; % значения координаты х
» у = sinc(x); % значения координаты у
» plot(x. у, '-.')
» grid on % добавляем сетку
» xlabel('x') % подпись оси х
» ylabel('sinc(x)1) % подпись оси у
» legendCsinc function') % аннотация
» % заголовок графика
» tltle('Plot of function sinc(x)=sin(\pi x)/(\pi x) ')
Рис. А. 15. график с начтроенными параметрами отображения линий, подписями осей, «легендой» и заголовком
Обратите внимание на то, что последовательность символов \pi, использованная в аргументе функции title, на рис. А.15 превратилась в греческую букву п. Аналогичным образом при использовании функций title, xlabel, ylabel, legend и т. п. можно получить и другие специальные символы. Дело в том, что MATLAB распознает в выводимых на график текстовых строках некоторые команды языка ТеХ. Это команды вывода греческих букв (\alpha, \beta и т. д. для строчных букв и \Gamma, \Delta и т. д. для прописных, не совпадающих по начертанию с английскими), вывода математических символов (\1nfty для оо, \leq для <, \geq для >, \рт для ± и т. п.), форматирования нижних и верхних индексов (соответственно _{...} и %..}), а также управления начертанием шрифта (\bf полужирный, \it - курсив \sl - наклонный, \гт - обычный). За более подробной информацией о форматировании выводимого на график текста обратитесь к документации MATLAB.
ЗАМЕЧАНИЕ
ТеХ - это непревзойденная по своим возможностям система подготовки текстов, содер
жащих математические формулы. ТсХ не является визуальной системой - это скорее
язык программирования. Чтобы продемонстрировать идею, приведем маленький при
мер - вы набираете во входном файле, скажем, $\gamma=\sqrt{\alpha-2+\beta*2}$ „ по
лучаете па печати у = J^T^- Подумайте - может быть, это лучше, чем щелкать мышью
в Equation Editor? Подробнее узнать о ТеХ можно, например, из книги [16].
Одновременный вывод нескольких графиков
Вывести на экран несколько графиков одновременно можно по-разному - в разных графических окнах, в разных областях одного окна или же в общих осях координат. В зависимости от этого используются различные средства MA1LAB. Чтобы вывести несколько графиков в разных графических окнах, нужно создать эти графические окна с помощью функции figure или команды меню File > New ^Figure главного окна MATLAB (в меню графических окон есть более короткий вариант - команда File > New Figure). После создания нового окна о становится текущим, и последующий графический вывод направляется именно в него.
ЗАМЕЧАНИЕ
Сделать конкретное графическое окно текущим можно, выведя его на передний план и затем переключившись в командное окно MATLAB.
Приведенные ниже команды создадут два графика в разных окнах:
» plot(x1, y1)
» figure
» plot(x2, y2)
Для вывода нескольких графиков в разных областях одного окна используется команда subplot, имеющая следующий синтаксис:
subplot(Rows. Cols. N)
В результате графическое окно будет разбито на клетки в виде матрицы, имеющей Rows строк и Cols столбцов, и N-я клетка (в отличие от нумерации элементе! в матрицах, нумерация клеток ведется по строкам} становится текущей. Приведенные ниже команды создают четыре графика, располагая их в одном графическом окне в две строки и два столбца (рис. А. 16):
» t = 0:0.01:10;
» subplot(2, 2, 1)
» plot(t. sln(t))
»subplot(2. 2. 2)
» plotCt. cos(t))
» subplot(2, 2. 3)
» plottt. t.^2+1)
» subplot(2, 2, 4)
» plot(t. 1./(t.^2+1))
Рис. А.16. результат использования команды subplot
Наконец, вывести несколько графиков в общих осях тоже можно разными способами. Во-первых, если параметр функции plot, задающий значения координаты у, является матрицей, то строятся отдельные графики для каждого столбца матрицы, например:
» х = (0:0.1:10)';
» plot(x, [sin(x) cos(x)])
Во-вторых, при вызове функции plot можно перечислить несколько пар значений х- и 2/-координат:
plot(xl. yl, х2. у2, ...)
При этом для каждой пары (xi, yi) будет построен свой график. Поэтому тот же результат, что и в предыдущем примере, можно получить и таким образом: » plot(x, sin(x). x, cos(x))
В-третьих, можно использовать команду hold on, включающую режим сохранения содержимого текущих координатных осей при выводе в них новых графиков. Тогда новые команды pi ot будут строить графики поверх имеющихся, не затирая их. Для выключения этого режима используется команда hold off. Перепишем наш пример еще раз, используя команды hold:
» plot(x. sin(x))
» hold on
» plot(x. cos(x))
» hold off
Дальнейшее использование графиков
Содержимое графического окна можно распечатать, используя следующие команды меню File: Page Setup, Print Setup, Print Preview и Print. Печать в MATLAB выполняется так же, как в других Windows-приложениях, поэтому подробно рассматривать этот процесс мы не будем.
Печатать графики непосредственно из MATLAB проходится редко, гораздо чаще необходимо использовать их в документах, создаваемых, например, в Microsoft Word. Для этого необходимо скопировать изображение в буфер обмена командой Edit > Copy Figure меню графического окна.
Однако для получения желаемого результата необходимо настроить параметры копирования с помощью команды Edit > Copy Options меню графического окна. После ее вызова откроется соответствующий раздел окна Preferences. В нем имеется два трехпозиционных переключателя и один флажок. Переключатель Clipboard format позволяет выбирать следующие варианты:
Metafile (may lose information) в буфер помещается векторный образ окна;
Preserve information (metafile if possible) MATLAB выбирает растровый или векторный вариант по своему усмотрению, в зависимости от сложности изображения;
Bitmap в буфер помещается растровый образ окна.
Векторное изображение можно масштабировать без потери качества и редактировать в соответствующих программах (CorelDRAW, Adobe Illustrator и т. п.). При копировании растрового образа неизбежно происходит потеря информации, однако прорисовка и печать растрового рисунка может оказаться быстрее, чем в случае сложного векторного изображения. В большинстве случаев целесообразно выбирать вариант Preserve information (metafile if possible). Переключатель Figure background color управляет копированием фона графического окна:
Use figure color копируется фоновый прямоугольник того же цвета, что на
экране (по умолчанию серый);
Force white background копируется фоновый прямоугольник белого цвета;
Transparent background изображение копируется без фонового прямоугольника.
Наиболее целесообразный вариант Transparent background. Наконец, флажок Match figure screen size управляет размером копируемого изображения. Если флажок установлен, копируемое изображение будет иметь такие же размеры, как на экране. Если флажок снят, размер копируемого изображения определяется настройками, сделанными в окне Page Setup.