d9e5a92d

Конюшенко В. - Начало работы с Matlab

Язык технических вычислений -это высокопроизводительный язык для технических расчетов. Он включает в себя вычисления, визуализацию и программирование в удобной среде, где задачи и решения выражаются в форме, близкой к математической. Типичное использование MATLAB - это:
- математические вычисления
- создание алгоритмов
- моделирование
- анализ данных, исследования и визуализация
- научная и инженерная графика
- разработка приложений, включая создание графического интерфейса
MATLAB - это интерактивная система, в которой основным элементом данных является массив. Это позволяет решать различные задачи, связанные с техническими вычислениями, особенно в которых используются матрицы и вектора, в несколько раз быстрее, чем при написании программ с использованием скалярных языков программирования, таких как Си или Фортран.
Слово MATLAB означает матричная лаборатория (matrix laboratory). MATLAB был специально написан для обеспечения легкого доступа к LINPACK и EISPACK, которые представляют собой современные программные средства для матричных вычислений.
MATLAB развивался в течении нескольких лет, ориентируясь на различных пользователей. В университетской среде, он представлял собой стандартный инструмент для работы в различных областях математики, машиностроении и науки.

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

Toolboxes применяются для обработки сигналов, систем контроля, нейронных сетей, нечеткой логики, вэйвлетов, моделирования и т.д.

Система MATLAB

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

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

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

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

Она включает средства для вызова программ из MATLAB (динамическая связь), вызывая MATLAB как вычислительный инструмент и для чтения-записи MAT-файлов.

О Simulink

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

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

Запуск MATLAB

Эта книга предназначена для начального освоения и изучения MATLAB. Она содержит некоторое количество примеров, которые могут быть запущены и отслежены в MATLAB.
Чтобы запустить MATLAB на PC или Мас, дважды щелкните на иконку MATLAB. Для запуска в системе UNIX напишите matlab в строке операционной системы.



Для выхода из MATLAB необходимо набрать quit в строке MATLAB.
Если вам необходимо получить дополнительную информацию, наберите help в строке MATLAB или выберите Help в меню на PC или Mac. Мы более подробно расскажем вам об этом позднее.

Матрицы и магические квадраты

Лучший способ начать работу с MATLAB это научиться обращаться с матрицами. В этой главе мы покажем вам, как надо это делать. В MATLAB матрица - это прямоугольный массив чисел.

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

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



файлах
Начтем с введения матрицы Дюрера как списка элементов. Вы должны следовать нескольким основным условиям:
- отделять элементы строки пробелами или запятыми
- использовать точку с запятой, ; , для обозначения окончания каждой строки
- окружать весь список элементов квадратными скобками, [ ].
Чтобы ввести матрицу Дюрера просто напишите:
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
MATLAB отобразит матрицу, которую мы ввели,
A =
Это точно соответствует числам на гравюре. Если мы ввели матрицу, то она автоматически запоминается средой MATLAB. И мы можем к ней легко обратиться как к А. Сейчас, когда мы имеем А в рабочем пространстве MATLAB, посмотрим, что делает её такой интересной.

Почему она называется магической?

Операции суммирования элементов, транспонирования и диа-гонализации матрицы

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

Давайте проверим это, используя 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(A)
ans =
16
10
7
1
А функция
sum(diag(A))
вызывает
ans =
34
Другая диагональ, называемая антидиагональю, не так важна математически, поэтому MATLAB не имеет специальной функции для неё. Но функция, которая вначале предполагалась для использования в графике, fliplr, зеркально отображает матрицу слева направо.
sum(diag(fliplr(A)))
ans =
34
Таким образом, мы проверили, что матрица на гравюре Дюрера действительно магическая, и научились использовать некоторые матричные операции MATLAB. В последующих разделах мы продолжим использовать эту матрицу для демонстрации дополнительных возможностей MATLAB.

Индексы

Элемент в строке i и столбце j матрицы А обозначается A(i,j). Например, A(4,2) - это число в четвертой строке и втором столбце.

Для нашего магического квадрата A(4,2) = 15. Таким образом, можно вычислить сумму элементов в четвертом столбце матрицы А, набрав
A(1,4) + A(2,4) + A(3,4) + A(4,4)
получим
ans =
34
Однако это не самый лучший способ суммирования отдельной строки.
Также возможно обращаться к элементам матрицы через один индекс, A(k). Это обычный способ ссылаться на строки и столбцы матрицы.

Но его можно использовать только с двумерными матрицами. В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы.
Так, для нашего магического квадрата, A(8) - это другой способ ссылаться на значение 15, хранящееся в A(4,2).
Если вы пытаетесь использовать значение элемента вне матрицы, MATLAB выдаст ошибку:
t=A(4,5)
??? Index exceeds matrix dimensions.
С другой стороны, если вы сохраняете значение вне матрицы, то размер матрицы увеличивается.
X=A;
X(4,5) = 17
X =

2 13 0
11 8 0
7 12 0
14 1 17

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

Двоеточие, : , - это один из наиболее важных операторов 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 0.7854 1.5708 2.3562 3.1416
Индексное выражение, включая двоеточие, относится к части матрицы. A(1:k j)
это первые k элементов j-го столбца матрицы А. Так sum(A(1:4,4))
вычисляет сумму четвертой строки. Но есть и лучший способ.

Двоеточие, само по себе, обращается ко всем элементам в строке и столбце матрицы, а слово end - к последней строке или столбцу. Так
sum(A(:,end))
вычисляет сумму элементов в последнем столбце матрицы А
ans =
34
Почему магическая сумма квадрата 4x4 равна 34? Если целые числа от 1 до 16 отсортированы в четыре группы с равными суммами, эта сумма должна быть
sum(1:16)/4
которая, конечно, равна
ans =
34

Функция magic

MATLAB на самом деле обладает встроенной функцией, которая создает магический квадрат почти любого размера. Не удивительно, что эта функция называется magic.
B=magic(4)
B =

16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1

Эта матрица почти та же матрица, что и на гравюре Дюрера, и она имеет все те же магические свойства. Единственное отличие заключается в том, что два средних столбца поменялись местами.

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

A=B(:,[1 3 2 4])
порядке 1, 3, 2, 4
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Почему Дюрер переупорядочил столбцы, по сравнению с тем, что использует MATLAB? Без сомнения, он хотел включить дату гравюры, 1514, в нижнюю часть магического квадрата.

Выражения

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

Переменные

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

Если переменная уже существует, MATLAB изменяет ее состав и если это необходимо выделяет дополнительную память. Например,
num_students = 25
создает матрицу Іхі с именем num_students и сохраняет значение 25 в ее единственном элементе.
Имена переменных состоят из букв, цифр или символов подчеркивания. MATLAB использует только первые 31 символ имени переменной. MATLAB чувствителен к регистрам, он различает заглавные и строчные буквы.

Поэтому A и a - не одна и та же переменная. Чтобы увидеть матрицу связанную с переменной, просто введите название переменной.

Числа

MATLAB использует принятую десятичную систему счисления, с необязательной десятичной точкой и знаками плюс-минус для чисел. Научная система счисления использует букву e для определения множителя степени десяти.

Мнимые числа используют i или j как суффикс. Некоторые примеры правильных чисел приведены ниже
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
Все числа для хранения используют формат long, определенный стандартом плавающей точки IEEE. Числа с плавающей точкой обладают ограниченной точностью - приблизительно 16 значащих цифр и ограниченным диапазоном -приблизительно от ІО-308 до ІО308 (Компьютер VAX использует другой формат чисел с плавающей точкой, но их точность и диапазон приблизительно те же).

Операторы

Выражения используют обычные арифметические операции и правила старшинства.
+ сложение
- вычитание
* умножение
/ деление
\ левое деление(описано в разделе Матрицы и Линейная Алгебра в книге
Using MATLAB) л степень
' комплексно сопряженное транспонирование
() определение порядка вычисления

Функции

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

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

В то время как другие функции, такие как gamma и sink, реализованы в М-файлах. Поэтому вы можете легко увидеть их код и, в случае необходимости, даже модифицировать его.
Несколько специальных функций предоставляют значения часто используемых констант.
3.14159265... мнимая единица, V-1 то же самое, что и i
~ /-,-52
относительная точность числа с плавающей точкой, 2
... .-,-1022
наименьшее число с плавающей точкой, 2 наибольшее число с плавающей точкой, (2-e)21023 бесконечность не число
pi i
j
eps
realmin realmax Inf NaN
Бесконечность появляется при делении на нуль или при выполнении математического выражения, приводящего к переполнению, т.е. к превышению realmax. Не число (NaN) генерируется при вычислении выражений типа 0/0 или Inf - Inf, которые не имеют определенного математического значения.
Имена функций не являются зарезервированными, поэтому возможно изменять их значения на новые, например
eps = 1.e-6
и далее использовать это значение в последующих вычислениях. Начальное значение может быть восстановлено следующим образом
clear eps

Выражения

Вы уже познакомились с некоторыми примерами использования выражений в MATLAB. Ниже приведено еще несколько примеров с результатами.
rho = (1+sqrt(5))/2
rho =
1.6180
a = abs(3+4i)
a =
5
z = sqrt(besselk(4/3,rho-i))
z =
0.3730 + 0.3214І
huge = exp(log(realmax))
huge =
1.7977e+308
toobig = pi*huge
toobig =
Inf

Работа с матрицами

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

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

MATLAB имеет четыре функции, которые создают основные матрицы:
zeros все нули
ones все единицы
rand равномерное распределение случайных элементов
randn нормальное распределение случайных элементов
Некоторые примеры:
Z = zeros(2,4)
Z =
F = 5*ones(3,3)
F =
N = fix(10*rand(1,10))
N =
9 2 6
randn(4,4)
-0.4326
-1.6656
0.1253
0.2877
-1.1465
1.1909
1.1892
-0.0376
0.3273
0.1746
-0.1867
0.7258
-0.5883
2.1832
-0.1364
0.1139

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

Команда 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, содержащую нашу матрицу.

М-файлы

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

Сохраните его под именем, заканчивающимся на .m.
Замечание. Для вызова текстового редактора на РС или Mac, выберите Open или New из меню File или нажмите соответствующую кнопку на панели инструментов.

Для обращения к текстовому редактору на UNIX используйте символ ! сразу за командой, которую вы используете в строке операционной системы.
Например, создадим файл, включающий следующие 5 строк:

A = [ .. 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
прочитает файл и создаст переменную А, содержащую исходную матрицу.

Объединение

Объединение - это процесс соединения маленьких матриц для создания больших. Фактически, вы создали вашу первую матрицу объединением её отдельных элементов.

Пара квадратных скобок - это оператор объединения. Например, начнем с матрицы А (магического квадрата 4х4) и сформируем
B = [A A+32; A+48 A+16]
Результатом будет матрица 8х8, получаемая соединением четырех подматриц
в =

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(B)
ans =
260 260 260 260 260 260 260 260
Однако, суммы в строках этой матрицы ( sum(B')' ) не все одинаковы. Необходимо провести дополнительные операции, чтобы сделать эту матрицу действительно магическим квадратом 8х8.

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

Вы можете удалять строки и столбцы матрицы, используя просто пару квадратных скобок. Рассмотрим
X = A;
Теперь удалим второй столбец матрицы X.
X(:,2) = []
Эта операция изменит X следующим образом
X =
Если вы удаляете один элемент матрицы, то результат уже не будет матрицей. Так выражение
X(1,2) = []
результатом вычисления выдаст ошибку. Однако использование одного индекса удаляет отдельный элемент или последовательность элементов и преобразует оставшиеся элементы в вектор-строку. Так
X(2:2:10) = []
выдаст результат X =
16 9 3 6 13 12 1

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

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

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

Команда format

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

Ниже представлены различные форматы чисел, используемые для отображения вектора x с компонентами различных величин.
x = [4/3 1.2345e-6]
format short
1.3333 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.234500000000000e-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
Если самый большой элемент матрицы больше ІО3 или самый маленький меньше ІО3, MATLAB применяет общий масштабный коэффициент для форматов short и long.
В добавление к командам format, рассмотренным выше format compact
убирает много пустых линий, появляющихся на выходе. Это позволяет вам видеть больше информации на экране.

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

Сокращение выходных данных

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

Это часто бывает нужно при создании больших матриц. Например,
A = magic(100);

Длинные командные строки

Если выражение не умещается на одной строке, используйте троеточие, а за ним 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. Повторное использование клавиши Т вызовет предыдущие строки.

Наберите несколько символов, и тогда клавиша Т найдет предыдущую строку, которая начинается с них.
Список доступных клавиш редактирования в командной строке отличается у разных компьютеров. Поэкспериментируйте, чтобы узнать, какие из нижесле-
дующих клавиш доступны на вашей машине. (Многие из этих знакомы пользователям редактора EMACS.)
клавиш будут

т ctrl-p Вызов предыдущей строки
і ctrl-n Вызов последующей строки
ctrl-b Движение назад на один символ
ctrl-f Движение вперед на один символ
Ctrl® ctrl-r Движение вправо на одно слово
Ctrl- ctrl-l Движение влево на одно слово
home ctrl-a Переход на начало строки
end ctrl-e Переход на конец строки
esc ctrl-u Очистка строки
del ctrl-d Удаление символа за курсором
backspace ctrl-h
ctrl-k
Удаление символа перед курсором Удаление до конца строки

Графика

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

Создание графика

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





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