В первой части мы познакомились с основами работы в Matlab. О том как умножать/делить, вычитать и складывать матрици. Поняли, что в матлабе все есть матрица.
В этой части рассмотрим функции для работы с элементами матриц.
Первое, что приходит в голову когда речь заходит о матрицах — диагонали.
На работе с диагоналями построена существенная часть современной математики матриц. Это неотъемлемая и незаменимая часть матриц.
У матриц есть главная диагональ. Часто нужно её либо задать, либо изменить, либо получить её и вывести в отдельную переменную. Делаеться это при помощи функции diag:
>> v = [1 2 3] v = 1 2 3 >> x = diag(v) x = 1 0 0 0 2 0 0 0 3 >> diag(x) ans = 1 2 3
Как видите указав в качестве параметра вектор получим матрицу с элементами вектора на главной диагонали, указав матрицу получим вектор из элементов главной диагонали.
Также можно работать и с другими диоганалями, указывая номер в качестве второго параметра:
>> x = [1 2 3; 4 5 6; 7 8 9] x = 1 2 3 4 5 6 7 8 9 >> diag(x,2) ans = 3 >> diag(x,1) ans = 2 6 >> diag(x,-1) ans = 4 8
Диагонали нумеруются вот так:
Вращение (поворот) матрицы
Для поворота матрици предусмотрена функция rot90:
>> x = [1 2 3; 4 5 6; 7 8 9] x = 1 2 3 4 5 6 7 8 9 >> y = rot90(x) y = 3 6 9 2 5 8 1 4 7 >> y = rot90(x,-1) y = 7 4 1 8 5 2 9 6 3 >> y = rot90(x,-2) y = 9 8 7 6 5 4 3 2 1 >> y = rot90(x,1) y = 3 6 9 2 5 8 1 4 7
Матрица была повернут k раз (второй параметр) против часовой стрелки. По часовой — если k Преобразование размеров матриц
Иногда нужно преобразовать матрицу в массив или в другую матрицу. Для этого нужна функция reshape.
Преобразование матрицы 3х4 в матрицу 2х6:
>> x = [1 2 3 4; 5 6 7 8; 9 10 11 12] x = 1 2 3 4 5 6 7 8 9 10 11 12 >> reshape(x,2,[]) ans = 1 9 6 3 11 8 5 2 10 7 4 12 >> reshape(x,1,[]) % преобразование в массив (матрицу 1х12) ans = 1 5 9 2 6 10 3 7 11 4 8 12
Вычисление количества линейно независимых строк в матрице
Тоже очень простая и полезная функция Matlab:
>> rank(x) ans = 2
Вычисление определителя (детерминанта) матрицы
Для вычисления необходимо чтобы матрица была квадратной.
>> x = [1 2 3; 4 5 6; 7 8 9] x = 1 2 3 4 5 6 7 8 9 >> det(x) ans = 0
Сумма диагональных элементов
Также находиться в одну строку.
>> trace(x) ans = 15
Альтернативным способом нахождения может быть такая конструкция:
sum(diag(x)) ans = 15
Создание матриц
Создавать матрицы нужно часто. И задача эта разнится только вариантами заполнения полученной матрицы.
Матрицу заполненную нулями можно получить при помощи функции zeros.
>> zeros(3) ans = 0 0 0 0 0 0 0 0 0 >> zeros(2,3) ans = 0 0 0 0 0 0
Матрицу единиц получаем так:
>> ones(3) ans = 1 1 1 1 1 1 1 1 1 >> ones(2,3) ans = 1 1 1 1 1 1
Единичная матрица:
>> eye(3) ans = 1 0 0 0 1 0 0 0 1 >> eye(2,3) ans = 1 0 0 0 1 0
Матрица случайных чисел:
>> rand(3) ans = 0.8147 0.9134 0.2785 0.9058 0.6324 0.5469 0.1270 0.0975 0.9575 >> rand(2,3) ans = 0.9649 0.9706 0.4854 0.1576 0.9572 0.8003
Матрица Адамара:
>> hadamard(4) ans = 1 1 1 1 1 -1 1 -1 1 1 -1 -1 1 -1 -1 1
Матрица Паскаля:
>> pascal(3) ans = 1 1 1 1 2 3 1 3 6
Магическая матрица:
>> magic(3) ans = 8 1 6 3 5 7 4 9 2
На этом пока остановимся.