Matrizes e vetores

Um vector é um tipo de dados especial em MQL5 para trabalhar com vetores, que é uma matriz unidimensional do tipo double. O vetor é um dos conceitos fundamentais da álgebra linear e é usado ativamente em muitos campos da ciência, incluindo física, geometria e outros. Os vetores são usados para resolver sistemas de equações lineares, em gráficos 3D, etc. Com base nos vetores, são definidas operações de adição e multiplicação, e é introduzido o conceito de "Norma" para obter o comprimento ou distância entre vetores. Na programação, os vetores são normalmente representados por matrizes de elementos homogêneos sobre os quais não podem ser realizadas operações vetoriais convencionais, ou seja, as matrizes não podem ser adicionadas umas às outras, multiplicadas umas pelas outras, e não existe o conceito de norma.

Os vetores podem ser representados como um vetor de coluna ou como um vetor de linha quando se trabalha com matrizes. Além disso, em álgebra linear os vetores usam conceitos como covariância e contravariância. Para fins de escrita de código em MQL5, essas diferenças não importam, pois apenas o programador decide qual é cada objeto do tipo vector. Por exemplo, pode ser um vetor de rotação, deslocamento, compressão e assim por diante quando se trata de gráficos 3D.

De um modo geral, do ponto de vista da álgebra linear, um número também é um vetor, só que em um espaço unidimensional. Além disso, um vetor pode ser considerado um caso especial de matriz.

Um matrix é outro tipo de dados especial em MQL5 para representar matrizes, que na verdade é uma matriz bidimensional do tipo double. Vetores e matrizes foram introduzidos na linguagem MQL5 para facilitar o trabalho com certos tipos de conjuntos de dados. Eles permitem que os programadores tirem total proveito da álgebra linear da forma mais simples e próxima da matemática possível. As matrizes são amplamente utilizadas para escrever sistemas compactos de equações algébricas lineares ou diferenciais. Nesse caso, o número de linhas da matriz corresponde ao número de equações e o número de colunas corresponde ao número de incógnitas. Como resultado, a solução de sistemas de equações lineares é reduzida a operações em matrizes.

Para uma matriz, são definidas as seguintes operações algébricas:

  • adição de matrizes do mesmo tamanho;
  • multiplicação de matrizes de tamanho adequado, com o número de colunas da matriz à esquerda correspondendo ao número de filas da matriz à direita;
  • multiplicação de matrizes por um vetor de coluna e multiplicação de um vetor de linha por uma matriz de acordo com a regra de multiplicação de matrizes. Ou seja, o vetor é, nesse sentido, um caso especial da matriz;
  • multiplicação de matriz por um número, ou seja, por um escalar.

No campo da matemática, são considerados muitos tipos e tipos diferentes de matrizes. Por exemplo, identidade, simétrica, assimétrica, triangular superior (triangular inferior) e outras matrizes. De particular importância na teoria da matriz são todos os tipos de formas normais, ou seja, a forma canônica à qual uma matriz pode ser reduzida através da substituição de coordenadas. Na prática, são utilizadas formas normais que possuem propriedades adicionais, tais como estabilidade.

O uso de vetores e matrizes, ou melhor, de métodos especiais que estes tipos de dados possuem, permite escrever um código mais simples, mais curto e mais claro que se aproxima da notação matemática. Isto poupa ao programador o trabalho de criar laços aninhados e de lembrar de indexar corretamente as matrizes que estão envolvidas no cálculo. Isto aumenta a confiabilidade e a velocidade de desenvolvimento de programas complexos.

 

Lista de métodos implementados em matrix e vector

Os tipos matrix e vector têm métodos incorporados que correspondem às contrapartidas da biblioteca NumPy. Desta forma, você pode migrar algoritmos e códigos de Python para MQL5 com um esforço mínimo. Assim, muitos problemas de processamento de dados, resolução de equações matemáticas, redes neurais e aprendizagem de máquinas podem ser resolvidos usando bibliotecas de linguagem Python prontas para uso.

Método matrix/vector

Contraparte em NumPy

Descrição

void matrix.Eye(const int rows, const int cols, const int ndiag=0)

eye

Cria uma matriz com uns na diagonal e zeros nos outros lugares

void matrix.Identity(const int rows)

identity

Cria uma matriz quadrada com uns na diagonal principal

void matrix.Ones(const int rows, const int cols)

ones

Cria uma nova matriz por número de filas e colunas, preenchida com unidades

void matrix.Zeros(const int rows, const int cols)

zeros

Cria uma nova matriz por número de filas e colunas, preenchida com zeros

void matrix.Full(const int rows, const int cols, const scalar value)

full

Cria uma nova matriz pelo número de filas e colunas, preenchidas com um valor escalar

void matrix.Copy(const matrix a)

copy

Cria uma cópia de dada matriz

void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0)

frombuffer

Cria uma matriz a partir de uma matriz unidimensional

void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0)

fromfile

Cria uma matriz a partir de dados em um arquivo de texto ou binário

void vector.FromString(const string source, const string sep=" ")

fromstring

Cria um vetor baseado em dados de texto a partir de uma string

void vector.Arange(const scalar start, const scalar stop, const scalar step=1)

arange

Cria um vetor com valores uniformemente distribuídos em um dado intervalo

void matrix.Diag(const vector v, const int ndiag=0)

diag

Extrai uma diagonal ou cria uma matriz diagonal

void matrix.Tri(const int rows, const int cols, const int ndiag=0)

tri

Cria uma matriz com uns na diagonal indicada e abaixo e zeros nos outros lugares

void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0)

tril

Retorna uma cópia da matriz com elementos zerados sobre a diagonal k

void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0)

triu

Retorna uma cópia da matriz com elementos zerados abaixo da diagonal k

void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false)

vander

Cria uma matriz de Vandermonde

vector matrix.Row(const unsigned nrow)

 

Retorna um vetor de linha

vector matrix.Col(const unsigned ncol)

 

Retorna um vetor de coluna

unsigned matrix.Rows()

 

Retorna o número de linhas em uma matriz

unsigned matrix.Cols()

 

Retorna o número de colunas em uma matriz

void matrix.Init()

 

Inicializa uma matriz

matrix matrix.Transpose()

transpose

Troca os eixos de uma matriz, retorna a matriz modificada

matrix matrix.Dot(const matrix b)

dot

Produto de duas matrizes

matrix matrix.Inner(const matrix b)

inner

Produto interno de duas matrizes

matrix matrix.Outer(const matrix b)

outer

Produto externo de duas matrizes

matrix matrix.MatMul(const matrix b)

matmul

Produto de matriz de duas matrizes

matrix matrix.MatrixPower(const int power)

matrix_power

Eleva uma matriz quadrada para a potência (inteira) n

matrix matrix.Kron(const matrix b)

kron

Retorna o produto de Kronecker de duas matrizes

bool matrix.Cholesky(matrix& L)

cholesky

Retorna a decomposição de Cholesky

bool matrix.QR(matrix& Q, matrix& R)

qr

Calcula a fatoração qr de uma matriz

bool matrix.SVD(matrix& U, matrix& V, vector& singular_values)

svd

Calcula a decomposição SVD

bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values)

eig

Calcula os valores próprios e os vetores próprios direitos de uma matriz quadrada

bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values)

eigh

Retorna os autovalores e autovetores de uma matriz Hermitiana

bool matrix.EigVals(vector& eigen_values)

eigvals

Calcula os valores próprios de uma matriz comum

bool matrix.EigValsH(vector& eigen_values)

eigvalsh

Calcula os valores próprios de uma matriz Hermitiana

bool matrix.LU(matrix& L, matrix& U)

 

Executa a decomposição LU de uma matriz como o produto de uma matriz triangular inferior e uma matriz triangular superior

bool matrix.LUP(matrix& L, matrix& U, matrix& P)

 

Executa a decomposição LUP de rotação parcial, que é fatoração LU com permutações de linha: PA = LU

double matrix.Norm(const norm)

norm

Retorna a norma de uma matriz ou vetor

двойная матрица.Cond (постоянная норма)

cond

Calcula o número da condição de uma matriz

vector matrix.Spectrum()

 

Calcula o espectro de uma matriz como um conjunto de seus autovalores a partir do produto AT*A

double matrix.Det()

det

Calcula o determinante de uma matriz

int matrix.Rank()

matrix_rank

Retorna a posto de matriz usando o método Gaussiano

int matrix.SLogDet(int& sign)

slogdet

Calcula o sinal e o logaritmo de um determinante de matriz

double matrix.Trace()

trace

Retorna a soma das diagonais de uma matriz

vector matrix.Solve(const vector b)

solve

Resolve uma equação de matriz linear ou um sistema de equações algébricas lineares

vector matrix.LstSq(const vector b)

lstsq

Resolve um sistema de equações algébricas lineares aproximadamente (para matrizes não quadradas ou degeneradas)

matrix matrix.Inv()

inv

Calcula o inverso (multiplicativo) de uma matriz

matrix matrix.PInv()

pinv

Calcula o pseudoinverso pelo método Moore-Penrose

int matrix.Compare(const matrix matrix_c, const double epsilon)

 

Compara duas matrizes