Глава 1. Что такое MATLAB?

 

1.1. Немного истории.

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

• математические вычисления;

• создание алгоритмов;

• моделирование;

• анализ данных, исследования и визуализация;

• научная и инженерная графика;

• разработка приложений, включая создание графического интерфейса.

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

Слово MATLAB означает матричная лаборатория (matrix laboratory). MATLAB был специально написан для обеспечения легкого доступа к LINPACK и EISPACK, которые представляют собой современные программные средства для матричных вычислений.

MATLAB развивался в течение нескольких лет, ориентируясь на различных пользователей. В университетской среде, он представлял собой стандартный инструмент для работы в различных областях математики, машиностроении и науки. В промышленности, MATLAB — это инструмент для высокопродуктив­ных исследований, разработок и анализа данных.

В MATLAB важная роль отводится специализированным группам программ, называемых toolboxes. Они очень важны для большинства пользователей MATLAB, так как позволяют изучать и применять специализированные методы. Toolboxes - это всесторонняя коллекция функций MATLAB (М-файлов), кото­рые позволяют решать частные классы задач. Toolboxes применяются для обра­ботки сигналов, систем контроля, нейронных сетей, нечеткой логики, волновых пакетов (wavelets), моделирования и т.д.

 

1.2. Структура MATLAB'а.

Система MATLAB состоит из пяти основных частей:

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

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

Управляемая графика. Это графическая система MATLAB, которая включает в себя команды высокого уровня для визуализации двух- и трехмерных данных, обработки изображений, анимации и иллюстрированной графики. Она также включает в себя команды низкого уровня, позволяющие полностью редактиро­вать внешний вид графики, также как при создании графического Пользова­тельского Интерфейса (GUI) для MATLAB приложений.

Библиотека математических функций. Это обширная коллекция вычислительных алгоритмов от элементарных функций, таких как сумма, синус, косинус, ком­плексная арифметика, до более сложных, таких как обращение матриц, нахож­дение собственных значений, функции Бесселя, быстрое преобразование Фурье.

Программный интерфейс. Это библиотека, которая позволяет писать программы на Си и Фортране, которые взаимодействуют с MATLAB. Она включает средства для вызова программ из MATLAB (динамическая связь), вызывая MATLAB как вычислительный инструмент и для чтения-записи МАТ-файлов.

 

1.3. Что такое Simulink

Simulink, сопутствующая MATLAB программа, - это интерактивная система для моделирования нелинейных динамических систем. Она представляет собой сре­ду, управляемую мышью, которая позволяет моделировать процесс путем пере­таскивания блоков диаграмм на экране и их манипуляцией. Simulink работает с линейными, нелинейными, непрерывными, дискретными, многомерными сис­темами.

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

Real-Time Workshop - это программа, которая позволяет генерировать С-код из блоков диаграмм и запускать их на выполнение на различных системах реаль­ного времени.

 

1.4. Запуск MATLAB

Эта книга предназначена для начального освоения и изучения MATLAB. Она содержит некоторое количество примеров, которые могут быть запущены и от­слежены в MATLAB. Чтобы запустить MATLAB на PC дважды щелкните на иконку MATLAB. Для выхода из MATLAB необходимо набрать quit в строке MATLAB или использовать обычное сочетание клавиш Alt-F4. Если вам необходимо получить дополнительную информацию, наберите help в строке MATLAB или выберите Help в меню. Мы более подробно расскажем вам об этом позднее. Лучший способ начать работу с MATLAB — это научиться обращаться с мат­рицами. В этой главе мы покажем вам, как надо это делать. В MATLAB матрица - это прямоугольный массив чисел. Особое значение придается матрицам 1х1, которые являются скалярами, и матрицам, имеющим один столбец или одну строку, — векторам. MATLAB использует различные способы для хранения численных и не численных данных, однако вначале лучше всего рассматривать все данные как матрицы. MATLAB организован так, чтобы все операции в нем были как можно более естественными. В то время как другие программные язы­ки работают с числами как элементами языка, MATLAB позволяет вам быстро и легко оперировать с целыми матрицами.

Переменным присваивают числовые значения, печатая выражение непосредственно, например, печатая

> a = 1+2

Вы получите

а =

3

Ответ не будет отображен, если точка с запятой помещена в конце выражения, например, напечатайте a=1+2;.

Переменную можно определить, используя, эти операторы, числа или предварительно определенные переменные. Например, поскольку a уже определено, следующее выражение имеет силу

B = 2*a

Чтобы получить значение предварительно определенной переменной, напечатайте соответствующий символ:

B

даст

B =

6

Имеются несколько предопределенных переменных, которые могут использоваться в любое время, тем же самым способом как определяемые пользователем переменные:

i Sqrt (-1)

j Sqrt (-1)

pi 3.1416 ...

Например, вызов

Y = 2 * (1+4*j)

дает:

Y =

2.0000 + 8.0000i

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

abs модуль комплексного числа или абсолютное значение для вещественного

angle аргумент комплексного числа, в радианах

cos Функция косинуса, (предполагается, что аргумент выражен в радианах)

sin Функция синуса, (предполагается, что аргумент выражен в радианах)

exp показательная функция

Например, с y, определенным выше, вызывая

> C = abs (y)

получим: C =

8.2462

C = angle(y)

получим: C =

1.3258

Если a=3 как определено предварительно,

C = cos(a)

получим: C =

-0.9900

C = exp (a)

получим: C =

20.0855

Обратите внимание, что exp может использоваться с комплексным аргументом. Например, с y = 2+8i, как определено выше,

C = exp (y)

получим: C =

-1.0751 + 7.3104i

 

1.5. Ввод матриц

Вы можете вводить матрицы в MATLAB несколькими способами:

• вводить полный список элементов;

• загружать матрицы из внешних файлов;

• генерировать матрицы, используя встроенные функции;

• создавать матрицы с помощью ваших собственных функций в М-файлах.

Чтобы ввести матрицу можно:

• отделять элементы строки пробелами или запятыми

• использовать точку с запятой, ;, для обозначения окончания каждой строки

• окружать весь список элементов квадратными скобками, [ ]. Чтобы ввести матрицу Дюрера просто напишите:

А = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]

MATLAB отобразит матрицу, которую мы ввели:

А =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

Это точно соответствует числам на гравюре. Если мы ввели матрицу, то она ав­томатически запоминается средой MATLAB. И мы можем к ней легко обра­титься как к А. Сейчас, когда мы имеем А в рабочем пространстве MATLAB, посмотрим, что делает её такой интересной. Почему она называется магиче­ской?

 

1.6. Операции над матрицами

Вы возможно уже знаете, что особые свойства магического квадрата связаны с различными способами суммирования его элементов. Если вы берёте сумму элементов вдоль какой-либо строки или столбца, или вдоль какой-либо из двух главных диагоналей, вы всегда получите одно и тоже число. Давайте проверим это, используя MATLAB. Первое утверждение, которое мы проверим -

sum (A)

MATLAB выдаст ответ

ans =

34 34 34 34

Когда выходная переменная не определена, MATLAB использует переменную ans, коротко от answer - ответ, для хранения результатов вычисления. Мы под­считали вектор-строку, содержащую сумму элементов столбцов матрицы А. Действительно, все столбцы имеют одинаковую сумму, магическую сумму, равную 34. А как насчет сумм в строках? MATLAB предпочитает работать со столбцами матрицы, таким образом, лучший способ получить сумму в строках — это транс­понировать нашу матрицу, подсчитать сумму в столбцах, а потом транспониро­вать результат. Операция транспонирования обозначается апострофом или оди­нарной кавычкой. Она зеркально отображает матрицу относительно главной диагонали и меняет строки на столбцы. Таким образом

A'

вызывает ответ

ans =

16 5 9 4

3 10 6 15

2 11 7 14

13 8 12 1

А выражение

sum(A') '

вызывает результат вектор-столбец, содержащий суммы в строках

ans =

34

34

34

34

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

diag(B)

ans =

16

11

6

1

А строка

sum (diag (А) )

вызывает

ans =

34

Другая диагональ, называемая побочной, не так важна математически, поэтому MATLAB не имеет специальной функции для неё. А функция flipir зеркально отображает матрицу слева направо. Таким образом,

fliplr(A)

ans =

13 3 2 16

8 10 11 5

12 6 7 9

1 15 14 4

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

 

1.7. Индексы

Элемент в строке i и столбце j матрицы А обозначается A(i,j). Например, А(4,2) - это число в четвертой строке и втором столбце. Для нашего магического квад­рата А(4,2) =15. Таким образом, можно вычислить сумму элементов в четвер­том столбце матрицы А, набрав

А(1,4) + А(2,4) + А(3,4) + А(4,4)

получим

ans =

34

Однако это не самый лучший способ суммирования отдельной строки. Также возможно обращаться к элементам матрицы через один индекс, A(k). Это обычный способ ссылаться на строки и столбцы матрицы. Но его можно ис­пользовать только с двумерными матрицами. В этом случае массив рассматри­вается как длинный вектор, сформированный из столбцов исходной матрицы. Так, для нашего магического квадрата, А(8) - это другой способ ссылаться на значение 15, хранящееся в А(4,2). Если вы пытаетесь использовать значение элемента вне матрицы, MATLAB вы­даст ошибку:

t=A(4,5) ??? Index exceeds matrix dimensions.

С другой стороны, если вы сохраняете значение вне матрицы, то размер матри­цы увеличивается.

Х=А;

Х(4,5) = 17;

X =

16 2 3 13 0

5 11 10 8 0

9 7 6 12 0

4 14 15 1 17

 

1.8. Оператор двоеточия

Двоеточие, ":" , - это один из наиболее важных операторов MATLAB. Он прояв­ляется в различных формах. Выражение

1:10

- это вектор-строка, содержащая целые числа от 1 до 10

1 2 3 4 5 6 7 8 9 10

Для получения обратного отсчета, опишем приращение. Например

100:-7:50

что дает

100 93 86 79 72 65 58 51

или

0:pi/4:pi

что приводит к

О 0.7854 1.5708 2.3562 3.1416

Индексное выражение, включая двоеточие, относится к части матрицы.

A(l:k,j) - это первые k элементов j-го столбца матрицы А. Так что

sum(A( 1:4,4))=34.

 

1.9. Генерирование матриц

MATLAB имеет четыре функции, которые создают основные матрицы:

zeros(m,n) mxn - матрица из нулей

ones(m,n) mxn - матрица из единиц

rand(m,n) mxn - матрица из равномерного распределенных на [0,1] случайных чисел

randn(m,n) mxn - матрица - то же с нормальным распределением.

Некоторые примеры:

Z = zeros(2,4)

Z =

0 0 0 0

0 0 0 0

F = 5*ones(3,3)

F =

5 5 5

5 5 5

5 5 5

N = fix(10*rand(l,10))

N =

9 2 6 4 8 7 4 0 8 4

R = randn(4,4)

R=

-0.4326 -1.1465 0.3273 -0.5883

-1.6656 1.1909 0.1746 2.1832

0.1253 1.1892 -0.1867 -0.1364

0.2877 -0.0376 0.7258 0.1139

 

1.10. Загрузка матриц

Команда load считывает двоичные файлы, содержащие матрицы, созданные в MATLAB ранее, или текстовые файлы, содержащие численные данные. Тексто­вые файлы должны быть сформированы в виде прямоугольной таблицы чисел, отделенных пробелами, с равным количеством элементов в каждой строке. На­пример, создадим вне MATLAB текстовой файл, содержащий 4 строки:

16.0 3.0 2.0 13.0

5.0 10.0 11.0 8.0

9.0 6.0 7.0 12.0

4.0 15.0 14.0 1.0

Сохраним этот файл под именем magik.dat. Тогда команда

load magik.dat

прочитает этот файл и создаст переменную magik, содержащую нашу матрицу.

Объединение - это процесс соединения маленьких матриц для создания боль­ших. Фактически, вы создали вашу первую матрицу объединением её отдель­ных элементов. Пара квадратных скобок - это оператор объединения. Напри­мер, начнем с матрицы А (магического квадрата 4х4) и сформируем

В = [А А+32; А+48 А+16]

Результатом будет матрица 8х8, получаемая соединением четырех подматриц

B =

16 2 3 13 48 34 35 45

5 11 10 8 37 43 42 40

9 7 6 12 41 39 38 44

4 14 15 1 36 46 47 33

64 50 51 61 32 18 19 29

53 59 58 56 21 27 26 24

57 55 54 60 25 23 22 28

52 62 63 49 20 30 31 17

Это матрица лишь наполовину является магической. Её элементы представляют собой комбинацию целых чисел от 1 до 64, а суммы в столбцах точно равны значению для магического квадрата 8х8.

sum (В)

ans =

260 260 260 260 260 260 260 260

Однако, суммы в строках этой матрицы ( sum(B')' ) не все одинаковы. Необхо­димо провести дополнительные операции, чтобы сделать эту матрицу действи­тельно магическим квадратом 8х8.

 

1.11.Удаление строк и столбцов

Вы можете удалять строки и столбцы матрицы, используя просто пару квадратных скобок. Пусть

Х = А;

Теперь удалим второй столбец матрицы X.

X(:,2) = [].

Эта операция изменит Х следующим образом

X =

16 3 13 5

10 8 9 6

12 4 15 1

Если вы удаляете один элемент матрицы, то результат уже не будет матрицей. Так выражение

Х(1,2)=[]

результатом вычисления выдаст ошибку. Однако использование одного индекса удаляет отдельный элемент или последовательность элементов и преобразует оставшиеся элементы в вектор-строку. Так

X(2:2:10) = []

выдаст результат

X =

16 9 3 6 13 12 1

 

1.12. Выражения

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

• переменные

• числа

• операторы

• функции

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

num_students = 25

создает матрицу 1х1 с именем num_students и сохраняет значение 25 в ее един­ственном элементе. Имена переменных состоят из букв, цифр или символов подчеркивания. MATLAB использует только первые тридцать один символ для имени переменной. MATLAB чувствителен к регистрам, он различает заглавные и строчные буквы. Поэтому А и а - не одна и та же переменная. Чтобы увидеть матрицу, связанную с пере­менной, просто введите название переменной. Числа. MATLAB использует принятую десятичную систему счисления, с необязатель­ной десятичной точкой и знаками плюс-минус для чисел. Научная система счисления использует букву е для определения множителя степени десяти. Мнимые числа используют i или j как суффикс. Некоторые примеры правиль­ных чисел приведены ниже

3

-99

0.0001

9.6397238

1.60210е-20

6.02252е23 i

1i

-3.14159j

3e5i

Все числа для хранения используют формат long, определенный стандартом плавающей точки IEEE. Числа с плавающей точкой обладают ограниченной точностью - приблизительно 16 значащих цифр и ограниченным диапазоном -приблизительно от 10308 до 10308

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

Функции. MATLAB предоставляет большое количество элементарных математических функций, таких как abs, sqrt, exp, sin. Вычисление квадратного корня или лога­рифма отрицательного числа не является ошибкой: в этом случае результатом является соответствующее комплексное число. MATLAB также предоставляет и более сложные функции, включая Гамма функцию и функции Бесселя. Боль­шинство из этих функций имеют комплексные аргументы. Чтобы вывести спи­сок всех элементарных математических функций, наберите

help elfun. Для вывода более сложных математических и матричных функций, наберите, например, help specfun или help elmat соответственно. Некоторые функции, такие как sqrt и sin, - встроенные. Они являются частью MATLAB, поэтому они очень эффективны, но их вычислительные детали труд­но доступны. В то время как другие функции, такие как gamma и sink, реализо­ваны в М-файлах. Поэтому вы можете легко увидеть их код и, в случае необхо­димости, даже модифицировать его.

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

pi 3.14159265...

i мнимая единица ,

j то же самое, что и i

eps относительная точность числа с плавающей точкой,

realmin наименьшее число с плавающей точкой,

realmax наибольшее число с плавающей точкой,

Inf бесконечность

NaN не число

Бесконечность появляется при делении на нуль или при выполнении математи­ческого выражения, приводящего к переполнению, т.е. к превышению realmax. Не число (NaN) генерируется при вычислении выражений типа 0/0 или Inf- Inf, которые не имеют определенного математического значения.

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

eps = l.e-6

и далее использовать это значение в последующих вычислениях. Начальное значение может быть восстановлено следующим образом

clear eps

Выражения Вы уже познакомились с некоторыми примерами использования выражений в MATLAB. Ниже приведено еще несколько примеров с результатами.

rho = (l+sqrt(5))/2

rho =

1.6180

a = abs(3+4i)

a =

5

z = sqrt(besselk(4/3,rho-i))

z =

0.3730 + 0.32141

huge = exp(log(realmax))

huge = 1.7977e+308

toobig = pi*huge

toobig = Inf

Бинарные операции, которые должны быть выполнены " элемент за элементом " отмечают при помощи символа, ". " предшествующего знаку операции. Например, чтобы получить вектор x, который содержит элементы x (t) = tcos (t) в определенных точках во времени. Вы можете просто соединить вектор t с векторным cos(t) знаком умножения с предшествующей точкой:

t = 0:10; x = t.*cos (t).

 

1.13. М-файлы

Вы можете создавать свои собственные матрицы, используя М-файлы, которые представляют собой текстовые файлы, содержащие код MATLAB. Просто соз­дайте файл с выражением, которое вы хотите написать в командной строке MATLAB. Сохраните его под именем c расширением m. В качестве примера М-файла, который определяет функцию, создайте файл в вашем рабочем каталоге, названном yplusx.m, который содержит следующие команды:

function z = yplusx(y,x)

z = y + x;

Следующие команды, напечатанные в командном окне MATLAB'а демонстрируют, как этот М-файл используется:

x = 2;

y = 3;

z = yplusx(y,x)

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

for k=1:10,

x(k) = cos(k);

end

Это создает 1x10 вектор x содержащий косинусы положительных целых чисел от 1 до 10. Эта операция выполнена более эффективно с командами k = 1:10; X = cos(k); которые использует функцию векторного присваивания вместо for-цикла. Условный оператор может использоваться, чтобы определить условные инструкции. Пример

if(a <= 2),

b = 1;

elseif(a >=4)

b = 2;

else

b = 3;

end

Допустимые сравнения между выражениями таковы : > =, <=, =, <,>, ==, и ~ =.

Дополнительная информация в М-файл, определяемая пользователем, может быть введена при помощи команды input. Например, предположим, что Вы хотите выполнить М-файл с различными значениями переменной T. Следующая командная строка в пределах М-файла определяет значение:

T = input('Input the value of T: ')

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

Замечание. Для вызова текстового редактора на PC, выберите Open или New из меню File или нажмите соответствующую кнопку на панели инст­рументов. Возможно также управление доступом к редактору с помощью командной строки edit [<имя_файла>].

Например, создадим файл, включающий следующие 5 строк:

А=[...

16.0 3.0 2.0 13.0

5.0 10.0 11.0 8.0

9.0 6.0 7.0 12.0

4.0 15.0 14.0 1.0 ];

Сохраним его под именем magik.m. Тогда выражение

magik

прочитает файл и создаст переменную А, содержащую исходную матрицу.

 

1.14. Командное окно

До сих пор, мы использовали только командную строку MATLAB, печатая ко­манды и выражения и наблюдая результаты. В этой главе описано несколько способов изменения внешнего вида командного окна. Если ваша система позво­ляет вам выбирать шрифт, то мы рекомендуем использовать шрифты с фикси­рованной шириной, такие как Fixedsys или Courier, для обеспечения правильно­го межстрочного интервала.

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

х = [4/3 1.2345е-6]

format short

0.0000

format short e

1.3333e+000 1.2345e-006

format short g 1.3333 1.2345e-006

format long

1.33333333333333 0.00000123450000

format long e

1.333333333333333e+000 1.23450000000000Oe-006

format long g

1.33333333333333 1.2345e-006

format bank

1.33 0.00

format rat

4/3 1/810045

format hex

3ff5555555555555 3eb4b6231abfd271

Если самый большой элемент матрицы больше 103 или самый маленький мень­ше , MATLAB применяет общий масштабный коэффициент для форматов short и long. В добавление к командам format, рассмотренным выше

format compact убирает много пустых линий, появляющихся на выходе. Это позволяет вам ви­деть больше информации на экране. Если вы хотите изменить контроль над форматом выходных данных, используйте функции sprintf и fprintf.

Сокращение выходных данных Если вы наберете выражение и нажмете Return или Enter, MATLAB автомати­чески выведет результат на экран. Однако если в конце строки вы поставите точку с запятой, MATLAB проведет вычисления, но не отобразит их. Это часто бывает нужно при создании больших матриц.

Длинные командные строки. Если выражение не умещается на одной строке, используйте троеточие, а за ним Return или Enter, для обозначения того, что выражение продолжается на сле­дующей строке. Например

s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ...

-1/8 + 1/9 - 1/10 + 1/11 - 1/12;

Пробелы вокруг знаков =, +, - не обязательны, но улучшают читаемость текста. Редактор командной строки Различные стрелки и управляющие клавиши на вашей клавиатуре позволяют вам вызывать, редактировать и многократно использовать команды, набранные ранее. Например, предположим, что вы допустили ошибку при вводе

rho = (1 + sqt(5))/2

Вы ошиблись в написании sqrt. MATLAB ответит вам предупреждением Undefined function or variable 'sqt'.

Вместо того, чтобы заново набирать всю строку, просто нажмите клавишу . Тогда на экране изобразится ошибочная команда. Используйте клавишу <— для перемещения курсора и вставки пропущенной буквы r. Повторное использова­ние клавиши вызовет предыдущие строки. Наберите несколько символов, и тогда клавиша найдет предыдущую строку, которая начинается с них. Список доступных клавиш редактирования в командной строке отличается у разных компьютеров. Поэкспериментируйте, чтобы узнать, какие из клавиш доступны на вашей машине.

 

1.15. Графика

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

Функция plot имеет различные формы, связанные с входными параметрами, на­пример plot(y) создает кусочно-линейный график зависимости элементов у от их индексов. Если вы задаете два вектора в качестве аргументов, plot(x,y) создаст график зависимости у от х. Например, для построения графика значений функции sin от нуля до 2л, сделаем следующее

t = 0:pi/5:2*pi;

y = sin(t) ;

plot (t,y), grid

Вызов функции plot с многожественными парами х-у создает многочисленные графики. MATLAB автоматически присваивает каждому графику свой цвет (ис­ключая случаи, когда это делает пользователь), что позволяет различать задан­ные наборы данных. Например, следующие три строки отображают график близких функций, и каждой кривой соответствует свой цвет:

y2 = sin(t-.25);

y3 = sin(t-.5);

plot( t, y, t, y2, t, y3),grid

Возможно изменение цвета, стиля линий и маркеров, таких как знаки плюс или кружки, следующим образом

plot(x, у, 'цвет_стиль_маркер')

гду цвет_стиль_маркер это одно-, двух- или трехсимвольная строка (заключенная в одинарные кавычки), составленная из типов цвета, стиля линий и маркеров:

• Символы, относящие к цвету: 'c', 'm', 'у', 'г', 'g', 'b, 'w' и 'k'. Они обозна­чают голубой, малиновый, желтый, красный, зеленый, синий, белый и черный цвета соответственно.

• Символы, относящиеся к типу линий: ' - ' для сплошной, ' - - ' для разрыв­ной, '; ' для пунктирной, ' -. ' для штрихпунктирной линий и ' none ' для её от­сутствия.

• Наиболее часто встречающиеся маркеры '+ ', ' о ', ' * ' и ' х '.

Например, выражение plot(t,y,'y:+') строит черный пунктирный график и помещает маркеры ' + 'в каждую точку данных. Если вы определяете только тип маркера, но не определяете тип стиля линий, то MATLAB выведет только маркеры.

 

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

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

figure

Для того, чтобы сделать существующее окно текущим –

figure(n)

где n - это номер в заголовке окна. В этом случае результаты всех последующих команд будут выводиться в это окно.

Добавление кривых на существующий график. Команда hold позволяет добавлять кривые на существующий график. Когда вы набираете

hold on

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

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

subplot(m,n,p)

разбивает окно изображений на матрицу m на п подграфиков и выбирает р-ый подграфик текущим. Графики нумеруются вдоль первого в верхней строке, по­том во второй и т.д.

1.16.1. Пример.

Получить графические представления данных наблюдения периодических процессов при различных соотношениях составляющих частот и представить графические данные в четырех разных подобластях окна:

om1=1; a1=5; % Частота и амплитуда медленной компоненты

om2=9; a2=1; % Частота и амплитуда быстрой компоненты

N=64; % Длина блока данных

delta_t=0.05; % Шаг по оси времен

allt=(N-1)*delta_t; % Длительность наблюдения

t=0:delta_t:allt; % Вектор значений времени

ts1=a1*sin(2*pi*om1*(t+randn))'; % Вектор значений амплитуд медленнной компоненты

ts2=a2*sin(2*pi*om2*(t+randn))'; % Вектор значений амплитуд быстрой компоненты

ts1s=ts1+ts2; % Вектор значений амплитуд результирующего процесса

subplot(221), plot(t,ts1), grid, title('Медленная')

subplot(222), plot(t,ts2), grid,title('Быстрая')

subplot(223), plot(t,ts1s), grid,title('Сумма')

subplot(224), plot(t,[ts1,ts2,ts1s]), grid,title('Все 3 кривые')

Мнимые и комплексные данные. Если аргумент функции plot комплексное число, то мнимая часть игнорируется, за исключением случая, когда комплексный аргумент один. Для этого специального случая происходит построение графика зависимости реальной части аргумента от мнимой. Поэтому

plot(Z)

где Z комплексный вектор или матрица, эквивалентно plot(real(Z) ,imag(Z))

Например,

t = 0:pi/l0:2*pi;

plot(exp(i*t),'-о')

отобразит двадцатисторонний многоугольник с маленькими кружками на вершинах.

Управление осями. Функция axis имеет несколько возможностей для настройки масштаба, ориента­ции и коэффициента сжатия. Обычно MATLAB находит максимальное и минимальное значение и выбирает соответствующий масштаб и маркитирование осей. Функция axis заменяет значения по умолчанию предельными значения, вводимыми пользователем.

axis( [xmin xmax ymin ymax])

В функции axis можно также использовать ключевые слова для управления внешним видом осей. Например

axis square

создает х и у оси равной длины, а

axis equal

создает отдельные отметки приращений для х и у осей одинаковой длины. Так, функция

plot(exp(i*t))

следующая либо за axis square, либо за axis equal превращает овал в правильный круг.

axis auto

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

axis on

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

axis off выключает обозначения осей и метки промежуточных делений.

grid off выключает сетку координат, а

grid on включает её заново.

Подписи к осям и заголовки. Функции xlabel, ylabel, zlabel добавляют подписи к соответствующим осям, функция title добавляет заголовок в верхнюю часть окна, а функция text встав­ляет текст в любое место графика. Использование синтаксических соглашений, принятых в ТЕХ, позволяет применять греческие буквы, математические символы и различные шрифты. Следующий пример демонстрирует эту возможность.

loo=20;

t = -pi:pi/loo:pi;

y = sin(t);

plot (t, y)

grid

axis ([-pi pi -1 1])

xlabel( ' -\pi \leq \itt \leq \pi ' )

ylabel( ' sin(t) ' )

title( ' График функции sin ' )

text(-l, -1/3, ' \it{Oтметьте нечетную симметрию} ' )

Печать графики.. Опция Print в меню File и команда print печатают графику MATLAB. Меню Print вызывает диалоговое окно, которое позволяет выбирать общие стандарт­ные варианты печати. Команда print обеспечивает большую гибкость при выво­де выходных данных и позволяет контролировать печать из М-файлов. Резуль­тат может быть послан прямо на принтер, выбранный по умолчанию, или со­хранен в заданном файле. Возможно широкое варьирование формата выходных данных, включая использование PostScript.

 

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

Есть несколько способов получить текущую документацию по функциям MATLAB.

• Команда help

• Окно справки

• MATLAB Help Desk

• Текущие справочные страницы

• Связь с The MathWorks, Inc.

Команда help

Команда help - это самый основной способ определения синтаксиса и поведения отдельных функций. Информация отображается прямо в командном окне. Например

help randn

выдаст

S = RANDN('state') is a 2-element vector containing the current state

……………………………………………………………………….

RANDN('state',J) and RANDN('state',S) cause the MATLAB 5 generator

to be used.

See also RAND, SPRAND, SPRANDN, RANDPERM.

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

Все функции MATLAB организованы в логические группы и структура дирек­торий MATLAB базируется на этом группировании. Например, все функции линейной алгебры находятся в директории matfun. Чтобы вывести имена всех функций в этой директории с кратким описанием, надо набрать

help matfun

Ответ будет содержать пару экранов текста типа:

Matrix functions - numerical linear algebra.

Matrix analysis.

norm - Matrix or vector norm.

……………………………………………..

Linear equations.

\ and / - Linear equation solution; use "help slash".

inv - Matrix inverse.

……………………………………………..

Eigenvalues and singular values.

eig - Eigenvalues and eigenvectors.

svd - Singular value decomposition.

……………………………………………..

Matrix functions.

expm - Matrix exponential.

……………………………………………..

Factorization utilities

qrdelete - Delete column from QR factorization.

……………………………………………..

Matrix functions - numerical linear algebra.

Matrix analysis.

norm - Matrix or vector norm.

……………………………………………..

Команда

help matlab\general ( Общецелевые комапнды) выдаст результат типа

General information

help - On-line help, display text at command line.

helpwin - On-line help, separate window for navigation.

……………………………………………..

Managing the workspace.

who - List current variables.

whos - List current variables, long form.

……………………………………………..

Managing commands and functions.

what - List MATLAB-specific files in directory.

type - List M-file.

……………………………………………..

Managing the search path

path - Get/set search path.

addpath - Add directory to search path.

……………………………………………..

Controlling the command window.

echo - Echo commands in M-files.

more - Control paged output in command window.

diary - Save text of MATLAB session.

……………………………………………..

Operating system commands

cd - Change current working directory.

copyfile - Copy a file.

……………………………………………..

Debugging M-files.

debug - List debugging commands.

dbstop - Set breakpoint.

……………………………………………..

Profiling M-files.

profile - Profile function execution time.

help matlab\ops Operators and special characters.

Окно справки MATLAB'а появляется на PC после выбора опции Help Window в меню Help или нажатием кнопки вопроса на панели инструмен­тов. Эта же операция может быть выполнена при наборе команды

helpwin

Для вывода окна справки по отдельным разделам, наберите helpwin topic

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

lookfor

позволяет искать функции по ключевому слову. Она просмат­ривает первую строку текста справки, называемую строкой HI, для каждой функции MATLAB и возвращает строки HI, содержащие заданное ключевое слово. Например, MATLAB не имеет функции с именем inverse. Поэтому ответ на запрос

help inverse

будет

inverse.m not found. В то время как

lookfor inverse

найдет множество согласованных ответов. В зависимости от того, какие tool­boxes вы установили, вы получите соответствующие записи. Например

INVHILB Inverse Hilbert matrix.

ACOS Inverse cosine.

ACOSH Inverse hyperbolic cosine.

и т. д.

Добавление ключа -all в команду lookfor, как, например,

lookforall inverse

позволяет искать ключевое слово во всех записях справки, а не только в строке HI.

Help Desk обеспечивает доступ к широкому диапазону справочной информации, хранящейся на диске или на CD вашей системы. Большая часть важной документации использует HTML (HyperText Markup Language) формат и доступна через браузеры Интернет, такие как Netscape или Microsoft Explorer. Запустить Help Desk можно на PC, выбрав опцию 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. Они воспроизводят внешний вид страниц после печати, полностью с шрифтами, графикой, с задан­ным форматом и рисунками. Это лучший способ получить печатные копии справочных материалов.

 

1.18. Среда MATLAB

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

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

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

whos

Name Size Bytes Class

A 4х4 128 double array D 5х3 120 double array M 10х1 3816 cell array S 1х3 442 struct array h 1х11 22 char array n 1х1 8 double array s 1х5 10 char array v 2х5 20 char array

Grand total is 471 elements using 4566 bytes.

Для удаления всех существующих переменных из рабочего пространства MATLAB, введите

clear

Команда save Команда save сохраняет содержание рабочего пространства в МАТ-файле, кото­рый может быть прочитан командой load в последующих сеансах работы MATLAB. Например,

save August17th

сохраняет содержание всего рабочего пространства в файле Augustl7th.mat. Ес­ли нужно, вы можете сохранить только определенные переменные, указывая их имена после имени файла. Обычно, переменные сохраняются в двоичном формате, который может быть быстро (и точно) прочитан MATLAB. Если же вы хотите использовать эти фай­лы вне MATLAB, вы можете указать другой формат.

save August17th -ascii Использует 8-значный текстовой формат.

save August17th -ascii -double Использует 16-значный текстовой формат.

save August17th -ascii -double -tabs Разделяет элементы массива табуляцией.

save August17th -v4 Создает файл для MATLAB 4.

save August17th -append Добавляет данные в существующий МАТ-файл.

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

 

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

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

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

 

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

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

MATLAB

MS-DOS

dir

dir

type

type

delete

del erase

cd

chdir

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

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

diary

Для сохранения сеанса MATLAB в файле с определенным именем, используйте

diary filename

При остановке записи сеанса работы, наберите

diary off

Запуск внешних программ. Восклицательный знак означает выход из оболочки MATLAB. Он также озна­чает, что последующая строка ввода будет командой к операционной системе. Это очень полезно для вызова утилит или запуска других программ без выхода из MATLAB. Когда вы выходите из внешней программы, операционная система возвращает управление MATLAB.

 

Оглавление