Вектор можно задать также путём объединения нескольких векторов.
Например, даны три вектора A, B, C, получить вектор D:
>>A=[1 2 3]; B=[4 5 6]; C=[7 8 9]; D=[A B C]
D =
1 2 3 4 5 6 7 8 9
Элементы имеющегося массива могут быть использованы при создании нового вектора. Например,
>> A=[1 2 3];
>> B=[5,6,9];
>> C=[A(2),B(3),B(1),A(1)]
C =
2 9 5 1
Такой же принцип можно использовать и для матриц.
Матлаб позволяет объединять несколько матриц в одну.
Можно выполнить объединение матриц:
· по горизонтали
X | Y |
>> X=[1 2;3 4];
>> Y=[5 6;7 8];
>> Z=[X Y]
Z =
1 2 5 6
3 4 7 8
· по вертикали
X |
Y |
>>Z=[X;Y]
Z=
1 2
3 4
5 6
7 8
Размеры матриц должны быть согласованы.
Кроме того, имеется специальная функция cat для конкатенации (присоединения, сцепления) матриц. Для горизонтального объединения следует записать cat(2,X,Y), а для вертикальной cat(1,X,Y),
В MATLAB можно выделить отдельные фрагменты векторов или матриц. Для этого используются индексация с помощью двоеточия (операция:).
Например,
Из вектора D [1 2 3 4 5 6 7 8 9] получить вектор, содержащий элементы исходного вектора с номера 4 до номера 8.
>> F=D(4:8)
F =
4 5 6 7 8
Пусть имеем матрицу X
>> X=[3 5 8;4 1 9;2 8 3]
X =
3 5 8
4 1 9
2 8 3
Получить новую матрицу Y вырезкой из элементов матрицы X, начиная с элемента X(1,2) до X(3,3)
>> Y = X(1:3, 2:3)
Y =
5 8
1 9
8 3
Можно заменить один фрагмент матрицы другим.
X =
3 5 8
4 1 9
2 8 3
>> Z=[10 20; 30 40]
Z =
10 20
30 40
>> X(1:2,2:3)=Z
X =
3 10 20
4 30 40
2 8 3
Аналогично можно вставить фрагмент Z в верхний левый угол:
>> X(1:2,1:2)=Z
X =
10 20 20
30 40 40
2 8 3
Очень просто удалить, например, какой-либо столбец или строку в матрице.
Удалим 2-й столбец матрицы X. Для этого присвоим второму столбцу пустой массив.
>> X(:,2)=[] % Обращение X(:,2) означает – все эл-ты 2-ГО столбца
X =
3 20
4 40
2 3
Если бы для матрицы X
X =
3 10 20
4 30 40
2 8 3
потребовалось бы удалить, например, 2- ю и 3 -ю строки, то надо записать:
>> X(2:3,:)=[]
X =
3 10 20
Пусть необходимо в матрице A 5х5, состоящей из нулей, заменить значением -1, например, элементы последней строки с третьего до последнего столбца. Можно матрицу из 0 составить при помощи индексации: A(1:5,1:5)=0, но лучше так:
>> A=zeros(5)
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Замену элементов последней строки можно задать в виде
>> A(end, 3:end)=-1
A =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 -1 -1 -1
Диагональная матрица. Это матрица, у которой недиагональные элементы не нулевые. Чтобы получить диагональную матрицу, необходимо задать вектор, количество элементов которого определит размер матрицы. Это может быть как вектор-столбец, так и вектор-строка. Значения вектора расположатся на главной диагонали:
>> Z=[1;2;3;4];
>> D=diag(Z)
D =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
>> B=[1 2 3 4];
>> C=diag(B)
C =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
Этой же функцией можно выделение диагонали из матрицы:
>> diag(C)
ans =
Результат – вектор-столбец, состоящий из элементов, расположенных на главной диагонали. Иными словами, при использовании этой функции, если параметром является матрица, результатом будет вектор, а если параметр – вектор, результат – матрица.
ПРИМЕРЫ
1. Выделение элементов из матриц
>> h=A(3,4)
>> hA=A(3,4)
hA =
>> hb=B(2,3)
hb =
>> hc=C(3,2)
hc =
>> hd=D(3)
hd =
>> he=E(4)
he =
3. Выделение подматриц из исходных матриц
3.1 Из матрицы A выделить второй столбец
>> r = A(1:5,2)
r =
3.2 Из матрицы А выделить третью строку
>> r2=A(3,:)
r2 =
9 8 7 2 3
3.3 Из матрицы А выделить подстолбец четвертого столбца с номером строки от 2 до 4.
>> r3=A(2:4,4)
r3 =
3.4 Из матрицы А выделить подстроку номер 4 с номерами столбцов
от 2 до 5.
>> r4=A(4,2:5)
r4 =
9 9 7 6
3.5 Из матрицы А выделить подматрицу с номерами строк от 2 до 4 и номерами столбцов от 3 до 5.
>> r5=A(2:4,3:5)
r5 =
6 8 11
7 2 3
9 7 6
3.6. Из матрицы А вычеркнуть 3-ю строку
Исходная
A =
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
>> A(3,:)=[ ]
A =
34 12 3 5 1
2 4 6 8 11
9 9 9 7 6
0 1 3 5 6
3.7. Из матрицы А вычеркнуть 2-й столбец
>> A(:,2)=[]
3.8. Из матрицы А вычеркнуть второй и третий столбец
>> A(:,2:3)=[]
3.9. Из матрицы А вычеркнуть 2 и 3-ю строку
>> A(2:3,:)=[]
4. Объединение матриц
4.1. Вертикальное объединение матриц A,C,E в различных вариантах
A = 34 12 3 5 1 2 4 6 8 11 9 8 7 2 3 9 9 9 7 6 0 1 3 5 6 | C = 6 5 4 9 8 7 11 22 33 21 32 43 65 43 21 | E = |
F=[A,C]
F =
34 12 3 5 1 6 5 4
2 4 6 8 11 9 8 7
9 8 7 2 3 11 22 33
9 9 9 7 6 21 32 43
0 1 3 5 6 65 43 21
>> [A,C,E]
ans =
34 12 3 5 1 6 5 4 43
2 4 6 8 11 9 8 7 65
9 8 7 2 3 11 22 33 87
9 9 9 7 6 21 32 43 12
0 1 3 5 6 65 43 21 32
>> [E,C,A]
ans =
43 6 5 4 34 12 3 5 1
65 9 8 7 2 4 6 8 11
87 11 22 33 9 8 7 2 3
12 21 32 43 9 9 9 7 6
32 65 43 21 0 1 3 5 6
>> [E,A,C]
ans =
43 34 12 3 5 1 6 5 4
65 2 4 6 8 11 9 8 7
87 9 8 7 2 3 11 22 33
12 9 9 9 7 6 21 32 43
32 0 1 3 5 6 65 43 21
4.2. Горизонтальное объединение матриц A, B, D
A = 34 12 3 5 1 2 4 6 8 11 9 8 7 2 3 9 9 9 7 6 0 1 3 5 6 | B = 4 5 6 7 8 99 65 44 23 1 9 9 7 7 4 | D = 34 23 21 65 34 |
>> [A;B;D]
ans =
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
4 5 6 7 8
99 65 44 3 1
9 9 7 7 4
34 23 21 65 34
>> [B;D;A]
ans =
4 5 6 7 8
99 65 44 23 1
9 9 7 7 4
34 23 21 65 34
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
>> [D;A;B]
ans =
34 23 21 65 34
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
4 5 6 7 8
99 65 44 23 1
9 9 7 7 4
5. Умножение и деление матриц
5.1 Стандартное умножение
A = 34 12 3 5 1 2 4 6 8 11 9 8 7 2 3 9 9 9 7 6 0 1 3 5 6 | E = |
>> A*E
ans =
5.2. Поэлементное умножение и деление
УМНОЖЕНИЕ:
>> A(:,2).*E
ans =
ДЕЛЕНИЕ
A = 34 12 3 5 1 2 4 6 8 11 9 8 7 2 3 9 9 9 7 6 0 1 3 5 6 | E = |
>> A(:,3)./E % поэлементное обычное
деление
ans =
0.0698
0.0923
0.0805
0.7500
0.0938
>> A(:,2).\E % поэлементное обратное деление
ans =
3.5833
16.2500
10.8750
1.3333
32.0000
A = 34 12 3 5 1 2 4 6 8 11 9 8 7 2 3 9 9 9 7 6 0 1 3 5 6 | D = 34 23 21 65 34 |
> A(2,:).*D% поэлементное
умножение
ans =
68 92 126 520 374
>> A(2,:)./D % поэлементное обычное деление
ans =
0.0588 0.1739 0.2857 0.1231 0.3235
>> A(3,:).\D % поэлементное обратное деление
ans =
3.7778 2.8750 3.0000 32.5000 11.3333
6. Степени матрицы
6.1 Стандартная степень
>> A^2
ans =
1252 526 243 312 211
202 171 177 165 178
403 217 151 152 148
468 285 225 214 213
74 79 90 79 86
6.2. Поэлементное возведение в степень
>> A.^2
ans =
1156 144 9 25 1
4 16 36 64 121
81 64 49 4 9
81 81 81 49 36
0 1 9 25 36
>> D.^(1/2)
ans =
5.8310 4.7958 4.5826 8.0623 5.8310
>> E.^(-1/2)
ans =
0.1525
0.1240
0.1072
0.2887
0.1768
7. Ввод матриц в виде арифметических выражений.
>> g=[(-1)^(1/2) exp(-2) sqrt(-10)]
g =
0.0000 + 1.0000i 0.1353 0 + 3.1623i
8. Операции с матрицами
8.1 Транспонирование
A'
ans =
34 2 9 9 0
12 4 8 9 1
3 6 7 9 3
5 8 2 7 5
1 11 3 6 6
8.2 Обращение матриц
>> s=inv(A)
s =
0.0382 -0.2373 0.1901 -0.1704 0.5040
-0.0223 0.8506 -0.5179 0.4132 -1.7100
-0.0310 -0.7730 0.5403 -0.2512 1.4035
0.0107 -0.0155 -0.4045 0.3676 -0.1387
0.0103 0.2577 0.1532 -0.2496 -0.1345
>> s*A
ans =
1.0000 0 0 0 -0.0000
-0.0000 1.0000 0 0 0
0 0.0000 1.0000 0 -0.0000
0 -0.0000 0.0000 1.0000 -0.0000
0 0.0000 0.0000 -0.0000 1.0000
8.3 Определение собственных чисел
>> eig(A) % eigenvalues–собственные значения матрицы_А
ans =
40.4154
15.9036
0.4913 + 2.5786i
0.4913 - 2.5786i
0.6984
8.4 Вычисление определителя матрицы
>> det(A)
ans =
8.5 Построение характеристического полинома и определение корней
>> p=poly(A)
p =
1.0e+003 *
0.0010 -0.0580 0.7450 -1.5120 5.1410 -3.0930
>> roots(p)
ans =
40.4154
15.9036
0.4913 + 2.5786i
0.4913 - 2.5786i
0.6984
8.6. Перестановки элементов матриц
Для перестановок элементов матриц служат следующие функции: В = fiiplr(A) — зеркально переставляет столбцы матрицы А относительно верти-кальной оси; flipud(A) –зеркально переставляет столбцы матрицы А относи-тельно горизонтальной оси
> fliplr(A)
ans =
1 5 3 12 34
11 8 6 4 2
3 2 7 8 9
6 7 9 9 9
6 5 3 1 0
>> flipud(A)
ans =
0 1 3 5 6
9 9 9 7 6
9 8 7 2 3
2 4 6 8 11
34 12 3 5 1
8.7. Вычисление произведений
Несколько простых функций служат для перемножения элементов массивов:
prod(A) — возвращает произведение элементов массива, если А — вектор, или вектор-строку, содержащую произведения элементов каждого столбца, если А — матрица; prod (A, dim) — возвращает матрицу (массив размерности два) с произведением элементов массива А по столбцам (dim=l), по стро-кам(dim=2), по иным размерностям в зависимости от значения скаляра dim.
>> prod(A)
ans =
0 3456 3402 2800 1188
>> prod(B)
ans =
3564 2925 1848 1127 32
>> prod(C)
ans =
810810 1210880 834372
>> prod(A,1)
ans =
0 3456 3402 2800 1188
>> prod(A,2)
ans =
cumprod(A) — возвращает произведение с накоплением. Если А — вектор, cumprod(A) возвращает вектор, содержащий произведения с накоплением элементов вектора А. Если А — матрица, cumprod(A) возвращает матрицу того же размера, что и А, содержащую произведения с накоплением для каждого столбца матрицы А (Первая строка без изменений, во второй строке произведение первых двух элементов каждого столбца, в третьей строке элементы второй строки матрицы-результата умножаются на элементы третьей строки матрицы входного аргумента по столбцам и т. д.); cumprod(A,dim) — возвращает произведение с накоплением элементов по строкам или столбцам матрицы в зависимости от значения скаляра dim.
>> cumprod(A,1)
ans =
34 12 3 5 1
68 48 18 40 11
612 384 126 80 33
5508 3456 1134 560 198
0 3456 3402 2800 1188
>> cumprod(A,2)
ans =
34 408 1224 6120 6120
2 8 48 384 4224
9 72 504 1008 3024
9 81 729 5103 30618
0 0 0 0 0
cross(U, V) — возвращает векторное произведение векторов U и V в трехмерном пространстве, т. е. W=U´V. U и V — обязательно векторы с тремя элементами; cross(U,V,dim) — возвращает векторное произведение U и V по размерности, определенной скаляром dim. U и V — многомерные мас-сивы, которые должны иметь одну и ту же размерность, причем размер век-торов в каждой размерности size(U,dim) и size(V,dim) должен быть равен 3.
>> a=[2 3 5]
a =
2 3 5
>> b=[7 8 9]
b =
7 8 9
>> cross(a,b)
ans =
-13 17 -5
8.8. Суммирование элементов
sum(A) — возвращает сумму элементов массива, если А — вектор, или век-тор-строку, содержащую сумму элементов каждого столбца, если А — мат-рица; sum(A,dim) — возвращает сумму элементов массива по столбцам (dim=1), строкам (dim=2) или иным размерностям в зависимости от значения скаляра dim.
>> a=magic(4)
a =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
>> b=sum(a)
b =
34 34 34 34
> sum(A,1)
ans =
54 34 28 27 27
>> sum(A,2)
ans =
>> sum(D,1)
ans =
34 23 21 65 34
>> sum(D,2)
ans =
cumsum(A) — выполняет суммирование с накоплением. Если А — вектор, cumsum(A) возвращает вектор, содержащий результаты суммирования с накоплением элементов вектора А. Если А — матрица, cumsum(A) возвращает матрицу того же размера, что и А, содержащую суммирование с накоплением для каждого столбца матрицы А;
cumsum(a)
ans =
16 2 3 13
21 13 13 21
30 20 19 33
34 34 34 34
>> cumsum(a,1)
ans =
16 2 3 13
21 13 13 21
30 20 19 33
34 34 34 34
>> cumsum(a,2)
ans =
16 18 21 34
5 16 26 34
9 16 22 34
4 18 33 34
8.9. Функции формирования матриц
Для создания матриц, состоящих из других матриц, используются следую-щие функции: repmat (А, m, n) — возвращает матрицу В, состоящую из m´n копий матрицы А (т. е. в матрице m´n каждый элемент заменяется на копию матрицы А); repmat(А,n) — формирует матрицу, состоящую из n´n копий матрицы А; repmat(A,[m, n]) — дает тот же результат, что и repmat(A,m,n); repmat(A,[m n р...]) — возвращает многомерный массив (m´n´p...), состоящий из копий многомерного массива или матрицы А; repmat (A, m, n) — когда А — скаляр, возвращает матрицу размера m´n со значениями элементов, заданных А, Это делается намного быстрее, чем A*ones(m,n).
>> repmat(A,2,1)
ans =
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
34 12 3 5 1
2 4 6 8 11
9 8 7 2 3
9 9 9 7 6
0 1 3 5 6
>> repmat(D,1,2)
ans =
34 23 21 65 34 34 23 21 65 34
>> repmat(D,2,1)
ans =
34 23 21 65 34
34 23 21 65 34
>> repmat(E,2,2)
ans =
43 43
65 65
87 87
12 12
32 32
43 43
65 65
87 87
12 12
32 32
>> repmat(A,2)
ans =
34 12 3 5 1 34 12 3 5 1
2 4 6 8 11 2 4 6 8 11
9 8 7 2 3 9 8 7 2 3
9 9 9 7 6 9 9 9 7 6
0 1 3 5 6 0 1 3 5 6
34 12 3 5 1 34 12 3 5 1
2 4 6 8 11 2 4 6 8 11
9 8 7 2 3 9 8 7 2 3
9 9 9 7 6 9 9 9 7 6
0 1 3 5 6 0 1 3 5 6
reshape(A,m,n) — возвращает матрицу В размерностью m´n, сформирован-ную из А путем последовательной выборки по столбцам. Если число элемен-тов А не равно m ´ n, то выдается сообщение об ошибке;
reshape(A,m,n,p,...) или В = reshape(A,[m, n, р...]) — возвращает N-мерный массив с элементами из А, но имеющий размер m ´n ´p.... Произведение m´n ´p... должно быть равно значению prod(size(A)).
reshape(A, size) — возвращает N-мерный массив с элементами из А, но перестроенный к размеру, заданному с помощью вектора size.
B =
4 5 6 7 8
99 65 44 23 1
9 9 7 7 4
>> size(B)
ans =
3 5
>> reshape(B,5,3)
ans =
4 9 23
99 6 7
9 44 8
5 7 1
65 7 4
>> size(D)
ans =
1 5
>> reshape(D,5,1)
ans =
Поворот матриц
Следующая функция обеспечивает поворот матрицы (по расположению эле-ментов): rot90(A) — осуществляет поворот матрицы А на 90° против часовой стрелки; rot90(A,k) — осуществляет поворот матрицы А на величину 90*k градусов, где k — целое число.
Пример:
a =
1 2 3 4
7 6 5 4
98 65 34 12
33 22 44 55
>> rot90(a)
ans =
4 4 12 55
3 5 34 44
2 6 65 22
1 7 98 33
>> rot90(a,2)
ans =
55 44 22 33
12 34 65 98
4 5 6 7
4 3 2 1
8.10 Матричные функции
ехрm(Х) — матричная экспонента – возвращает ехp от матрицы X. Комплексный результат получается, если X имеет неположительные собственные значения.
Пример:
f =
32 23 12
2 3 6
7 5 3
>> expm(f)
ans =
1.0e+015 *
9.0387 6.7798 4.3986
0.8865 0.6649 0.4314
1.9967 1.4977 0.9717
>> b=[i 2i -1; 2+i -3i 1/i; 2-3i 1+4i i]
b =
0 + 1.0000i 0 + 2.0000i -1.0000
2.0000 + 1.0000i 0 - 3.0000i 0 - 1.0000i
2.0000 - 3.0000i 1.0000 + 4.0000i 0 + 1.0000i
>> expm(b)
ans =
-0.6417 + 0.2870i 0.4812 - 0.6678i 0.1580 - 0.8727i
-0.0003 - 1.2086i -0.9349 - 2.3955i -1.1866 - 0.4947i
3.0891 + 3.0731i 4.3875 + 1.5792i 1.0155 - 1.6050i
>> sqrtm(A)
ans =
Columns 1 through 4
5.7728 + 0.0000i 1.6108 + 0.0000i 0.1321 + 0.0000i 0.4209 - 0.0000i
0.0376 + 0.0000i 1.0538 - 0.0000i 0.8133 - 0.0000i 1.4589 - 0.0000i
1.1039 + 0.0000i 1.8432 + 0.0000i 2.3899 + 0.0000i -0.1565 + 0.0000i
0.9206 - 0.0000i 1.4836 + 0.0000i 1.7187 + 0.0000i 1.9924 - 0.0000i
-0.1679 - 0.0000i -0.2815 - 0.0000i 0.2316 - 0.0000i 1.2368 + 0.0000i
Column 5
-0.4830 - 0.0000i
2.9651 + 0.0000i
-0.3782 - 0.0000i
0.6043 - 0.0000i
2.4686 + 0.0000i
>> logm(A)
ans =
3.4843 1.0961 -0.1282 0.1991 -0.9378
-0.0474 -0.1816 0.6040 0.8641 3.7342
0.5936 2.1095 1.5684 -0.3561 -1.6653
0.3599 1.0586 1.5375 1.0579 0.1376
-0.1802 -0.6858 -0.1722 1.2779 2.1079
>> log(D)
ans =
3.5264 3.1355 3.0445 4.1744 3.5264
>> sqrt(E)
ans =
6.5574
8.0623
9.3274
3.4641
5.6569
> size(A)
ans =
5 5
>> size(A,1)
ans =
>> size(A,2)
ans =
>> size(B)
ans =
3 5
>> size(B,1)
ans =
>> size(B,2)
ans =
>> [M,N]=size(B)
M =
N =
Специальные матрицы
>> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> eye(3,5)
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
>> eye(size(A))
ans =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> ones(4)
ans =
1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
>> ones(4,3)
ans =
1 1 1
1 1 1
1 1 1
1 1 1
>> ones(size(A))
ans =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
>> zeros(4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>> zeros(3,4)
ans =
0 0 0 0
0 0 0 0
0 0 0 0
>> zeros(size(A))
ans =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
>> rand(5)
ans =
0.9501 0.7621 0.6154 0.4057 0.0579
0.2311 0.4565 0.7919 0.9355 0.3529
0.6068 0.0185 0.9218 0.9169 0.8132
0.4860 0.8214 0.7382 0.4103 0.0099
0.8913 0.4447 0.1763 0.8936 0.1389
>> rand(3,4)
ans =
0.2028 0.2722 0.7468 0.4660
0.1987 0.1988 0.4451 0.4186
0.6038 0.0153 0.9318 0.8462
>> rand(size(A))
ans =
0.5252 0.6813 0.4289 0.3028 0.8600
0.2026 0.3795 0.3046 0.5417 0.8537
0.6721 0.8318 0.1897 0.1509 0.5936
0.8381 0.5028 0.1934 0.6979 0.4966
0.0196 0.7095 0.6822 0.3784 0.8998