- Tipos Inteiros
- Tipos Reais (double, float)
- Números complexos (complex)
- Tipo string
- Estruturas, Classes e Interfaces
- Objeto Array Dinâmico
- Matrizes e vetores
- Conversão de Tipo (Typecasting)
- Tipo void e constante NULL
- Tipos personalizados
- Ponteiros de Objeto
- Referência, Modificador & e Palavra-chave this
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.
Existem os seguintes tipos de dados:
- matrix matriz contendo elementos do tipo double
- matrixf matriz contendo elementos do tipo float
- matrixc matriz contendo elementos do tipo complex.
- vector vetor contendo elementos do tipo double
- vectorf vetor contendo elementos do tipo float
- vectorc vetor contendo elementos do tipo complex
Para uso em funções de modelo, é possível usar a entrada matrix<double>, matrix<float>, matrix<complex>, vector<double>, vector<float>, vector<complex> em vez dos tipos correspondentes.
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) |
Cria uma matriz com uns na diagonal e zeros nos outros lugares |
|
void matrix.Identity(const int rows) |
Cria uma matriz quadrada com uns na diagonal principal |
|
void matrix.Ones(const int rows, const int cols) |
Cria uma nova matriz por número de filas e colunas, preenchida com unidades |
|
void matrix.Zeros(const int rows, const int cols) |
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) |
Cria uma nova matriz pelo número de filas e colunas, preenchidas com um valor escalar |
|
void matrix.Copy(const matrix a) |
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) |
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) |
Cria uma matriz a partir de dados em um arquivo de texto ou binário |
|
void vector.FromString(const string source, const string sep=" ") |
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) |
Cria um vetor com valores uniformemente distribuídos em um dado intervalo |
|
void matrix.Diag(const vector v, const int ndiag=0) |
Extrai uma diagonal ou cria uma matriz diagonal |
|
void matrix.Tri(const int rows, const int cols, const int ndiag=0) |
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) |
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) |
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) |
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() |
Troca os eixos de uma matriz, retorna a matriz modificada |
|
matrix matrix.Dot(const matrix b) |
Produto de duas matrizes |
|
matrix matrix.Inner(const matrix b) |
Produto interno de duas matrizes |
|
matrix matrix.Outer(const matrix b) |
Produto externo de duas matrizes |
|
matrix matrix.MatMul(const matrix b) |
Produto de matriz de duas matrizes |
|
matrix matrix.MatrixPower(const int power) |
Eleva uma matriz quadrada para a potência (inteira) n |
|
matrix matrix.Kron(const matrix b) |
Retorna o produto de Kronecker de duas matrizes |
|
bool matrix.Cholesky(matrix& L) |
Retorna a decomposição de Cholesky |
|
bool matrix.QR(matrix& Q, matrix& R) |
Calcula a fatoração qr de uma matriz |
|
bool matrix.SVD(matrix& U, matrix& V, vector& singular_values) |
Calcula a decomposição SVD |
|
bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values) |
Calcula os valores próprios e os vetores próprios direitos de uma matriz quadrada |
|
bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values) |
Retorna os autovalores e autovetores de uma matriz Hermitiana |
|
bool matrix.EigVals(vector& eigen_values) |
Calcula os valores próprios de uma matriz comum |
|
bool matrix.EigValsH(vector& eigen_values) |
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) |
Retorna a norma de uma matriz ou vetor |
|
double matrix.Norm(const norm) |
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() |
Calcula o determinante de uma matriz |
|
int matrix.Rank() |
Retorna a posto de matriz usando o método Gaussiano |
|
int matrix.SLogDet(int& sign) |
Calcula o sinal e o logaritmo de um determinante de matriz |
|
double matrix.Trace() |
Retorna a soma das diagonais de uma matriz |
|
vector matrix.Solve(const vector b) |
Resolve uma equação de matriz linear ou um sistema de equações algébricas lineares |
|
vector matrix.LstSq(const vector b) |
Resolve um sistema de equações algébricas lineares aproximadamente (para matrizes não quadradas ou degeneradas) |
|
matrix matrix.Inv() |
Calcula o inverso (multiplicativo) de uma matriz |
|
matrix matrix.PInv() |
Calcula o pseudoinverso pelo método Moore-Penrose |
|
int matrix.Compare(const matrix matrix_c, const double epsilon) int matrix.Compare(const matrix matrix_c, const int digits) int vector.Compare(const vector vector_c, const double epsilon) int vector.Compare(const vector vector_c, const int digits) |
|
Compara os elementos de duas matrizes/vetores com a precisão especificada |
double matrix.Flat(const ulong index) bool matrix.Flat(const ulong index,const double value) |
Permite endereçar um elemento da matriz por meio de um índice, e não por meio de dois |
|
double vector.ArgMax() double matrix.ArgMax() vector matrix.ArgMax(const int axis) |
Retorna o índice do valor máximo |
|
double vector.ArgMin() double matrix.ArgMin() vector matrix.ArgMin(const int axis) |
Retorna o índice do valor mínimo |
|
double vector.Max() double matrix.Max() vector matrix.Max(const int axis) |
Retorna o valor máximo em uma matriz/vetor |
|
double vector.Mean() double matrix.Mean() vector matrix.Mean(const int axis) |
Calcula a média aritmética dos valores dos elementos |
|
double vector.Min() double matrix.Min() vector matrix.Min(const int axis) |
Retorna o valor mínimo em uma matriz/vetor |
|
double vector.Sum() double matrix.Sum() vector matrix.Sum(const int axis) |
Executa uma soma de elementos de matriz/vetor, que também pode ser realizada ao longo do(s) eixo(s) especificado(s). |
|
void vector.Clip(const double min_value,const double max_value) void matrix.Clip(const double min_value,const double max_value) |
Limita os elementos de uma matriz/vetor a um intervalo especificado de valores válidos |
|
vector vector.CumProd() vector matrix.CumProd() matrix matrix.CumProd(const int axis) |
Retorna o produto cumulativo (cumulativo) dos elementos da matriz/vetor, incluindo aqueles ao longo do eixo fornecido |
|
vector vector.CumSum() vector matrix.CumSum() matrix matrix.CumSum(const int axis) |
Retorna a soma cumulativa (cumulativa) de elementos de matriz/vetor, incluindo aqueles ao longo do eixo fornecido |
|
double vector.Prod(const double initial=1) double matrix.Prod(const double initial=1) vector matrix.Prod(const int axis,const double initial=1) |
Calcula o produto de elementos de matriz/vetor, que também podem ser executados ao longo do eixo especificado |
|
void matrix.Reshape(const ulong rows, const ulong cols) |
Altera a forma de uma matriz sem mudar seus dados |
|
void matrix.Resize(const ulong rows,const ulong cols) |
Retorna uma nova matriz com a forma especificada |
|
bool matrix.SwapRows(const ulong row1, const ulong row2) |
|
Troca de linhas na matriz |
bool matrix.SwapCols(const ulong col1, const ulong col2) |
|
Troca colunas na matriz |
double vector.Ptp() double matrix.Ptp() vector matrix.Ptp(const int axis) |
Retorna a faixa de valores de matriz/vetor ou o eixo de matriz especificado e equivalente ao resultado Max() - Min() |
|
double vector.Percentile(const int percent) double matrix.Percentile(const int percent) vector matrix.Percentile(const int percent,const int axis) |
Calcula o percentil especificado (percentil) dos valores dos elementos de matriz/vetor ou elementos ao longo do eixo especificado. Os valores válidos do parâmetro de porcentagem estão no intervalo [0, 100] |
|
double vector.Quantile(const int percent) double matrix.Quantile(const int percent) vector matrix.Quantile(const int percent,const int axis) |
Calcula o quantil especificado dos valores dos elementos da matriz/vetor ou dos elementos ao longo do eixo especificado. O intervalo do parâmetro percentual assume valores no intervalo [0, 1] |
|
double vector.Median() double matrix.Median() vector matrix.Median(const int axis) |
Calcula a mediana dos elementos de uma matriz/vetor. A mediana é um valor tal que exatamente metade dos elementos da matriz/vetor será menor que ela, e a outra será maior. |
|
double vector.Average() double matrix.Average() vector matrix.Average(const int axis) |
Calcula a média ponderada aritmética dos valores dos elementos da matriz/vetor. A soma dos pesos no denominador não pode ser 0, mas alguns pesos podem ser 0 |
|
double vector.Std() double matrix.Std() vector matrix.Std(const int axis) |
Calcula o desvio quadrático médio (padrão) dos valores dos elementos de uma matriz/vetor ou um eixo especificado |
|
double vector.Var() double matrix.Var() vector matrix.Var(const int axis) |
Calcula a variância dos valores dos elementos de uma matriz/vetor |
|
double vector.CorrCoef(const vector& v) matrix matrix.CorrCoef() |
Calcula o coeficiente de correlação de Pearson (coeficiente de correlação linear). O coeficiente de correlação está no intervalo [-1, 1] |
|
vector vector.Correlate(const vector& v,enum mode) |
Calcula os valores da função de correlação cruzada (correlação cruzada) de dois vetores. O parâmetro mode determina o modo de cálculo de convolução linear |
|
vector vector.Convolve(const vector& v, enum mode) |
Retorna uma convolução linear discreta de dois vetores de uma sequência. O parâmetro mode determina o modo de cálculo de convolução linear |
|
matrix matrix.Cov() matrix vector.Cov(const vector& v); (matriz final 2 x 2) |
Calcula a matriz de covariância. A covariância de duas amostras (de duas variáveis aleatórias) é uma medida de sua dependência linear |