2.2. Операция двоеточие
В MATLAB’е имеется очень удобное средство для работы не только с матрицами, но и их частями – блоками. При этом используется операция двоеточие (:), которая для большинства из вас является новой. Выполните следующую команду:
>> 1:5
ans =
1 2 3 4 5
То есть результатом операции двоеточие является вектор-строка целых чисел, изменяющихся от значения левого операнда команды до значения правого.
Эта операция позволяет выделить из массива или матрицы часть – блок. Задайте матрицу и вектор, например, такие:
С помощью операции
двоеточие мы можем создать новый вектор,
содержащий элементы вектора
,
например, со второго по четвертый:
>> c = b(2:4)
c =
2
3
4
Также легко можно
извлечь из матрицы
блок, включающий элементы первых четырех
строк и последних трех столбцов:
>> D = A(1:4,3:5)
D =
3 4 5
3 2 1
0 1 2
1 1 1
Можно извлечь из матрицы любую строку:
>> x = A(2,1:5)
x =
5 4 3 2 1
или столбец
>> y = A(1:5,4)
y =
4
2
1
1
1
Кстати, если вы хотите извлечь строку или столбец целиком, то вы можете не указывать начальное и конечное значения индексов:
>> z = A(3,:)
z =
-1 -2 0 1 2
В этом случае индекс, обозначенный двоеточием, пробегает все возможные значения.
Очень важно усвоить, что выражение с двоеточием может стоять и в правой части оператора присваивания. Например,
>> A(2,:) = [2 2 2 2 2]
A =
1 2 3 4 5
2 2 2 2 2
-1 -2 0 1 2
1 1 1 1 1
7 1 7 1 7
заменит в матрице А вторую строку.
Замечание. Операция двоеточие, вообще-то, обладает большими возможностями. К ней нам еще предстоит вернуться при изучении циклов.
Упражнение. Задайте матрицу А размером 4х4. Извлеките из нее блоки А11, А12, А21, А22, согласно следующему разбиению:
,
где блок
имеет размер 3х3, блок
‑ размер 3х1, блок
‑ размер 1х3, а блок
‑ размер 1х1. Аналогичным образом
задайте матрицу В,
такого же размера, с таким же разбиением
на блоки. Выполните умножение этих
матриц непосредственно
.
Затем убедитесь в известном факте
линейной алгебры – если матрицу
разбить на такие же блоки, то каждый из
них можно вычислить по обычным формулам
матричного умножения:
2.3. Функции cat, diag, sum, eye, zeros
Все функции MATLAB’а вряд ли знают даже очень опытные пользователи. Да это и не нужно. Имеет смысл знакомиться только с теми функциями, которые полезны для решения тех задач, которые вас интересуют в данный момент. Например, когда вы решаете задачи численного интегрирования дифференциальных уравнений, вам совсем не обязательно тратить время на изучение функций теории вероятностей и математической статистики. Однако некоторые функции встречаются настолько часто при решении самых разных задач, что их следует знать всем пользователям MATLAB’а. Вот некоторые из них
Функция конкатенации (объединения) массивов – cat. Эта функция позволяет объединить две матрицы в одну. Синтаксис использования функции:
cat(DIM,A,B)
DIM – номер размерности, вдоль которой производится объединение матриц. Размерностью номер один считаются номера строк, а размерностью номер два – номера столбцов. То есть, если указать DIM=1, то в результате матрица B будет расположена под матрицей A, а если DIM=2, то матрица B будет помещена справа от матрицы A. Следующий пример поясняет действие этой функции:
>> A = [1, 2; 3, 4]
A =
1 2
3 4
>> B = [5, 6; 7, 8]
B =
5 6
7 8
>> cat(1,A,B)
ans =
1 2
3 4
5 6
7 8
>> cat(2,A,B)
ans =
1 2 5 6
3 4 7 8
Для тех, кто хорошо знаком с блочной записью матриц, может более удобной следующая запись этой операции:
С = [ A, B] эквивалентно C = cat(2,A,B);
C = [ A; B] эквивалентно C = cat(1,A,B).
Функция диагонали матрицы – diag. Эта функция может работать в двух направлениях: во-первых, она может создавать диагональные матрицы из векторов;
>> v = [1 2 3 4]
v =
1 2 3 4
>> A=diag(v)
A =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
Здесь, имея заданный
вектор
,
с помощью функции diag,
получена диагональная матрица
,
на диагонали которой расположены
элементы вектора. Эта же функция позволяет
создать матрицу, в которой элементы
заданного вектора расположены не на
главной диагонали, а на одной из
кодиагоналей:
>> B = diag([1 2 3],2)
B =
0 0 1 0 0
0 0 0 2 0
0 0 0 0 3
0 0 0 0 0
0 0 0 0 0
В этом случае второй аргумент функции – номер кодиагонали, которую следует заполнить. Кодиагонали, расположенные над главной диагональю имеют положительные номера, а нижние кодиагонали – отрицательные. Используя функцию diag можно очень легко создавать ленточные матрицы. Например,
>> C = diag([2 2 2 2 2]) + diag([-1 -1 -1 -1],1) + diag([-1 -1 -1 -1],-1)
C =
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
здесь одной-единственной командой создается трехдиагональная матрица, которая часто используется в методе конечных разностей.
Другой вариант использования функции diag возникает, когда ее аргументом является матрица. В этом случае результатом функции будет соответствующая диагональ матрицы-аргумента. Пример:
>> D = [1 2 3 4 5; -1 1 -1 1 -1; 1 2 3 2 1; 0 0 1 0 0; 1 1 1 1 1]
D =
1 2 3 4 5
-1 1 -1 1 -1
1 2 3 2 1
0 0 1 0 0
1 1 1 1 1
>> diag(D,2)
ans =
3
1
1
Функция суммирования – sum. В простейшем варианте эта функция вычисляет сумму всех элементов вектора:
>> sum([1 2 3 -1 1])
ans =
6
Однако, функция sum может работать и с матрицами. Так, если мы попросим эту функцию обработать матрицу D из предпоследнего примера, то
>> sum(D)
ans =
2 6 7 8 6
то она выдаст вектор, с суммами, вычисленными по каждому столбцу матрицы.
Функция единичной матрицы – eye. В линейной алгебре очень важную роль играет единичная матрица – квадратная матрица, на диагонали которой стоят единицы, а все остальные элементы равны нулю. Для создания таких матриц в MATLAB’е имеется специальная функция:
>> eye(4)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Аргументом этой функции является размер матрицы, которую вам надо получить
Функции создания матриц с нулевыми и единичными элементами – zeros и ones. Эти функции позволяют создать матрицы, заполненные одними нулями, либо одними единицами.
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
В отличие от функции eye здесь мы можем создавать не только квадратные, но и прямоугольные матрицы:
>> ones(2,4)
ans =
1 1 1 1
1 1 1 1
Упражнения:
Создайте, используя изученные функции, следующие матрицы:
Используя функцию cat, составьте из этих матриц матрицу F.
Извлеките из матрицы F вторую кодиагональ ( 3 0 0 1).
Посчитайте суммы элементов строк матрицы F (вспомните об операции транспонирования ( 7 6 7 3 3 3 ).
