Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


ОПЕРАЦИИ С ВЕКТОРАМИ И МАТРИЦАМИ



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

 

Рассмотрим способы построения матриц. В следующих примерах вектор–столбец является матрицей размером 3x1, вектор–строка является матрицей размером 1x3, а скаляр матрицей 1x1:

u = [3; 1; 4]

u =

v = [2 0 -1]

v =

2 0 -1

s = 7

s =

 

Задание матрицы требует указания нескольких строк. Каждая строка оканчивается точкой с запятой. Так, ввод

 

M = [1 2 3; 4 5 6; 7 8 9];

задает квадратную матрицу, которую можно вывести, набрав в командной строке M и нажав клавишу Enter:

M=

1 2 3

4 5 6

7 8 9

 

В качестве элементов матриц можно использовать арифметические выражения, например:

 

V = [2+3*5 exp(2) sqrt(2)]

V =

17.0000 7.3891 1.4142

Для указания отдельного элемента матрицы используются индексы. Элемент в строке I и столбце J матрицы A обозначается A(I, J). Если элементу A(2, 3) надо присвоить значение 10, следует ввести команду:

A(2, 3)=10;

 

Выражение M(I) с одним индексом дает доступ к элементам матрицы развернутым в один столбец. В этом случае массив рассматривается как длинный вектор, сформированный из столбцов исходной матрицы. Так, для рассмотренного ранее примера с матрицей M, M(4)– это другой способ ссылаться на значение 2, хранящееся в M(1, 2).

Если попытаться использовать значение элемента вне матрицы, MATLAB выдаст ошибку:

 

M(4, 2)

??? Index exceeds matrix dimensions.

Однако, если элементу матрицы с индексами, превышающими ее размерность, присвоить некоторое значение, размерность матрицы увеличится, например:

 

M(2, 5)= 1

M =

1 2 3 0 0

4 5 6 0 1

7 8 9 0 0

Оператор «двоеточие».

Двоеточие – это один из наиболее важных операторов MATLAB. Он используется в различных выражениях. Для создания вектор–строки с целочисленными компонентами от 1 до 10 достаточно выполнить команду:

M = 1: 10

M =

1 2 3 4 5 6 7 8 9 10

Для получения обратного интервала, введем приращение:

 

M = 100: -7: 50

M =

100 93 86 79 72 65 58 51

или

 

M = 0: pi/4: pi

M =

0 0.7854 1.5708 2.3562 3.1416

Оператор “двоеточие” используется для формирования подвекторов и подматриц из векторов, матриц и многомерных массивов:

 

· M(:, J) – это J-й столбец из M;

· M(I,: ) – это I-я строка из M;

· M(:,: ) – это матрица M;

· M(J: K) – это M(J), M(J+1), …, M(K );

· M(:, J: K) – это M(:, J), M(:, J+1), …, M(:, K );

· M(:,:, K) – это K- я страница трехмерного массива M;

· M(I, J, K,: ) – вектор, выделенный из четырехмерного массива M. Вектор включает элементы M(I, J, K, 1 ), M(I, J, K, 2 ), M(I, J, K, 3 ) и т.д.;

· M(: ) записывает все элементы массива M в виде столбца.

 

Векторные индексы.

Из предыдущего примера следует, что в качестве индексов могут использоваться векторы. Если X и V векторы, то X(V) можно представить как вектор [ X(V(1)), X(V(2)), …, X(V(n))]. Элементы вектора V должны быть целыми числами, чтобы их можно было использовать как индексы элементов массива X. Ошибка выдается в том случае, если индекс элемента меньше единицы или больше, чем size(X). Такой же принцип индексирования действителен и для матриц. Если вектор V имеет m компонент, а вектор W n компонент, то M(V, W) будет матрицей размером mxn, сформированной из элементов матрицы M, индексы которой – элементы векторов V и W.

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

M(I, J) = B присваивает значения массива B элементам прямоугольной подматрицы M, которые определяются векторами I и J. Массив B должен иметь length(I) строк и length(J) столбцов. В следующем примере векторный индекс используется для перестановки 2 и 3 столбцов матрицы B, результат помещается в матрицу A:

A = B(:, [1 3 2 4]);

 

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

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

Создадим магическую матрицу размером 4x4:

 

M=magic(4)

M =

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

Затем удалим второй столбец:

 

M(:, 2) = []

M =

16 3 13

5 10 8

9 6 12

4 15 1

Используя один индекс вместо двух или векторный индекс, можно удалить из матрицы один или несколько выборочных элементов соответственно. При этом матрица преобразуется в вектор–строку:

 

M(2: 2: 10) = []

M =

16 9 3 6 13 12 1

 

Объединение матриц.

Объединение матриц – это процесс соединения нескольких матриц в одну большую. Фактически, исходная матрица создается объединением ее отдельных элементов. Оператор объединения – это пара квадратных скобок. Так, [A, B] – горизонтальная конкатенация (объединение) матриц A и B, которые должны иметь одинаковое количество строк. Горизонтальная конкатенация может быть применена для любого числа матриц в пределах одних скобок: [A, B, C]. При вертикальной конкатенации матрицы в квадратных скобках разделяются точкой с запятой: [A; B; C]. Горизонтальная и вертикальная конкатенации могут использоваться одновременно.

Приведем пример:

 

M=[1 2; 3 4]

M =

1 2

3 4

B=[M M+4; M+6 M+2]

B =

1 2 5 6

3 4 7 8

7 8 3 4

9 10 5 6

Транспонирование матриц.

Матрицы можно транспонировать с помощью оператора ‘ (апостроф), например A ’ – транспонированная матрица A. Для комплексных матриц транспонирование дополняется комплексным сопряжением. Строки транспонированной матрицы соответствуют столбцам исходной матрицы.

 

Создание матриц с заданными свойствами.

Для создания единичной матрицы служит функция eye:

· eye(n) – возвращает единичную матрицу размером nxn;

· eye(m, n) – возвращает матрицу размером mxn с единицами на главной диагонали;

· eye(size(A)) – возвращает единичную матрицу того же размера, что и A.

Пример использования функции eye:

 

M = eye(4, 5)

M =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

Для создания матриц, все элементы которых – единицы, используется функция ones:

· ones(n) – возвращает матрицу размером nxn, все элементы которых – единицы;

· ones(m, n) – возвращает матрицу размером mxn, состоящую из единиц;

· ones(d1, d2, d3, … ) – возвращает массив из единиц с размером d1 x d2 x d3, …;

· ones(size(A)) – возвращает массив единиц такой же размерности, что и A.

Пример:

 

M = ones(3, 4)

M =

1 1 1 1

1 1 1 1

1 1 1 1

 

Создание нулевой матрицы обеспечивает функция zeros, аргументы которой точно такие же, как и у функции ones.

 

Создавать матрицы с заданными диагональными элементами позволяет функция diag:

· X = diag(v, k) – для вектора v, состоящего из n компонент, возвращает квадратную матрицу X порядка n + abs(k) с элементами v на k -й диагонали, при k = 0 это главная диагональ, при k > 0 – одна из верхних диагоналей, при k < 0 – одна из нижних диагоналей. Остальные элементы матрицы – нули;

· X = diag(v) – помещает вектор v на главную диагональ;

· V = diag(X, k) – для матрицы X возвращает вектор-столбец, состоящий из элементов k -й диагонали матрицы X;

· V = diag(X) – возвращает главную диагональ матрицы X.

 

Для создания матриц, состоящих из других матриц, служат следующие функции:

· repmat(A, m, n) возвращает матрицу A, состоящую из mxn копий матрицы A;

· repmat(A, n) возвращает матрицу A, состоящую из nxn копий матрицы A;

· repmat(A, [m n p ]) возвращает многомерный массив, состоящий из копий матрицы A. Матрица A может быть многомерной;

· repmat(a, m, n) возвращает матрицу размером mxn со значениями элементов, заданных скаляром a.

Пример:

A=[1 2; 3 4]

 

A =

1 2

3 4

 

repmat(A, 2, 3)

ans =

1 2 1 2 1 2

3 4 3 4 3 4

1 2 1 2 1 2

3 4 3 4 3 4

· reshape(A, m, n) возвращает матрицу размером mxn, сформированную из A путем последовательной выборки по столбцам. Если число элементов A не равно mxn, то выдается сообщение об ошибке;

· reshape(A, m, n, p, … ) возвращает N -мерный массив с элементами из A, но имеющий размер mxnxp …равный prod(size(A));

· reshape(A, v ) возвращает N -мерный массив с элементами из A, но перестроенный к размеру, заданному вектором v.

Пример:

 

M=1: 6

M =

1 2 3 4 5 6

 

A=reshape(M, 2, 3 )

A =

1 3 5

2 4 6

 

Создание вектора равноотстоящих точек.

Функция linspace формирует линейный массив равноотстоящих узлов. Формы применения:

· linspace(a, b) формирует линейный массив из 100 точек, равномерно распределенных на отрезке от a до b;

· linspace(a, b, n) формирует линейный массив из n точек, равномерно распределенных на отрезке от a до b;

Пример:

 

M = linspace( 1, 2, 5 )

M =

1.0 1.2500 1.5000 1.7500 2.0000

Создание вектора равноотстоящих точек в логарифмическом масштабе.

Функция logspace генерирует вектор равноотстоящих в логарифмическом масштабе точек. Формы применения:

· logspace(a, b) формирует вектор-строку из 50 равноотстоящих в логарифмическом масштабе точек между декадами 10a и 10b;

· logspace(a, b, n) возвращает n точек между декадами 10a и 10b;

· logspace(a, pi) возвращает точки в интервале между 10a и p.

 

Все аргументы функции logspace должны быть скалярными величинами.

 

Разреженные матрицы.

Матрицы, содержащие большое число элементов с нулевыми значениями называются разреженными. Такие матрицы обычно возникают при решении краевых задач для систем дифференциальных уравнений методом сеток. С разреженными матрицами удобно работать, используя компактные схемы хранения только ненулевых элементов матрицы. Помимо ненулевых элементов в разреженном формате необходимо хранить индексную информацию, указывающую расположение каждого элемента в регулярном массиве. Эта дополнительная информация является ценой, которую приходится платить за отказ от хранения нулей. Для разреженных матриц в MATLAB имеется ряд функций, подборка из которых приводится ниже:

 

· [B, d] = spdiags(A) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A. Вектор d содержит номера ненулевых диагоналей;

· B = spdiags(A, d) создает разреженную матрицу B, столбцами которой являются ненулевые диагонали матрицы A, определенные вектором d;

· A = spdiags(B, d, A) заменяет диагонали матрицы A, определенные вектором d, столбцами матрицы B;

· A = spdiags(B, d, m, n) создает разреженную матрицу A размером mxn, размещая столбцы матрицы B вдоль диагоналей, определяемых вектором d;

· full( S) преобразует разреженную матрицу S в полную;

· S=sparse(A) преобразует полную матрицу в разреженную;

· S=sparse(i, j, s, m, n) создает разреженную матрицу S размером mxn. Векторы i и j задают позиции элементов и являются целочисленными, а вектор s определяет действительное или комплексное числовое значение элемента матрицы. Векторы i, j и s должны иметь одну и ту же длину.

 

Построим матрицу системы уравнений, которая возникает при аппроксимации второй производной на равномерной сетке узлов:

 

n=5; e = ones(n, 1);

A = spdiags([e -2*e e], -1: 1, n, n);

Full(A)

ans =

-2 1 0 0 0

1 -2 1 0 0

0 1 -2 1 0

0 0 1 -2 1

0 0 0 1 -2

 

Построим разреженную матрицу A размером 4x4 из столбцов матрицы B, помещенных в дагонали матриы A, номера которых указаны в векторе d:

 

B = [ 41 11 0

52 22 0

63 33 13

74 44 24 ];

d = [ -3

2];

A = spdiags(B, d, 4, 4);

Full(A)

ans =

11 0 13 0

0 22 0 24

0 0 33 0

41 0 0 44

Конвертируем матрицу из полного формата в разреженный, используя функцию sparse:

 

A = [ 0 0 0 5

0 2 0 0

1 3 0 0

0 0 4 0];

S = sparse(A)

S =

(3, 1) 1

(2, 2) 2

(3, 2) 3

(4, 3) 4

(1, 4) 5

 

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

 

S = sparse([3 2 3 4 1], [1 2 2 3 4], [1 2 3 4 5], 4, 4)

 

 

ГРАФИКА

 

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

 

Команда plot.

Команда plot имеет различные формы, связанные с входными параметрами, например plot(y) создает кусочно–линейный график зависимости компонент вектора y от их индексов. Если задать два вектора в качестве аргументов, plot(x, y) создаст график зависимости y от x. Например, для построения графика функции sin(x) на отрезке от 0 до 2p, надо выполнить всего три команды:

 

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

y = sin(t);

plot(t, y)

 

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

 

y2 = sin(t –. 25);

y3 = sin(t –. 5);

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

 

 

Для идентификации каждой кривой можно применить команду legend:

 


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 564; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.088 с.)
Главная | Случайная страница | Обратная связь