Курс Matlab. Часть 2 — Работа с элементами матриц

В первой части мы познакомились с основами работы в 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

На этом пока остановимся.

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий