Документация Engee
Notebook

Основные матричные операции

Этот пример показывает основные методы и функции для работы с матрицами в Engee.

Базовые операции с матрицами

Во-первых зададим вектор из 9 элементов.

In [ ]:
a = [1 2 3 4 6 4 3 9 10]
Out[0]:
1×9 Matrix{Int64}:
 1  2  3  4  6  4  3  9  10

Увеличим значение каждого элемента на 2 и сохраним результат в новом векторе. На языке Julia это делается с помощью оператора .+.

In [ ]:
b = a .+ 2
Out[0]:
1×9 Matrix{Int64}:
 3  4  5  6  8  6  5  11  12

Построим график результирующего вектора-строки b. Для визуализации необходимо подключить библиотеку Plots.jl. И на вход функции plot() подать вектор-столбец. Для этого транспонируем b с помощью оператора '.

In [ ]:
c = b'
Out[0]:
9×1 adjoint(::Matrix{Int64}) with eltype Int64:
  3
  4
  5
  6
  8
  6
  5
 11
 12
In [ ]:
using Plots

plot(c)
Out[0]:

Также можем сделать другой тип графика. Например, отобразим значения вектора с в виде диаграммы. Для этого нужно сначала вызвать функцию plotlyjs().

In [ ]:
plotlyjs()
bar(c, xlabel="месяц",ylabel="количество")
Out[0]:

Чтобы создать прямоугольную матрицу, необходимо указать строки через ;.

In [ ]:
A = [1 2 0; 2 5 -1; 4 10 -1]
Out[0]:
3×3 Matrix{Int64}:
 1   2   0
 2   5  -1
 4  10  -1

Транспонируем матрицу и результат запишем в другую переменную, например B. Перемножим матрицу A с получившейся матрицей B.

In [ ]:
B = A'
Out[0]:
3×3 adjoint(::Matrix{Int64}) with eltype Int64:
 1   2   4
 2   5  10
 0  -1  -1
In [ ]:
C = A * B
Out[0]:
3×3 Matrix{Int64}:
  5  12   24
 12  30   59
 24  59  117

Но также мы можем умножить каждый элемент матрицы А на каждый элемент матрицы В, как мы это делали с векторами ранее. То есть перемножение матриц будет происходить не по правилу "строка на столбец", а поэлементно.

In [ ]:
D = A .* B
Out[0]:
3×3 Matrix{Int64}:
 1    4    0
 4   25  -10
 0  -10    1

Давайте решим простое уравнение следующего вида $$ A*x=b $$ зададим $b$ в виде вектора-столбца.

In [ ]:
b = [1,3,5]
Out[0]:
3-element Vector{Int64}:
 1
 3
 5
In [ ]:
#Решение уравнения
x = A\b
Out[0]:
3-element Vector{Float64}:
  1.0
 -0.0
 -1.0
In [ ]:
#Покажем, что Ax=b
r = A*x - b
Out[0]:
3-element Vector{Float64}:
 0.0
 0.0
 0.0

Матричные операции из раздела линейной алгебры

Библиотека LinearAlgebra позволяет работать различными характеристиками матриц и матричными вычислениями. Например, найдем собственные значения матрицы А. Для этого применим функцию eigvals().

In [ ]:
using LinearAlgebra
eigvals(A)
Out[0]:
3-element Vector{Float64}:
 0.267949192431123
 0.9999999999999999
 3.732050807568875

Найдем определитель заданной матрцы, передав ее в качестве входного значения в функцию det().

In [ ]:
M = [1 0; 2 2]
det(M)
Out[0]:
2.0

Также можно выполнить сингулярную декомпозицию матрицы А, с помощью функции svd().

In [ ]:
svd(A)
Out[0]:
SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}
U factor:
3×3 Matrix{Float64}:
 -0.179911  -0.521682   0.833954
 -0.443397   0.799785   0.404652
 -0.878084  -0.296971  -0.375203
singular values:
3-element Vector{Float64}:
 12.317062005786141
  0.5148992632302947
  0.15767781817449114
Vt factor:
3×3 Matrix{Float64}:
 -0.371764  -0.922107    0.107289
 -0.213631  -0.0274913  -0.976527
  0.903412  -0.385958   -0.18677

Больше операций с матрицами из линейной алгебры можно найти в разделе Линейная алгебра.