Введение в MATLAB
Краткая характеристика и история Matlab
Типичное использование MATLAB – это:
• математические вычисления
• создание алгоритмов
• моделирование
• анализ данных, исследования и визуализация
• научная и инженерная графика
• разработка приложений, включая создание графического интерфейса
«Классический» MATLAB был написан Кливом Моулером (университет Нью-Мехико) в 1977 г. Он представлял из себя интерактивную матричную лабораторию (MATrix LABoratory), на основе более ранних пакетов LINPACK и EISPACK - созданных в 1970-е гг. в США мощных стандартных библиотек математических подпрограмм, использовавшихся поначалу преимущественно в программах на языке FORTRAN. Начиная с версии Matlab 6.0, для матричных вычислений вместо функций из этих библиотек используются подпрограммы из пакета LAPACK. На некоторых классах задач это увеличило производительность в 2-3 раза.
Ввод матриц. Операции суммирования элементов, транспонирования и диагонализации матрицы.
MATLAB работает практически с одним видом объектов - с числовыми прямо-угольными матрицами, элементами которых могут быть в общем случае комплексные числа. Все переменные представляют собой матрицы. В некоторых случаях матрицы 1х1 интерпретируются как скаляры, а матрицы с одной строкой или одним столбцом интерпретируются как вектор-строка и вектор-столбец соответственно. В системе MATLAB матрицы могут быть введены разными способами:
• введены явно с помощью списка элементов;
• сгенерированы встроенными операторами или функциями;
• созданы в m-файлах;
• загружены из внешнего файла данных.
В этом пункте рассмотрим лишь первый способ. Например, любой из приведенных далее операторов
A=[1 2 3; 4 5 6; 7 8 9]
или
A=[1 2 3
4, 5, 6
7 8 9]
создает матрицу 3х3 и присваивает ее значение переменной.
Элементы внутри строки матрицы могут отделяться друг от друга не только пробелами, но и запятыми. При вводе чисел в экспоненциальной форме (например, 2.3e-9) не следует использовать пробелы.
Теперь рассмотрим второй способ - создадим магический квадрат функцией magic:
A=magic(4)
Убедимся, что сумма его элементов по столбцам [ sum(A) ], по строкам [ sum(A’)’ или sum(A, 2) ] и по главной диагонали [ sum(diag(A)) ] одна и та же.
В этом примере мы познакомились с операцией транспонирования матрицы A: A '(строго говоря A' будет комплексно-сопряжённой к A; для обычного транспонирования матрицы с комплексными элементами следует пользоваться операцией.', например, A. ').
diag(A) – функция выделения всех элементов главной диагонали.
Другая диагональ, называемая антидиагональю, не так важна математически, поэтому MATLAB не имеет специальной функции для неё. Но функция fliplr, зеркально отображает матрицу слева направо (аналогичная функция flipud делает отображение сверху вниз). Таким образом, мы можем найти сумму элементов антидиагонали:
sum(diag(fliplr(A)))
Если требуется выделить диагональ, находящуюся на k позиций выше (при k>0) или ниже (при k<0) главной, следует вызвать функцию diag(A,k), например
Diag(A,2), diag(A,-1)
Индексы
Индексы массивов (матриц, векторов) всегда начинаются со значения 1, а в ячейках памяти матрицы размещаются столбец за столбцом. Элемент в строке i и столбце j матрицы А обозначается A(i, j). Например, А(4,2) - это число в четвертой строке и втором столбце. Таким образом, можно вычислить сумму элементов в четвертом столбце матрицы А, набрав
А(1,4) + А(2,4) + А(3,4) + А(4,4),
хотя, как мы видели, это не самый лучший способ суммирования элементов отдельного столбца. Также возможно обращаться к элементам двумерной матрицы через один индекс, А(k). В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы. Таким образом, например, A(4,2)=A(8).
Если попытаться использовать значение элемента внематрицы, то MATLAB выдаст ошибку:
A(4,5) - Index exceeds matrix dimensions.
С другой стороны, если вы сохраняете значение вне матрицы, то размер матрицы увеличивается.
X=A;
Х(4,5) = 17
В матрице Х появится 5-й столбец с тремя первыми нулевыми элементами и с 4-м равным 17.
Подматрицы и использование оператора двоеточия
Вектора и подматрицы часто используются в системе MATLAB, чтобы получить компактную запись алгоритмов сложной обработки данных. Использование нотации с двоеточием (которая используется и для генерации векторов и подматриц) и векторов вместо индексов является ключом к эффективной манипуляции этими объектами. Творческое использование этих возможностей позволяет минимизировать число явных циклов (использование явных циклов замедляет работу MATLAB) и делает написанную программу простой и легко читаемой.
Оператор двоеточие (:) используется в различных формах. Выражение
1:5
эквивалентно выражению [ 1 2 3 4 5], т.е. даёт вектор-строку.
Для получения обратного порядка опишем приращение. Например,
100:-7:50
что дает
100 93 86 79 72 65 58 51
или
Pi/4:pi
что приведёт к
0 0.7854 1.5708 2.3562 3.1416
Индексное выражение, включающее двоеточие, может быть использовано для доступа к подматрицам. Например, A(1:k, j) - это первые k элементов j -го столбца матрицы А. А, например,
Sum(A(4,1:4))
вычисляет сумму четвертой строки. Но есть и лучший способ. Двоеточие само по себе обращается ко всем элементам в строке и столбце матрицы, а слово end к последней строке или столбцу. Например, A(:, 3) является третьим столбцом A, A(1:4,:) представляет собой первые четыре строки матрицы, а sum(A(:, end)) вычисляет сумму элементов в последнем столбце матрицы A.
Произвольный целый вектор может использоваться в качестве индекса подматрицы. Например, A(:,[2 4]) является матрицей из двух столбцов, 2-го и 4-го столбцов матрицы A;
оператор А = В(:,[1 3 2 4]) осуществляет перестановку столбцов в матрице B.
Такое индексирование, как и нотация с двоеточием, может использоваться с обеих сторон знака присваивания. Так, оператор A(:, [2 4 5]) = B(:,1:3) заменяет 2,4 и 5-й столбцы матрицы A на первые три столбца матрицы B. Заметим, что при выполнении такого оператора вся измененная матрица A будет выведена на экран.