Лекция 3
3.1. Векторно-матричные операции.
Все данные в системе MATLAB интерпретируются как массивы. Массив – это упорядоченный набор однотипных данных (действительных и комплексных чисел, переменных, арифметических выражений). Каждый массив имеет имя. Массивы бывают одномерными, двумерными и многомерными. Доступ к конкретному элементу массива осуществляется путем указания его индекса (номера элемента в массиве).
Вектор в MATLAB – это одномерный массив, матрица – двумерный массив. По умолчанию программа предполагает, что каждая заданная переменная это вектор или матрица. Так, например, запись v=1 означает вектор, состоящий из единственного элемента = 1.
Способы задания векторов и матриц:
если значения элементов векторов являются арифметической прогрессией, такой вектор можно задать в виде:
имя = xn : dx : xk
где имя – имя, которое присваивается массиву; xn, xk – соответственно значения первого и последнего элементов массива, dx – шаг для формирования следующего элемента массива. Если параметр dx отсутствует, тогда шаг = 1 и вектор задается так:
имя = xn : xk
Пример.
>> x=-3:2:3
x =
-3 -1 1 3 >>
>>
>> x=-3:3
x =
-3 -2 -1 0 1 2 3
>>
Поэлементный ввод. Для определения вектор-строки записывается имя массива, знак присваивания “=”, затем в квадратных скобках через пробел или запятую значения элементов массива, например, v=[1 2 3 4 5] или v=[1,2,3,4,5].
Элементы вектора-столбца вводятся через точку с запятой, например, v=[1;2;3;4;5].
При обращении к элементу вектора указывается имя массива и порядковый номер элемента в круглых скобках, например v(1).
Ввод элементов матрицы осуществляется в квадратных скобках, при этом элементы строки отделяются друг от друга пробелом или запятой, а сами строки разделяются между собой точкой с запятой, например A=[1 2; 3 4]. Второй вариант задания той же матрицы
A=[1 2
3 4]
Обращение к элементу матрицы имеет вид: A(m,n), где m – номер строки элемента, n – номер столбца.
Путем объединения нескольких векторов. Результатом выполнения следующего фрагмента программы
>> a=[1 2 3];
>> b=[4 5 6];
>> c=[a b];
будет вектор с, содержащий элементы:
1 2 3 4 5 6
Результатом выполнения фрагмента программы
>> a=[1 2];
>> b=[3 4];
>> с=[a; b]
станет матрица с, имеющая вид
1 2
3 4
Формирование матриц и векторов определенного вида:
zeros(m,n) – прямоугольная матрица с нулевыми элементами, где m – число строк, n – число столбцов.
>> A=zeros(2,3)
A =
0 0 0
0 0 0
>>
zeros(m) – квадратная матрица с нулевыми элементами.
>> A=zeros(3)
A =
0 0 0
0 0 0
0 0 0
>>
ones(m,n) – прямоугольная матрица, состоящая из единиц;
>> B=ones(2,3)
B =
1 1 1
1 1 1
>>
ones(m) – квадратная матрица, состоящая из единиц;
>> B=ones(3)
B =
1 1 1
1 1 1
1 1 1
>>
eye(m,n) – прямоугольная матрица с 1 по главной диагонали, остальные элементы = 0.
>> E=eye(2,3)
E =
1 0 0
0 1 0
>>
eye(m) – квадратная матрица из 1, расположенных по главной диагонали.
E =
1 0 0
0 1 0
0 0 1
>>
diag(A) – извлечение главной диагонали матрицы A.
>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> D=diag(A)
D =
1
5
9
>>
diag(A,m) – извлечение любой диагонали матрицы A, m – номер извлекаемой диагонали (диагонали отсчитываются вверх и вниз от главной диагонали, у которой по умолчанию номер = 0).
>> D=diag(A,-1)
D =
4
8
>> D=diag(A,1)
D =
2
6
>>
И наоборот, если в функции diag(d,m) в качестве аргумента d использовать вектор-столбец, то в результате получим диагональную матрицу, где элементы вектора d образуют диагональ с номером m, например:
>> d=[1;2;3]
d =
1
2
3
>> A=diag(d)
A =
1 0 0
0 2 0
0 0 3
>> B=diag(d,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
>> C=diag(d,-3)
C =
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
>>
Операции над векторами делятся на 2 типа:
Поэлементное преобразование (возможно только над векторами одинакового размера и типа). Признак поэлементной операции – точка перед знаком операции. В случае сложения или вычитания знак поэлементной операции ставить не нужно. Примеры: c=a.*b или d=k+p.
Векторные операции (сложение и вычитание векторов, транспонирование векторов, умножение на число, умножение вектора на вектор, скалярное и векторное произведение векторов). Примеры: b=x-y или z=x'.
Для транспонирования применяется знак апостроф (’).
Умножение вектора на число выполняется с помощью обычного оператора умножения «*», причем умножать вектор на число можно и справа и слева.
Операции над матрицами:
поэлементные операции (поэлементное умножение и деление матриц одинакового размера, поэлементное возведение в степень). Знаки, обозначающие соответствующие поэлементные операции эквиваленты векторным поэлементным операциям.
матричные операции (сложение и вычитание матриц одинаковых размеров, умножение матрицы на число, умножение матрицы на матрицу; возведение матрицы в целую степень, транспонирование матрицы, участие в матричной операции обращенной матрицы). Перечисленные операции выполняются в MATLAB с помощью обычных арифметических операторов.
Некоторые функции для работы с векторами и матрицами.
size(A) – определяется размер массива;
length(a) – определяется количество элементов вектора;
sort(a) – сортировка элементов вектора по возрастанию, где а – вектор. Если аргумент - матрица, тогда в результате функция упорядочивает каждый столбец матрицы отдельно;
max(a) и min(a) – соответственно определение максимального (минимального) элемента вектора. Если аргумент этой функции – матрица, то результат – вектор-строка состоящая из максимальных (минимальных) элементов в соответствующих столбцах матрицы;
dot(a,b) – скалярное произведение векторов a и b. Другой способ – матричное умножение транспонированного вектора a (строки) на вектор b (столбец). Пример: a’*b;
eig(A) – возвращает вектор собственных значений матрицы А; [T,J]=eig(A) дает матрицу T, столбцы которой – собственные вектора матрицы A, и диагональную матрицу J с собственными значениями матрицы A;
inv(A) возвращает обратную матрицу к матрице A.
Пример 1. Вывести на печать матрицы А, АТ, В и ВТ, где
;
;
а также векторы
;
;
в виде столбцов и строк, а также составить из них матрицу
Пример текста программы для М-файла
A=[1 2 3;1 2 1;3 2 0] disp('At-транспонирование A:'),At=A' B=[4 1 2; 0 4 3;1 1 1] disp('Bt-транспонирование B:'),Bt=B' disp('p,q,r-столбцы:') p=[.1;1.7;-1.5] q=[-1.6;0.8;1.1] r=[-0.7;1.3;0.2] disp('матрица PQR=[p q r]:'),PQR=[p q r] disp('p,q,r-строки:') p=[.1 1.7 -1.5] q=[-1.6 0.8 1.1] r=[-0.7 1.3 0.2] |
Результаты счета в командном окне
A =
1 2 3
1 2 1
3 2 0
At-транспонирование A:
At =
1 1 3
2 2 2
3 1 0
B =
4 1 2
0 4 3
1 1 1
Bt-транспонирование B:
Bt =
4 0 1
1 4 1
2 3 1
p,q,r-столбцы:
p =
0.1000
1.7000
-1.5000
q =
-1.6000
0.8000
1.1000
r =
-0.7000
1.3000
0.2000
матрица PQR=[p q r]:
PQR =
0.1000 -1.6000 -0.7000
1.7000 0.8000 1.3000
-1.5000 1.1000 0.2000
p,q,r-строки:
p =
0.1000 1.7000 -1.5000
q =
-1.6000 0.8000 1.1000
r =
-0.7000 1.3000 0.2000
>>
Пример 2. Вычислить для матриц А и В:
– определение обратных матриц,
– матричное и поэлементное произведение,
– матричное и поэлементное возведение в степень 4,
– матричное и поэлементное деление,
– сложение матрицы с числом,
- умножение матрицы на число,
где
;
;
Пример текста программы для М-файла
A=[1 2 3;1 2 1;3 2 3]
B=[4 1 2; 3 4 3;1 1 1]
A1=inv(A);disp('обратная матрица к матрице А: A1='),disp(A1)
B1=inv(B);disp('обратная матрица к матрице B: B1='),disp(B1)
disp('матричное произведение А*B='),disp(A*B)
disp('поэлементное произведение А.*B='),disp(A.*B)
disp('матричное возведение в степень А^4='),disp(A^4)
disp('поэлементное возведение в степень А.^4='),disp(A.^4)
disp('операция умножения обратной матрицы А на матрицу B: A\B='),disp(A\B)
disp('операция умножения А на обратную матрицу B: A/B='),disp(A/B)
disp('поэлементное деление А./B='),disp(A./B)
disp('поэлементное деление А.\B='),disp(A.\B)
disp('операция умножения А на число 2: 2*A='),disp(2*A)
disp('операция сложения матрицы А с числом 2: 2+A='),disp(2+A)
Результаты счета в командном окне
A =
1 2 3
1 2 1
3 2 3
B =
4 1 2
3 4 3
1 1 1
обратная матрица к матрице А: A1=
-0.5000 0.0000 0.5000
0 0.7500 -0.2500
0.5000 -0.5000 0
обратная матрица к матрице B: B1=
0.5000 0.5000 -2.5000
0 1.0000 -3.0000
-0.5000 -1.5000 6.5000
матричное произведение А*B=
13 12 11
11 10 9
21 14 15
поэлементное произведение А.*B=
4 2 6
3 8 3
3 2 3
матричное возведение в степень А^4=
412 464 544
232 264 308
544 616 724
поэлементное возведение в степень А.^4=
1 16 81
1 16 1
81 16 81
операция умножения обратной матрицы А на матрицу B: A\B=
-1.5000 0.0000 -0.5000
2.0000 2.7500 2.0000
0.5000 -1.5000 -0.5000
операция умножения А на обратную матрицу B: A/B=
-1.0000 -2.0000 11.0000
0 1.0000 -2.0000
0 -1.0000 6.0000
поэлементное деление А./B=
0.2500 2.0000 1.5000
0.3333 0.5000 0.3333
3.0000 2.0000 3.0000
поэлементное деление А.\B=
4.0000 0.5000 0.6667
3.0000 2.0000 3.0000
0.3333 0.5000 0.3333
операция умножения А на число 2: 2*A=
2 4 6
2 4 2
6 4 6
операция сложения матрицы А с числом 2: 2+A=
3 4 5
3 4 3
5 4 5
>>
Пример 3. Решить систему линейных алгебраических уравнений
Пример M-файла:
A=[2 -7 10; 7 1 4; 1 -1 1] b=[-13; 11; 0] x=A\b |
Следует обратить внимание на то, что операция «деления» вектора b справа налево на матрицу А вызывает обращение матрицы А и умножение матрицы, обратной матрице А, на вектор b.
Получаемый результат:
A =
2 -7 10
7 1 4
1 -1 1
b =
-13
11
0
x =
2
1
-1
