Красавин Компютерныы практикум в среде МатЛаб 2015
.pdfШаг можно не указывать, в этом случае он будет равен единице.
Другим оператором, позволяющим создавать векторы, компоненты которых отстоят друг от друга на определенную величину, является linspace. Он употребляется в том случае, когда известен не шаг между соседними элементами, а число элементов на заданном участке. Например, команда
x = linspace(0,2*pi,100)
приведет к созданию сетки из 100 точек, равноотстоящих друг от друга на отрезке 0,2π .
Для создания специальных матриц в MatLab предусмотрено большое количество встроенных функций. Одними из наиболее часто используемых являются ones для создания матрицы из единиц, zeros для создания матриц из нулей и eye для создания матриц, у которых на главной диагонали – единицы, а остальные элементы равны нулю. Формат этих функций следующий:
A = zeros(m,n)
Здесь m – число строк матрицы; n – число столбцов. Если в аргументах указана только одна переменная m, то создается
квадратная матрица размера |
|
. Например, команды |
|
W = ones(3); |
|
|
|
E = eye(2,3); |
|
|
|
приведут к созданию матриц |
1 |
1 |
1 |
|
|||
|
1 |
1 |
1 |
и |
1 |
1 |
1 |
|
1 |
0 |
0 |
|
0 |
1 |
0 . |
|
21 |
|
|
Матрицы можно также создавать блочным способом, используя уже имеющиеся матрицы. Например, команда
A = [2*ones(2) eye(2); eye(2) [4 4; 3 3]];
создаст следующую матрицу:
2 |
0 |
1 |
0 |
0 |
2 |
0 |
1 |
1 |
0 |
4 |
4 . |
0 |
1 |
3 |
3 |
2.2. Определение размеров матриц
Для определения размеров матрицы используется оператор size. Он возвращает вектор размера 1 2, в который записывается число строк и число столбцов исходной матрицы. Использование оператора size иллюстрирует следующий пример.
Пример 2.1.
A = ones(3,4); % создание единичной матрицы размера 3х4
Z = size(A); % размеры матрицы A записываются в вектор Z, при этом
Z(1)=3; Z(2)=4
[r c] = size(A); % здесь функция size вызвана с двумя выходными параметрами, поэтому число столбцов матрицы A будет записано в переменную r, а число строк – в переменную
c:r=3; c=4
ВMatLab и векторы, и даже скаляры представляются матрицами
(вектор является матрицей размера |
|
или |
|
, где |
– число |
||||
компонент, а |
скаляр |
является |
матрицей размера |
). Для |
|||||
|
1 |
|
1 |
|
оператор |
||||
определения |
длины |
вектора |
удобнее |
использовать1 |
|||||
1 |
length, который вычисляет число строк и число столбцов входной матрицы и возвращает только один параметр – наибольшее из этих значений.
22
2.3. Обращение к элементам матрицы
Обращение к отдельному элементу матрицы осуществляется путем указания номеров строки и столбца этого элемента в матрице: z(2,3). Первым аргументом является номер строки, вторым – номер столбца. Такой же оператор можно использовать для присвоения конкретному элементу матрицы нового значения (z(2,3)=50) или выводу его значения на экран
(disp(z(2,3))).
Для обращения к нескольким соседним элементам матрицы используется оператор «двоеточие». Его использование иллюстрируется в примере 2.2.
Пример 2.2.
Z = rand(6); % создание матрицы 6х6, |
заполненной случайными |
||||
|
числами |
|
|
|
|
Z = |
|
|
|
|
|
0.2438 |
0.4152 |
0.7236 |
0.6971 |
0.4762 |
0.9544 |
0.0997 |
0.8191 |
0.4998 |
0.5970 |
0.1135 |
0.4516 |
0.5606 |
0.6758 |
0.9471 |
0.9047 |
0.5157 |
0.5333 |
0.0857 |
0.0464 |
0.9361 |
0.0330 |
0.8682 |
0.1265 |
0.2993 |
0.6715 |
0.9491 |
0.8230 |
0.4606 |
0.9051 |
0.2823 |
0.3165 |
0.7623 |
0.3662 |
0.3915 |
0.8013 |
A = Z(2,2:4) % A – вектор, состоящий из элементов матрицы Z во второй строке и столбцах со второго по четвертый
A =
0.8191 0.4998 0.5970
B = Z(1:2,3:5) % B – матрица, состоящая из элементов матрицы Z в сроках с первой по вторую и в столбцах с третьего по пятый
B =
0.7236 |
0.6971 |
0.4762 |
0.4998 |
0.5970 |
0.1135 |
C = Z(:,2) % C – вектор, состоящий из элементов матрицы Z во втором столбце
C =
23
0.4152
0.8191
0.6758
0.0464
0.6715
0.3165
D = Z(2:3,:) % D – матрица, состоящая из элементов матрицы Z в строках со вторую по третью; второй оператор двоеточия в данном случае означает «все столбцы»
D =
0.0997 |
0.8191 |
0.4998 |
0.5970 |
0.1135 |
0.4516 |
0.5606 |
0.6758 |
0.9471 |
0.9047 |
0.5157 |
0.5333 |
E = Z(4:end,:) % E – матрица, состоящая из элементов матрицы Z в строках с четвертую по последнюю; оператор end в данном случае указывает на последний элемент диапазона
E =
0.0857 |
0.0464 |
0.9361 |
0.0330 |
0.8682 |
0.1265 |
0.2993 |
0.6715 |
0.9491 |
0.8230 |
0.4606 |
0.9051 |
0.2823 |
0.3165 |
0.7623 |
0.3662 |
0.3915 |
0.8013 |
Z(:,2:4) = [] % удаление из матрицы Z столбцов со второго по четвертый
Z =
0.2438 |
0.4762 |
0.9544 |
0.0997 |
0.1135 |
0.4516 |
0.5606 |
0.5157 |
0.5333 |
0.0857 |
0.8682 |
0.1265 |
0.2993 |
0.4606 |
0.9051 |
0.2823 |
0.3915 |
0.8013 |
2.4. Поэлементные операции с матрицами
Помимо обычных операций матричной алгебры (сложение, вычитание и умножение матриц), в MatLab предусмотрены поэлементные операции. Поэлементные операции над матрицами предполагают, что матрицы имеют одинаковый размер. Пример 2.3 иллюстрирует использование поэлементных операций.
24
Пример 2.3.
A = 12*ones(2) % задание матрицы A
A =
12 |
12 |
12 |
12 |
B = [1 2; 3 4] % задание матрицы B
B =
1 |
2 |
3 |
4 |
C = A./B % матрица A поэлементно делится на матрицу B, т.е. каждый элемент матрицы C есть соответствующий элемент матрицы A, деленный на соответствующий элемент матрицы B
C =
12 |
6 |
4 |
3 |
D = A.*B % матрица A поэлементно умножается на матрицу B, т.е. каждый элемент матрицы D есть соответствующий элемент матрицы A, умноженный на соответствующий элемент матрицы B
D =
12 |
24 |
36 |
48 |
E = A*B % обычное перемножение матриц по правилам линейной алгебры
E =
48 |
72 |
48 |
72 |
F = A^2 % возведение матрицы A в квадрат, т.е. умножение матрицы A на саму себя
F =
288 288
288 288
25
G = A.^2 % поэлементное возведение матрицы A в квадрат; поэлементная операция таким образом заменяет циклы по всем строкам и столбцам
G =
144 144
144144
2.5.Функции для работы с матрицами и векторами
Функция sum суммирует все компоненты вектора, а функция prod перемножает их:
sum([2 4 6]) ans = 12
prod ([2 4 6]) ans = 48
Если применить эти функции к матрице, а не к вектору, то произойдет суммирование или перемножение всех элементов матрицы в каждом столбце. Для того чтобы найти сумму или произведение всех элементов матрицы, следует применить функцию дважды:
M = magic(3)
M = |
1 |
6 |
8 |
||
3 |
5 |
7 |
4 |
9 |
2 |
sum(M) |
|
|
ans = |
15 |
15 |
15 |
sum(sum(M))
26
ans = 45
Для нахождения минимального или максимального элементов вектора используются, соответственно, функции min и max. Аналогично, если входным элементов для этих функций является матрица, а не вектор, функции выдают результат для каждого столбца. Эти функции могут быть также использованы для определения положения максимального или минимального элемента в векторе или матрице. Для этого к функции нужно обратиться с двумя выходными аргументами:
a = [3 9 5 7 |
4 1 2] |
|
|
|
|
|
a = |
9 |
5 |
7 |
4 |
1 |
2 |
3 |
[m,b] = max(a)
m =
9 % значение максимального элемента вектора а
b =
2 % позиция максимального элемента в векторе а
Пример 2.4 содержит один из возможных кодов для определения положения максимального элемента в матрице.
Пример 2.4.
v = [2 |
6; 4 1; 0 3] % задание матрицы |
|
v = |
6 |
|
2 |
|
|
4 |
1 |
|
0 |
3 |
|
[BigCol, RowCol] = max(v) |
||
BigCol |
= |
% максимальный элемент в каждом столбце |
4 |
6 |
|
|
|
27 |
RowCol =
21 % номер строки, которая содержит соответствующий максимальный элемент
[Big,Col] = max(BigCol)
Big =
6 % максимальный элемент во всей матрице
Col =
2 % номер столбца, содержащего максимальный элемент во всей матрице
Row = RowCol(Col) % определение строки, содержащей максимальный элемент
Row =
1
Элементы вектора или матрицы могут быть отсортированы при помощи функции sort:
a = |
9 |
5 |
7 |
4 |
1 |
2 |
|
3 |
|
||||||
[b,c]=sort(a) |
|
|
|
|
|
|
|
b = |
2 |
3 |
4 |
|
5 |
7 |
9 % отсортированный |
1 |
|
||||||
вектор |
|
|
|
|
|
|
|
c = |
7 |
1 |
5 |
3 |
4 |
2 % |
положение элементов |
6 |
отсортированного вектора b в исходном неотсортированном векторе a
В случае если входной элемент – матрица, функция sort выполняет сортировку в каждом столбце.
2.6. Фильтрация и логическое индексирование
Часто возникает задача выбора из элементов матрицы или вектора таких элементов, которые удовлетворяют определенному условию. Следующие примеры иллюстрируют возможные решения этой задачи.
28
Пример 2.5.
B = [1 5; 7 9] % задание матрицы
B = |
|
5 |
|
|
|
1 |
|
|
|
|
|
7 |
|
9 |
создание логической матрицы; единица |
означает, что |
|
C = (B>5) |
% |
||||
|
|
соответствующий элемент матрицы B больше 5 |
|
||
C = |
|
0 |
|
|
|
0 |
|
|
|
|
|
1 |
|
1 |
|
|
|
D = B(B>=5) |
% выбор из матрицы B всех элементов, |
которые |
больше |
||
|
|
или равны 5, и запись их в вектор D |
|
|
|
D = |
|
|
|
|
|
7 |
|
|
|
|
|
5 |
|
|
|
|
|
9 |
|
|
|
|
|
B(B>=5)=13 |
% |
присвоение всем элементам матрицы B, |
которые |
больше |
|
|
|
или равны 5, значения 13 |
|
|
|
B = |
13 |
|
|
|
|
1 |
|
|
|
||
13 |
13 |
|
|
|
Пример 2.6. Рассмотрим функцию find:
A = [6 3 8 2 1]; % задание вектора
loc = find(A>5) % нахождение позиций всех элементов вектора A, которые больше 5
loc =
1 3 % элементы под номерами 1 и 3 в векторе A больше 5
29
Задания
2.1. Создать матрицу
1 |
0 |
0 |
2 |
2 |
2 |
1 |
3 |
5 |
0 |
1 |
0 |
2 |
2 |
2 |
7 |
9 |
11 |
0 |
0 |
1 |
2 |
2 |
2 |
13 |
15 |
17 |
0 |
0 |
0 |
9 |
8 |
7 |
4 |
3 |
3 |
0 |
0 |
0 |
6 |
5 |
4 |
3 |
4 |
3 . |
0 |
0 |
0 |
3 |
2 |
1 |
3 |
3 |
4 |
3 |
4 |
4 |
7 |
0 |
0 |
5 |
2 |
2 |
4 |
3 |
4 |
0 |
7 |
0 |
2 |
5 |
2 |
4 |
4 |
3 |
0 |
0 |
7 |
2 |
2 |
5 |
2.2. Создать трехдиагональную матрицу, используя функцию diag:
2 |
3 |
0 |
0 |
0 |
0 |
3 |
2 |
3 |
0 |
0 |
0 |
0 |
3 |
2 |
3 |
0 |
0 |
0 |
0 |
3 |
2 |
3 |
0 . |
0 |
0 |
0 |
3 |
2 |
3 |
0 |
0 |
0 |
0 |
3 |
2 |
2.3.При помощи функции rand создайте квадратную матрицу размера 6 6 из случайных чисел и найдите сумму всех элементов, находящихся в строках с 4 по 6 и в столбцах с 4 по 6.
2.4.Даны два вектора
2 46 810 ;
1 47 10 13 .
Найти
; |
; |
; |
1 |
. |
|
|
30 |
|
|