Подматрицы и использование оператора двоеточия




Введение в 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 будет выведена на экран.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: