Вектор можно задать также путём объединения нескольких векторов.
Например, даны три вектора 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),
В ML можно выделить отдельные фрагменты векторов или матриц. Для этого используются индексация с помощью двоеточия (операция:).
Например,
Из вектора 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
Если бы потребовалось бы удалить, например, 2- ю и 3 -ю строки, то надо записать:
X =
3 10 20
4 30 40
2 8 3
>> X(2:3,:)=[]
X =
3 10 20
Если необходимо в матрице A 5х5, состоящей из нулей, заменить значением -1, например, элементы последней строки с третьего до последнего столбца. Для этого запишем:
Можно матрицу из 0 составить при помощи индексации: A(1:5,1:5)=0, но лучше сделать так: Сначала создать матрицу из 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
При необходимости преобразовать матрицу в вектор нужно записать, например:
X =
0.9593 0.1493 0.2543
0.5472 0.2575 0.8143
0.1386 0.8407 0.2435
>> X(:)
ans =
0.9593
0.5472
0.1386
0.1493
0.2575
0.8407
0.2543
0.8143
0.2435
Получили вектор столбец в порядке следования по столбцам.
Ранее мы строили таблицу значений функции. Теперь, имея знания о векторах, можно для этого использовать такой способ:
disp(' A B') % заголовок
A=-1:0.5:1; %1-ый вектор
|
|
B=1-sin(A).^2; %2-ой вектор
C=[A',B']; % новый вектор
disp(C)
A B
-1.0000 0.2919
-0.5000 0.7702
0 1.0000
0.5000 0.7702
1.0000 0.2919
Диагональная матрица. Это матрица, у которой недиагональные элементы не нулевые. Чтобы получить диагональную матрицу, необходимо задать вектор, количество элементов которого определит размер матрицы. Это может быть как вектор-столбец, так и вектор-строка. Значения вектора расположатся на главной диагонали:
Функция X = diag(v) формирует квадратную матрицу X с вектором v на главной диагонали.
Функция X = diag(v, k) формирует квадратную матрицу X порядка length(v)+abs(k) с вектором v на k-й диагонали. Диагональная матрица со смещенной на k позиций диагональю (положительные k - смещение вверх, отрицательные - вниз), результатом является квадратная матрица размера length(v)+abs(k).
Выделение главной диагонали из матрицы в вектор d=diag(A)
Выделение k-ой диагонали из матрицы в вектор d =diag(A,k)
при k > 0 это номер k-й верхней диагонали, при k < 0 это номер k-й нижней диагонали.
>> 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
2
3
4
Результат – вектор-столбец, состоящий из элементов, расположенных на главной диагонали. Иными словами, при использовании этой функции, если параметром является матрица, результатом будет вектор, а если параметр – вектор, результат – матрица.
Сформируем (трехдиагональную) приведенную ниже матрицу размера 5х5, с использованием функций MatLab.
1 -1 0 0 0
8 2 -2 0 0
0 8 3 -3 0
0 0 8 4 -4
0 0 0 8 5
Сначала сформируем вектор V из чисел от1 до 5. Используем его для создания диагональной матрицы и матрицы со смещенной на единицу вверх диагональю. Вектор из 4-х 8 сформируем так: 8*ones(1,4) и используем его в первом аргументе функции diag, а минус единицу — во втором и получите третью вспомогательную матрицу. Теперь сформируем результирующую матрицу (вычесть из первой матрицы вторую и сложить с третьей):
>> V=[1 2 3 4 5]; или так >> V=1:5
>> R=diag(V)-diag(V(1:4),1)+diag(8*ones(1,4),-1)
R =
1 -1 0 0 0
8 2 -2 0 0
0 8 3 -3 0
0 0 8 4 -4
0 0 0 8 5
Автоматическое заполнение матриц. Формирование матрицы блоками
Сформировать матрицу X следующего вида:
1 0 0 0 3 3 3 3
0 1 0 0 3 3 3 3
0 0 1 0 3 3 3 3
0 0 0 1 3 3 3 3
5 5 5 5 9 0 0 0
5 5 5 5 0 9 0 0
5 5 5 5 0 0 9 0
5 5 5 5 0 0 0 9
Для этого можно представить матрицу X в виде 4-х квадратных блоков 4х4. Для формирования диагональных фрагментов можно использовать функцию eye(4), которая сформирует единичную матрицу. Для формирования первого блока (желтого) достаточно записать просто eye(4), а для формирования 2-ого блока (серого) – 9* eye(4). Чтобы сформировать блоки из 3 и 5 достаточно использовать функцию ones(4), которая заполнит блок единицами, а затем умножить каждый элемент матрицы на 3 и 5 соответственно.
>> X=[eye(4), 3*ones(4); 5*ones(4),9*eye(4)]
Для получения матрицы целых чисел можно использовать функцию round и арифметическое выражение, которое задает характер чисел.
>> A=round(10*rand(3)-5*ones(3))
A =
-1 -5 4
-4 3 -4
5 3 -1