d9e5a92d

Окна изображений

y2 = sin(t-.25);
y3 = sin(t-.5);
plot( t, y, t, y2, t, y3)



2-, 3- символьная строка (заключенная в одинарные кавычки), составленная из типов цвета, стиля линий и маркеров:
- Символы, относящие к цвету: 'c', 'm', 'y', 'r', 'g', Ъ', W и 'к'. Они обозначают голубой, малиновый, желтый, красный, зеленый, синий, белый и черный цвета соответственно.
- Символы, относящиеся к типу линий: ' - ' для сплошной, ' ' для разрывной, ' : ' для пунктирной, ' . ' для штрихпунктирной линий и ' none ' для её отсутствия.
- Наиболее часто встречающиеся маркеры ' + ' , ' о ', ' * ' и 'o'.
Например, выражение
plot(x,y,,y:+')
строит желтый пунктирный график и помещает маркеры ' + ' в каждую точку данных. Если вы определяете только тип маркера, но не определяете тип стиля линий, то MATLAB выведет только маркеры.

Окна изображений

Функция plot автоматически открывает новое окно изображения (далее окно), если до этого его не было на экране. Если же оно существует, то plot использует его по умолчанию. Для открытия нового окна и выбора его по умолчанию, наберите
figure
Для того, чтобы сделать существующеё окно текущим -
figure(n)
где n - это номер в заголовке окна. В этом случае результаты всех последующих команд будут выводиться в это окно.

Добавление кривых на существующий график

Команда hold позволяет добавлять кривые на существующий график. Когда вы набираете
hold on
MATLAB не стирает существующий график, а добавляет в него новые данные, изменяя оси, если это необходимо. Например, следующий элемент кода вначале создает контурные линии функции peaks, а затем накладывает псевдоцветной график той же функции:
[x,y,z] = peaks; contour(x,y,z,20,'k') hold on pcolor(x,y,z) shading interp
Команда hold on является причиной того, что график pcolor комбинируется с графиком contour в одном окне

Подграфики

Функция subplot позволяет выводить множество графиков в одном окне или распечатывать их на одном листе бумаги.
subplot(m,n,p)
разбивает окно изображений на матрицу m на n подграфиков и выбирает р-ый подграфик текущим. Графики нумеруются вдоль первого в верхней строке, потом во второй и т.д. Например, для того, чтобы представить графические данные в четырех разных подобластях окна необходимо выполнить следующее:
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(4*cos(t));
subplot(2,2,1)
mesh(X)
subplot(2,2,2); mesh(Y) subplot(2,2,3); mesh(Z) subplot(2,2,4); mesh(X,Y,Z)

Мнимые и комплексные данные

Если аргумент функции plot комплексное число, то мнимая часть игнорируется, за исключением случая, когда комплексный аргумент один. Для этого специального случая происходит построение графика зависимости реальной части аргумента от мнимой. Поэтому
plot(Z)
где Z комплексный вектор или матрица, эквивалентно plot(real(Z),imag(Z))
Например,
t = 0:pi/10:2*pi; plot(exp(i*t),'-o‘)
отобразит двадцатисторонний многоугольник с маленькими кружками на вершинах.
pi:pi/100:pi; y = sin(t); plot(t,y)
axis([-pi pi -1 1])
xlabel( ‘ -\pi \leq \itt \leq \pi ‘ ) ylabel( ‘ sin(t) ‘ )
title( ' График функции sin ' )
text(-1, -1/3, ' \іі{Отметьіе нечетную симметрию} ' )


Функции mesh и surface

MATLAB определяет поверхность как z координаты точек над координатной сеткой плоскости x-y, используя прямые линии для соединения соседних точек. Функции mesh и surface отображают поверхность в трех измерениях.

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

Визуализация функций двух переменных

Для отображения функции двух переменных, z = f (x,y), создаются матрицы X и Y, состоящие из повторяющихся строк и столбцов соответственно, перед использованием функции. Затем используют эти матрицы для вычисления и отображения функции.

Функция meshgrid преобразует область определения, заданную через один вектор или два вектора x и у, в матрицы X и Y для использования при вычислении функции двух переменных. Строки матрицы X дублируют вектор х, а столбцы Y - вектор у.
Для вычисления двумерной функции sinc , sin(r)/r, в области х-у поступают следующим образом
[X, Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2+Y.^2)+eps;
Z = sin(R)./R; mesh(X,Y,Z)
В этом примере R - это рассояние от начала координат, которому соответствует центр матрицы. Добавление eps позволяет избежать неопределенности 0/0 в начале координат.

Изображения

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


load durer whos
покажет, что файл durer.mat в директории demo состоит из матрицы размером 648 на 509 (матрицы X) и матрицы размером 128 на 3 (матрицы map). Элементы матрицы X - это целые числа от 1 до 128, которые служат индикаторами в цветном отображении, тар. Следующие строки
imag(X) colormap(map) axis image
воспроизводят гравюру Дюрера, показанную в начале этой книги. Высокое разрешение магического квадрата, находящегося в правом верхнем углу, доступно в другом файле. Наберите
load detail
и используйте стрелку 'вверх' на клавиатуре для повторного запуска команд image, colormap и axis.
colormap(hot)
добавит цветовую гамму двадцатого века на гравюру шестнадцатого.

Печать графики

Опция Print в меню File и команда print печатают графику MATLAB. Меню Print вызывает диалоговое окно, которое позволяет выбирать общие стандартные варианты печати.

Команда print обеспечивает большую гибкость при выводе выходных данных и позволяет контролировать печать из М-файлов. Результат может быть послан прямо на принтер, выбранный по умолчанию, или сохранен в заданном файле.

Возможно широкое варьирование формата выходных данных, включая использование PostScript.
Например, следующая команда сохранит текущее окно изображения как цветной PostScript Level 2 Encapsulated в файле magicsquare.eps:
print -depsc2 magicsquare.eps
Важно знать возможности вашего принтера перед использованием команды print. Например, файлы Postscript Level 2 обычно меньше и воспроизводятся намного быстрее, чем Postscript Level 1. Однако, не все Postscript принтеры поддерживают Level 2, таким образом вам необходимо узнать, что может обрабатывать ваше устройство вывода.

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

Справка и текущая документация

Есть несколько способов получить текущую документацию по функциям MATLAB.
- Команда help
- Окно справки
- MATLAB Help Desk
- Текущие справочные страницы
- Связь с The MathWorks, Inc.

Команда help

Команда help - это самый основной способ определения синтаксиса и поведения отдельных функций. Информация отображается прямо в командном окне. Например
help magic
выдаст
MAGIC Magic square.
MAGIC(N) is an N-by-N matrix constructed from the integers 1 through N^2 with equal row, column, and diagonal sums.
Produces valid magic squares for N = 1,3,4,5,...
Замечание MATLAB в текущей справке использует заглавные буквы для функций и переменных для того, чтобы выделить их из текста. Однако, при наборе имен функций всегда используйте соответствующие строчные буквы, так как MATLAB чувствителен к регистрам, а все имена функции строчные.
Все функции MATLAB организованы в логические группы и структура директорий MATLAB базируется на этом группировании. Например, все функции линейной алгебры находятся в директории matfun. Чтобы вывести имена всех функций в этой директории с кратким описанием, надо набрать
help matfun
Matrix functions - numerical linear algebra.
Matrix analysis.
norm - Matrix or vector norm.
normest - Estimate the matrix 2-norm.
Команда
help
HELP topics:
matlab\general - General purpose commands.
matlab\ops - Operators and special characters.

Окно справки

Окно справки MATLAB появляется на PC или Mac после выбора опции Help Window в меню Help или нажатием кнопки вопроса на панели инструментов. Эта же операция может быть выполнена при наборе команды
helpwin
Для вывода окна справки по отдельным разделам, наберите helpwin topic
Окно справки предоставляет вам такую же информацию, как и команда help, но оконный интерфейс обеспечивает более удобную связь с другими разделами справки.

Команда lookfor

Команда lookfor позволяет искать функции по ключевому слову. Она просматривает первую строку текста справки, называемую строкой H1, для каждой функции MATLAB и возвращает строки H1, содержащие заданное ключевое слово.

Например, MATLAB не имеет функции с именем inverse. Поэтому ответ на запрос
help inverse
будет
inverse.m not found.
В то время как
lookfor inverse
найдет множество согласованных ответов. В зависимости от того, какие toolboxes вы установили, вы получите соответствующие записи. Например
INVHILB Inverse Hilbert matrix.
ACOS Inverse cosine.
ACOSH Inverse hyperbolic cosine.
ACOT Inverse cotangent.
ACOTH Inverse hyperbolic cotangent.
ACSC Inverse cosecant.
ACSCH Inverse hyperbolic cosecant.
ASEC Inverse secant.
ASECH Inverse hyperbolic secant.
ASIN Inverse sine.
ASINH Inverse hyperbolic sine.
ATAN Inverse tangent.
Добавление ключа -all в команду lookfor, как, например,
lookfor -all
позволяет искать ключевое слово во всех записях справки, а не только в строке H1.

Help Desk

MATLAB Help Desk обеспечивает доступ к широкому диапазону справочной информации, хранящейся на диске или на CD вашей системы. Большая часть важной документации использует HTML (HyperText Markup Language) формат и доступна через браузеры Интернет, такие как Netscape или Microsoft Explorer. Запустить Help Desk можно на Pc или Mac, выбрав опцию Help Desk в меню Help или, на всех компьютерах, просто набрав команду
helpdesk
Все операторы и функции MATLAB имеют текущие справочные страницы в формате HTML, к которым можно обратиться через Help Desk. Эти страницы предоставляют больше деталей и примеров, чем обычные записи справки.

Также доступны HTML версии и других документов, включая это справочное пособие. Средство поиска, запущенное на вашей машине, может найти все текущие справочные материалы.

Команда doc

Если вы знаете имя конкретной функции, вы можете обратиться к её текущей справочной странице напрямую. Например, для получения справочной страницы для функции eval, наберите
doc eval
Команда doc сама запустит ваш Web браузер, если он еще не был запущен ранее.

Печать текущих справочных страниц

Версии текущих справочных страниц, как и большинство документации, также доступно в формате PDF (Portable Document Format) через Help Desk. Эти страницы обрабатываются с помощью Adobe's Acrobat reader.

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

Связь с MathWorks

Если ваш компьютер подключен в Интернет, Help Desk обеспечивает вам связь с MathWorks - домом MATLAB. вы можете использовать электронную почту для вопросов, предложений и сообщений о возможных ошибках. Вы можете также использовать Solution Search Engine на сайте MathWorks Web для запроса в новейшую базу данных по технической поддержке.

Среда MATLAB

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

Рабочее пространство

Рабочее пространство - это область памяти, доступная из командной строки MATLAB. Две команды, who и whos, показывают текущее содержание рабочего пространства.

Команда who выдает краткий список, а команда whos размер и используемую память.
Ниже представлен вывод, осуществленный командой whos, на рабочем пространстве, содержащем результаты из некоторых примеров этой книги. Он показывает различия в структуре данных MATLAB.

В качестве упражнения попробуйте найти сегмент кода, который соответствует каждой из ниже приведенных переменных.
whos

Name Size Bytes Class
A 4x4 128 double array
D 5x3 120 double array
M 10x1 3816 cell array
S 1x3 442 struct array
h 1x11 22 char array
n 1x1 8 double array
s 1x5 10 char array
v 2x5 20 char array

Grand total is 471 elements using 4566 bytes.
Для удаления всех существующих переменных из рабочего пространства MATLAB, введите
clear

Команда save

Команда save сохраняет содержание рабочего пространства в МАТ-файле, который может быть прочитан командой load в последующих сеансах работы MATLAB. Например,
save August17th
сохраняет содержание всего рабочего пространства в файле August17th.mat. Если нужно, вы можете сохранить только определенные переменные, указывая их имена после имени файла.
Обычно, переменные сохраняются в двоичном формате, который может быть быстро (и точно) прочитан MATLAB. Если же вы хотите использовать эти файлы вне MATLAB, вы можете указать другой формат.
-ascii Использует 8-значный текстовой формат.
-ascii -double Использует 16-значный текстовой формат.
-ascii -double -tabs Разделяет элементы массива табуляцией.
-v4 Создает файл для MATLAB 4.
-append Добавляет данные в существующий MAT-файл.
Когда вы сохраняете содержание рабочего пространства в текстовом файле, вы должны сохранять только одну переменную в данный момент. Если вы сохраняете более одной переменной, MATLAB создает текстовой файл, но вы не сможете загрузить его обратно.

Маршрут поиска

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

Вы можете заменить поведение использованием специальных директорий и поддиректорий.
Команда
path
показывает маршрут поиска на всех платформах. На Pc и Mac выберите опцию Set Path из меню File для просмотра и изменения маршрута.

Операции над дисковыми файлами

Команды dir, type, delete и cd осуществляют комплекс групповых операционных системных команд для манипуляций над файлами. Нижеприведенная таблица показывает, как эти команды соответствуют различным операционным системам.

MATLAB MS-DOS UNIX VAX/VMS
dir dir ls dir
type type cat type
delete del, erase rm delete
cd chdir cd set defalt

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

Команда diary

Команда diary создает дневник сеанса MATLAB в дисковом файле. Вы можете просмотреть и отредактировать конечный текстовой файл, используя любой текстовой процессор. Для создания файла под именем diary, который содержит все команды, которые вы используете, включая вывод на печать (кроме графического вывода), введите
diary
Для сохранения сеанса MATLAB в файле с определенным именем, используйте diary filename
При остановке записи сеанса работы, наберите diary off

Запуск внешних программ

Восклицательный знак означает выход из оболочки MATLAB. Он также означает, что последующая строка ввода будет командой к операционной системе (или Finder на Mac).

Это очень полезно для вызова утилит или запуска других программ без выхода из MATLAB. На VMS, например,
!edt magik.m
вызовет редактор, называемый edt, для файла magik.m. Когда вы выходите из внешней программы, операционная система возвращает управление MATLAB.

Подробнее о матрицах и массивах

Этот раздел расскажет вам больше о работе с матрицами и массивами, уделяя особое внимание
- Линейной алгебре
- Массивам
- Многомерным данным

Линейная алгебра

Термины матрица и массив часто неправильно используют как взаимозаменяемые. Более точно, матрица - это двумерный численный массив, используемый в линейных преобразованиях.

Математические операции, определенные на матрицах являются объектом линейной алгебры.
Магический квадрат Дюрера
A =
используется в некоторых примерах, которые позволяют почувствовать операции над матрицами в MATLAB. Вы уже видели операцию транспонирования матрицы, A'.

Добавление матрицы к её транспонированной дает симметричную матрицу.
a + A‘
ans =

32 8 11 17
8 20 17 23
11 17 14 26
17 23 26 2

Символ умножения, *, обозначает матричное произведение, включающее внутреннее произведение между строками и столбцами. Умножение матрицы на её транспонированную также дает симметричную матрицу.
A‘*A
ans =

378 212 206 360
212 370 368 206
206 368 370 212
360 206 212 378

Определитель этой частной матрицы оказывается равным нулю, означая, что эта матрица является сингулярной.
d = det(A) d =
0
Приведенная к строкам ступенчатая форма матрицы А выглядит следующим образом
R = rref(A)
R =
Поскольку заданная матрица является сингулярной, то она не имеет обратной. Если вы все-таки попытаетесь её определить
X = inv(A)
то получите предупреждение
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.175530e-017.
Ошибка округления препятствует алгоритму обращения матрицы при определении точной сингулярности. Но значение rcond, которое устанавливает условие оценки для обратной матрицы, имеет порядок eps, относительной точности числа с плавающей точкой, поэтому вычисление обратной матрицы не очень желательно.
Интересно найти собственные значения магического квадрата e = eig(A)
e =
34.0000
8.0000
-0.0000
-8.0000
Одно из собственных значений равно нулю, что является следствием сингулярности. Самое большое собственное значение равно 34, магической сумме.

Это происходит потому, что вектор, состоящий из всех единиц, является собственным вектором.
v = ones(4,1)
v =
1 1 1 1
A*v
ans = 34 34 34 34
Когда магический квадрат измеряется его магической суммой
P = A/34
результат будет бистохастической матрицей, у которой суммы в строках и столбцах все равны единицам.
р =
0.3824
0.2353
0.3529
0.0294
вероятность перехода в Марковском про
0.4706 0.0882 0.0588
0.1471 0.2941 0.3235
0.2647 0.1765 0.2059
0.1176 0.4412 0.4118
Такие матрицы представляют собой цессе. Повторные возведения матрицы в степень являются повторными шагами в этом процессе. Для нашего примера, пятая степень
РЛ5
равна

ans =
0.2507 0 0.2497 0 0.2500 0 0.2496 0
2495 0.2494
2501 0.2502
2498 0.2499
2506 0.2505
0.2504
0.2500
0.2503
0.2493
Из этого следует, что если k стремится к бесконечности, тогда все элементы в k-ой степени, Pk, стремятся к У.
В заключение, рассмотрим коэффициенты характеристического полинома poly(A)
ans =
1.0e+003 *
0.0010 -0.0340 -0.0640 2.1760 0.0000
Из чего следует, что характеристический полином
det(A-lI)
равен
I4 - 3413 - 6412 + 21761
Константа равна нулю, так как матрица является сингулярной, а коэффициент при третьей степени равен 34, так как матрица магическая!

Массивы

Когда мы выходим из мира линейной алгебры, матрицы становятся двумерными численными массивами. Арифметические операции на массивах производятся поэлементно.

Это означает, что суммирование и вычитание являются одинаковыми операциями для матриц и массивов, а умножение для них различно. MATLAB использует точку, или десятичную точку, как часть записи для операции умножения массивов.
Список операторов включает в себя:
суммирование
вычитание
поэлементное умножение поэлементное деление поэлементное левое деление поэлементное возведение в степень несопряженное матричное транспонирование
Если магический квадрат Дюрера умножить на себя по правилам умножения массивов
A.*A
результатом будет массив, содержащий квадраты целых чисел от 1 до 16 в необычном порядке
ans =

256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1

Операции над массивами полезны для создания таблиц. Пусть n - это вектор-столбец
n = (0:9)';
Тогда
pows = [n п.Л2 2.Лп]
создает таблицу квадратов и степеней двойки pows =

0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512

Элементарные математические функции работают с массивами поэлементно. Так
format short g x = (1:0.1:2)‘;
logs = [x log10(x)]
создает таблицу логарифмов
logs =

1 0
1. . 1 0. 041393
1. .2 0. 079181
1. .3 0 .11394
1. .4 0 .14613
1. . 5 0 .17609
1. .6 0 .20412
1. . 7 0 .23045
1. .8 0 .25527
1. . 9 0 .27875
2 0 .30103

Многомерные данные

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

Таким образом, элемент (i,j) - это i-ое наблюдение j-ой переменной.
В качестве примера рассмотрим набор данных с тремя переменными
- частота сердечных сокращений
- вес
- часы упражнений за неделю
Для пяти наблюдений, результирующий массив может выглядеть следующим образом
D =

72 134 3. .2
81 201 3. . 5
69 156 7. . 1
82 148 2. .4
75 170 1. .2

Первая строка содержит частоту сердечных сокращений, вес и часы упражнений для первого пациента, вторая строка содержит аналогичные данные для второго и т.д. Вы можете применить многие функции MATLAB для анализа данных к этому набору информации. Например, для того, чтобы получить среднее и среднеквадратичное отклонение для каждого столбца, надо
mu = mean(D), sigma = std(D) mu =
75.8 161.8 3.48
sigma =
5.6303 25.499 2.2107
Чтобы посмотреть список всех функций MATLAB для анализа данных, наберите
help datafun
Если вам нужно узнать о Statistics Toolbox, введите help stats

Скалярное расширение

Матрицы и скаляры могут комбинироваться различными путями. Например, скаляр вычитается из матрицы путем вычитания из каждого элемента. Среднее значение элементов для нашего магического квадрата равно 8.5, поэтому
B = A - 8.5
формирует матрицу, у которой суммы в столбцах равны нулю
B =

7.5 -5.5 -6.5 4.5
-3.5 1.5 2.5 -0.5
m
о
-2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5

sum(B)
ans =
0 0 0 0
Используя скалярное расширение, MATLAB указывает заданный скаляр всем индексам в диапазоне. Например,
B(1:2,2:3)=0
обнуляет часть матрицы B
в =
4.5 -0.5
3.5 -7.5

Логическая индексация

Логические вектора, созданные из логических операторов и операторов сравнения, могут быть использованы для ссылки на подмассивы. Предположим, что X обыкновенная матрица и L матрица того же размера, но содержащая логические операции.

Тогда X(L) задает элементы X, в которых элементы L ненулевые.
Этот вид индексации может быть осуществлен за один шаг указанием логической операции, такой как индексация выражения. Пусть вы имеете следующий набор данных.
x =
2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
NaN - это метка для недостающего наблюдения, как например ошибка при ответе на вопрос анкеты. Для того, чтобы убрать данные с логической индексацией, используйте finite(x), которая является истиной для всех конечных численных значений и ложью для NaN и Inf.
x = x(finite(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
Сейчас осталась одна наблюдаемая величина, 5.1, заметно отличающаяся от остальных, - это выброс. Последующие действия устраняют выбросы, в данном случае те элементы, для которых среднеквадратичное отклонение более, чем в три раза уклоняется от среднего.
x = x(abs(x-mean(x)) = 3*std(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
В качестве другого примера найдем положение простых чисел в магическом квадрате Дюрера, используя логическое индексирование и скалярное расширение, что обнулить все не простые числа.
A(~isprime(A))=0
A =

Функция find

Функция find определяет индексы массива элементов, с заданными логическими условиями. В наиболее простой форме, find возвращает вектор-столбец индексов.

Транспонируем его для получения вектора-строки. Например,
k = find(isprime(A))‘
выбирает положения, используя одномерное индексирование, простых чисел магического квадрата
k =
2 5 9 10 11 13
Покажем эти числа, как вектор-строку в порядке определенном функцией.
A(k)
ans =
5 3 2 11 7 13
Если вы используете к как индекс с левой стороны в операторе присваивания, то матричная структура сохраняется.

A(k) = NaN
A =
16 NaN NaN NaN
NaN 10 NaN 8
9 6 NaN 12
4 15 14 1

Управление потоками

MATLAB имеет пять видов структур управления потоками:



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