Álgebra linear com LinearAlgebra.jl

Pacotes
Ferramentas
Manipulação de Dados

Aprenda e utilize álgebra linear com LinearAlgebra.jl.

Autor
Afiliação

Universidade Estadual de Campinas

Data de Publicação

3 de agosto de 2025

Introdução

A Álgebra Linear constitui a espinha dorsal de diversas áreas do conhecimento científico e tecnológico, como análise de dados, processamento de sinais, otimização, estatística multivariada, machine learning e mecânica quântica. Computacionaomente, uma linguagem eficiente como Julia oferece não apenas sintaxe intuitiva, mas também desempenho comparável a linguagens de baixo nível. O pacote LinearAlgebra.jl, integrante da biblioteca padrão, disponibiliza uma ampla variedade de funcionalidades para a manipulação eficiente de vetores, matrizes, resolução de sistemas lineares e decomposições matriciais. Neste post, exploraremos o uso do módulo, abordando desde operações elementares até técnicas mais sofisticadas, como decomposições matriciais, projeções e diagonalização.

Carregando o pacote

O pacote LinearAlgebra.jl já está incluído na instalação padrão do Julia. Para utilizá-lo, basta importá-lo com o comando:

using LinearAlgebra

Utilizaremos também o pacote Random para gerar matrizes aleatórias nos exemplos seguintes:

using Random

Operações elementares com matrizes e vetores

Iniciamos com a criação de vetores e matrizes, bem como a execução de operações fundamentais, como multiplicação, produto escalar e cálculo de normas:

A = [1 2; 3 4]      # matriz 2x2
2×2 Matrix{Int64}:
 1  2
 3  4
v = [1, 2]          # vetor coluna
2-element Vector{Int64}:
 1
 2

A * v               # multiplicação matriz-vetor
2-element Vector{Int64}:
  5
 11
dot(v, v)           # produto escalar
5
norm(v)             # norma (magnitude) do vetor
2.23606797749979

Operações com matrizes

transpose(A)        # transposta
2×2 transpose(::Matrix{Int64}) with eltype Int64:
 1  3
 2  4
inv(A)              # inversa
2×2 Matrix{Float64}:
 -2.0   1.0
  1.5  -0.5
det(A)              # determinante
-2.0
tr(A)               # traço da matriz
5
rank(A)             # posto
2

Resolvendo sistemas lineares

Em Julia, a forma mais eficiente de resolver um sistema linear (Ax = b) consiste no uso do operador barra invertida \, que seleciona automaticamente o algoritmo numérico apropriado com base nas características da matriz:

A = [3 1; 1 2]
2×2 Matrix{Int64}:
 3  1
 1  2
b = [9, 8]
2-element Vector{Int64}:
 9
 8
x = A \ b           # solução do sistema
2-element Vector{Float64}:
 2.0
 3.0

Decomposições matriciais

Decomposições permitem entender a estrutura interna de uma matriz, facilitando a resolução de sistemas, o cálculo de autovalores, compressões e outras aplicações numéricas. A seguir, exploramos as principais disponíveis no LinearAlgebra.jl:

LU (Fatoração de matrizes quadradas)

lu(A)
LU{Float64, Matrix{Float64}, Vector{Int64}}
L factor:
2×2 Matrix{Float64}:
 1.0       0.0
 0.333333  1.0
U factor:
2×2 Matrix{Float64}:
 3.0  1.0
 0.0  1.66667

QR (Bastante usada em regressão linear)

qr(A)
LinearAlgebra.QRCompactWY{Float64, Matrix{Float64}, Matrix{Float64}}
Q factor: 2×2 LinearAlgebra.QRCompactWYQ{Float64, Matrix{Float64}, Matrix{Float64}}
R factor:
2×2 Matrix{Float64}:
 -3.16228  -1.58114
  0.0       1.58114

SVD (Decomposição em valores singulares)

svd(A)
SVD{Float64, Float64, Matrix{Float64}, Vector{Float64}}
U factor:
2×2 Matrix{Float64}:
 -0.850651  -0.525731
 -0.525731   0.850651
singular values:
2-element Vector{Float64}:
 3.6180339887498953
 1.3819660112501049
Vt factor:
2×2 Matrix{Float64}:
 -0.850651  -0.525731
 -0.525731   0.850651

Autovalores e autovetores

eigvals(A)
2-element Vector{Float64}:
 1.381966011250105
 3.618033988749895
eigvecs(A)
2×2 Matrix{Float64}:
  0.525731  -0.850651
 -0.850651  -0.525731

Álgebra linear com matrizes aleatórias usando random

A geração de matrizes aleatórias permite simulações e testes práticos. Veja exemplos de operações úteis com matrizes densas:

Random.seed!(123)
TaskLocalRNG()
M = rand(3,3)      # matriz 3x3 com elementos aleatórios
3×3 Matrix{Float64}:
 0.9063    0.512083  0.427328
 0.443494  0.253849  0.867547
 0.745673  0.334152  0.581912

norm(M)            # norma de Frobenius
1.8128125670179398
I                  # matriz identidade
UniformScaling{Bool}
true*I
M'                 # transposta conjugada
3×3 adjoint(::Matrix{Float64}) with eltype Float64:
 0.9063    0.443494  0.745673
 0.512083  0.253849  0.334152
 0.427328  0.867547  0.581912

Diagonalização de matrizes

Uma matriz \(A\) é diagonalizável se existe uma matriz invertível \(P\) tal que \(D = P^{-1} A P\) seja diagonalizável.

V = eigvecs(A)
2×2 Matrix{Float64}:
  0.525731  -0.850651
 -0.850651  -0.525731
D = Diagonal(eigvals(A))
2×2 Diagonal{Float64, Vector{Float64}}:
 1.38197   ⋅ 
  ⋅       3.61803
P = V
2×2 Matrix{Float64}:
  0.525731  -0.850651
 -0.850651  -0.525731
P_inv = inv(P)
2×2 Matrix{Float64}:
  0.525731  -0.850651
 -0.850651  -0.525731
P_inv * A * P  D   # Verificação
true

Obs.: Nem toda matriz é diagonalizável. Em aplicações práticas, a diagonalização é útil, por exemplo, para calcular potências de matrizes com eficiência.

Espaços vetorias e projeções ortogonais

Dada uma matriz \(A\), seus espaços fundamentais (imagem, núcleo) são essenciais para entender soluções de sistemas e dimensões associadas:

nullspace(A)                 # espaço nulo (ker A)
2×0 Matrix{Float64}
colspace = A[:, :]           # espaço coluna (imagem)
2×2 Matrix{Int64}:
 3  1
 1  2

nullspace([1 2 3; 2 4 6] )   # Base não trivial
3×2 Matrix{Float64}:
 -0.935937   -0.229334
  0.342011   -0.772861
  0.0839716   0.591685

E para projetar um vetor \(b\) no subespaço gerado pelas colunas de \(A\):

proj = A * (A \ b)
2-element Vector{Float64}:
 9.0
 8.0

Essa projeção ortogonal é usada em mínimos quadrados.

Conclusão

O pacote LinearAlgebra.jl oferece ferramentas robustas, rápidas e versáteis para o tratamento de problemas de álgebra linear em Julia. A combinação com bibliotecas de visualização como Plots.jl, já mostradas aqui no blog, e outras de aprendizado de máquina torna sua utilização ainda mais poderosa em aplicações científicas e tecnológicas. Sua implementação é baseada em bibliotecas otimizadas como BLAS e LAPACK, garantindo um desempenho extremamente competitivo. O estudo da Álgebra Linear computacionalmente não apenas facilita a resolução de problemas práticos como também aprofunda a intuição matemática sobre transformações lineares, autovalores, espaços vetoriais e estabilidade numérica. Para consolidar seus conhecimentos, recomenda-se também a leitura da documentação oficial e a prática com aplicações reais em modelagem, machine learning e análise de dados.

Nota

Ferramentas de IA foram utilizadas para correção ortográfica e aprimoramento do texto.