y2 = sin(t-.25);
y3 = sin(t-.5);
plot( t, y, t, y2, t, y3)
Функция 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, ' \іі{Отметьіе нечетную симметрию} ' )
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 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 позволяет искать функции по ключевому слову. Она просматривает первую строку текста справки, называемую строкой 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.
MATLAB Help Desk обеспечивает доступ к широкому диапазону справочной информации, хранящейся на диске или на CD вашей системы. Большая часть важной документации использует HTML (HyperText Markup Language) формат и доступна через браузеры Интернет, такие как Netscape или Microsoft Explorer. Запустить Help Desk можно на Pc или Mac, выбрав опцию Help Desk в меню Help или, на всех компьютерах, просто набрав команду
helpdesk
Все операторы и функции MATLAB имеют текущие справочные страницы в формате HTML, к которым можно обратиться через Help Desk. Эти страницы предоставляют больше деталей и примеров, чем обычные записи справки.
Также доступны HTML версии и других документов, включая это справочное пособие. Средство поиска, запущенное на вашей машине, может найти все текущие справочные материалы.
Если вы знаете имя конкретной функции, вы можете обратиться к её текущей справочной странице напрямую. Например, для получения справочной страницы для функции eval, наберите
doc eval
Команда doc сама запустит ваш Web браузер, если он еще не был запущен ранее.
Версии текущих справочных страниц, как и большинство документации, также доступно в формате PDF (Portable Document Format) через Help Desk. Эти страницы обрабатываются с помощью Adobe's Acrobat reader.
Они воспроизводят внешний вид страниц после печати, полностью с шрифтами, графикой, с заданным форматом и рисунками. Это лучший способ получить печатные копии справочных материалов.
Если ваш компьютер подключен в Интернет, Help Desk обеспечивает вам связь с MathWorks - домом MATLAB. вы можете использовать электронную почту для вопросов, предложений и сообщений о возможных ошибках. Вы можете также использовать Solution Search Engine на сайте MathWorks Web для запроса в новейшую базу данных по технической поддержке.
Среда 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 |
Команда 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 создает дневник сеанса 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 |
378 | 212 | 206 | 360 |
212 | 370 | 368 | 206 |
206 | 368 | 370 | 212 |
360 | 206 | 212 | 378 |
Это происходит потому, что вектор, состоящий из всех единиц, является собственным вектором.
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 |
|
Когда мы выходим из мира линейной алгебры, матрицы становятся двумерными численными массивами. Арифметические операции на массивах производятся поэлементно.
Это означает, что суммирование и вычитание являются одинаковыми операциями для матриц и массивов, а умножение для них различно. MATLAB использует точку, или десятичную точку, как часть записи для операции умножения массивов.
Список операторов включает в себя:
суммирование
вычитание
поэлементное умножение поэлементное деление поэлементное левое деление поэлементное возведение в степень несопряженное матричное транспонирование
Если магический квадрат Дюрера умножить на себя по правилам умножения массивов
A.*A
результатом будет массив, содержащий квадраты целых чисел от 1 до 16 в необычном порядке
ans =
256 | 9 | 4 | 169 |
25 | 100 | 121 | 64 |
81 | 36 | 49 | 144 |
16 | 225 | 196 | 1 |
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 |
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 |
Матрицы и скаляры могут комбинироваться различными путями. Например, скаляр вычитается из матрицы путем вычитания из каждого элемента. Среднее значение элементов для нашего магического квадрата равно 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 |
Логические вектора, созданные из логических операторов и операторов сравнения, могут быть использованы для ссылки на подмассивы. Предположим, что 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 возвращает вектор-столбец индексов.
Транспонируем его для получения вектора-строки. Например,
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 имеет пять видов структур управления потоками: