Matrices y vectores

El tipo vector es un tipo de datos especial en MQL5 que permite realizar operaciones con vectores. Un vector es un array (matriz) unidimensional de tipo double. Es uno de los conceptos fundamentales del álgebra lineal, utilizado en muchos campos de la ciencia, incluida la física, la geometría y otros. Los vectores se usan para resolver sistemas de ecuaciones lineales, en gráficos 3D y en otras áreas de aplicación. Los vectores se pueden sumar y multiplicar. La longitud o distancia entre vectores se puede obtener mediante la Norma. En programación, los vectores se representan generalmente con la ayuda de arrays de elementos homogéneos que pueden no tener operaciones vectoriales regulares, es decir, cuando los arrays no se pueden sumar o multiplicar, y no tienen una norma.

Los vectores se pueden representar como vectores de fila y vectores de cadena cuando se trabaja con matrices. Además, los vectores en álgebra lineal utilizan los conceptos de covarianza y contravarianza. Estos conceptos no suponen ninguna diferencia a la hora de escribir un código en MQL5, ya que solo el programador decide qué es cada objeto del tipo vectorial. Por ejemplo, puede ser vector de rotación, de desplazamiento o de compresión en gráficos 3D.

En términos generales, desde el punto de vista del álgebra lineal, un número también es un vector, pero en un espacio vectorial unidimensional. Un vector en sí mismo puede considerarse como un caso especial de una matriz.

El tipo matrix es otro tipo de datos especial en MQL5 para representar matrices. Una matriz es en realidad un array bidimensional del tipo double. Los vectores y matrices se han introducido en MQL5 para facilitar las operaciones con ciertos tipos de conjuntos de datos. Con ellos, los desarrolladores pueden beneficiarse de las posibilidades del álgebra lineal de una forma sencilla y similar a las matemáticas. Las matrices se pueden usar para escribir sistemas de ecuaciones diferenciales o lineales de forma compacta. El número de filas de la matriz se corresponde con el número de ecuaciones, mientras que el número de columnas es igual al número de incógnitas. Como resultado, los sistemas de ecuaciones lineales se pueden resolver utilizando operaciones con matrices.

Existen los siguientes tipos de datos:

  • matrix – matriz que contiene elementos de tipo double
  • matrixf – matriz que contiene elementos del tipo float
  • matrix – matriz que contiene elementos del tipo complex
  • vector – vector que contiene elementos del tipo double
  • vectorf – vector que contiene elementos del tipo float
  • vectorc – vector que contiene elementos del tipo complex

Para su uso en funciones de plantilla, podemos utilizar la entrada matrix<double>, matrix<float>, matrix<complex>, vector<double>, vector<float>, vector<complex> en lugar de los tipos correspondientes.

Para las matrices se definen las siguientes operaciones algebraicas:

  • Adición de matrices del mismo tamaño
  • Multiplicación de matrices de tamaño adecuado: el número de columnas en la matriz izquierda debe ser igual al número de filas en la matriz derecha
  • Multiplicación de matrices por un vector de columna; multiplicación de un vector de fila por una matriz según la regla de multiplicación de matrices. En este sentido, el vector supone un caso especial de una matriz.
  • Multiplicación de matrices por un número, es decir, por un escalar

Las matemáticas consideran muchos tipos de matrices distintos. Por ejemplo, matrices de identidad, simétricas, asimétricas, triangulares superior e inferior y de otros tipos. Varias formas normales juegan un papel importante en la teoría de matrices. Representan una determinada forma canónica de una matriz, que se puede obtener con la ayuda de determinadas transformaciones. En la práctica, se usan formas normales con propiedades adicionales, como por ejemplo la estabilidad.

El uso de vectores y matrices, o mejor dicho, de métodos especiales de los tipos relevantes, permite crear un código más simple, claro y conciso, cercano a la notación matemática. Con estos métodos, podrá evitar la necesidad de crear ciclos anidados o tener en cuenta la indexación correcta de arrays en los cálculos. Por consiguiente, la utilización de estos métodos aumenta la fiabilidad y la velocidad de desarrollo de programas complejos.

 

Lista de métodos de matrices y vectoriales

Los tipos matrix y vector incluyen métodos que se corresponden con los métodos relevantes de la biblioteca NumPy. Con estos métodos, podrá traducir algoritmos y códigos de Python a MQL5 con un esfuerzo mínimo. Muchas tareas de procesamiento de datos, ecuaciones matemáticas, redes neuronales y tareas de aprendizaje automático se pueden resolver con la ayuda de bibliotecas y métodos de Python listos para usar.

Método matrix/vector

Método análogo en NumPy

Descripción

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

eye

Construye una matriz con unidades en la diagonal y ceros en el resto

void matrix.Identity(const int rows)

identity

Construye una matriz cuadrada con unidades en la diagonal principal

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

ones

Construye una nueva matriz de filas y columnas dadas, rellenadas con unidades

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

zeros

Construye una nueva matriz de filas y columnas dadas, rellenadas con ceros

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

full

Construye una nueva matriz de filas y columnas dadas, rellenadas con un valor escalar

void matrix.Copy(const matrix a)

copy

Construye una copia de la matriz dada

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

frombuffer

Construye una matriz creada a partir de un array unidimensional

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

fromfile

Construye una matriz a partir de los datos en un archivo de texto o binario

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

fromstring

Construye un vector inicializado a partir de los datos de texto en una cadena

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

arange

Construye valores espaciados uniformemente dentro de un intervalo dado

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

diag

Extrae una diagonal o construye una matriz diagonal

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

tri

Construye una matriz con unidades en la diagonal dada y por debajo de esta, y ceros en cualquier otro lugar

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

tril

Retorna una copia de una matriz con elementos puestos a cero por encima de la k-ésima diagonal

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

triu

Retorna una copia de una matriz con elementos puestos a cero por debajo de la k-ésima diagonal

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

vander

Genera una matriz de Vandermonde

vector matrix.Row(const unsigned nrow)

 

Retorna un vector de fila

vector matrix.Col(const unsigned ncol)

 

Retorna un vector de columna

unsigned matrix.Rows()

 

Retorna el número de filas en una matriz

unsigned matrix.Cols()

 

Retorna el número de columnas en una matriz

void matrix.Init()

 

Inicializa una matriz

matrix matrix.Transpose()

transpose

Invierte o permuta los ejes de una matriz; retorna la matriz modificada

matrix matrix.Dot(const matrix b)

dot

Producto escalar de dos matrices

matrix matrix.Inner(const matrix b)

inner

Producto interno de dos matrices

matrix matrix.Outer(const matrix b)

outer

Calcula el producto externo de dos matrices

matrix matrix.MatMul(const matrix b)

matmul

Producto matricial de dos matrices

matrix matrix.MatrixPower(const int power)

matrix_power

Eleva una matriz cuadrada a la potencia (entera) n

matrix matrix.Kron(const matrix b)

kron

Retorna el producto de Kronecker de dos matrices

bool matrix.Cholesky(matrix& L)

cholesky

Retorna la descomposición de Cholesky

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

qr

Calcula la factorización qr de una matriz

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

svd

Valor singular de descomposición

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

eig

Calcula los valores propios y los vectores propios derechos de una matriz cuadrada

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

eigh

Retorna los valores propios y vectores propios de una matriz hermitiana

bool matrix.EigVals(vector& eigen_values)

eigvals

Calcula los valores propios de una matriz general

bool matrix.EigValsH(vector& eigen_values)

eigvalsh

Calcula los valores propios de una matriz hermitiana

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

 

Descomposición LU de una matriz como el producto de una matriz triangular inferior y una matriz triangular superior

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

 

Descomposición LUP con pivoteo parcial, referido a la descomposición LU con permutaciones de fila únicamente:PA=LU

double matrix.Norm(const norm)

norm

Retorna la norma de una matriz o vector

double matrix.Cond(const norm)

cond

Calcula el número de condición de una matriz

vector matrix.Spectrum()

 

Calcula el espectro de una matriz como el conjunto de sus valores propios del producto AT*A

double matrix.Det()

det

Calcula el determinante de un array

int matrix.Rank()

matrix_rank

Retorna el rango de matriz de un array usando el método gaussiano

int matrix.SLogDet(int& sign)

slogdet

Calcula el signo y el logaritmo del determinante de un array

double matrix.Trace()

trace

Retorna la suma a lo largo de las diagonales de la matriz

vector matrix.Solve(const vector b)

solve

Resuelve una ecuación de matriz lineal o un sistema de ecuaciones algebraicas lineales

vector matrix.LstSq(const vector b)

lstsq

Retorna la solución de los mínimos cuadrados de ecuaciones algebraicas lineales (para matrices no cuadradas o degeneradas)

matrix matrix.Inv()

inv

Calcula la inversa (multiplicativa) de una matriz

matrix matrix.PInv()

pinv

Calcula la pseudo-inversa de una matriz con el método de 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 los elementos de dos matrices/vectores con la precisión indicada

double matrix.Flat(const ulong index)

bool matrix.Flat(const ulong index,const double value)

flat

Permite dirigir un elemento de la matriz a través de un índice, en lugar de dos

double vector.ArgMax()

double matrix.ArgMax()

vector matrix.ArgMax(const int axis)

argmax

Retorna el índice del valor máximo

double vector.ArgMin()

double matrix.ArgMin()

vector matrix.ArgMin(const int axis)

argmin

Retorna el índice del valor mínimo

double vector.Max()

double matrix.Max()

vector matrix.Max(const int axis)

max

Retorna el valor máximo en una matriz/vector

double vector.Mean()

double matrix.Mean()

vector matrix.Mean(const int axis)

mean

Calcula la media aritmética de los valores de los elementos

double vector.Min()

double matrix.Min()

vector matrix.Min(const int axis)

min

Retorna el valor mínimo en una matriz/vector

double vector.Sum()

double matrix.Sum()

vector matrix.Sum(const int axis)

sum

Ejecuta la suma de los elementos de una matriz/vector, que también se puede realizar según el eje(s) indicado(s).

void vector.Clip(const double min_value,const double max_value)

void matrix.Clip(const double min_value,const double max_value)

clip

Limita los elementos de una matriz/vector con el intervalo indicado de valores permitidos

vector vector.CumProd()

vector matrix.CumProd()

matrix matrix.CumProd(const int axis)

cumprod

Retorna el producto acumulado de los elementos de un array/vector, incluido en el eje indicado

vector vector.CumSum()

vector matrix.CumSum()

matrix matrix.CumSum(const int axis)

cumsum

Retorna la suma acumulada de los elementos de una matriz/vector, incluido en el eje indicado

double vector.Prod(const double initial=1)

double matrix.Prod(const double initial=1)

vector matrix.Prod(const int axis,const double initial=1)

prod

Calcula el producto de los elementos de una matriz/vector, que también se puede ejecutar según el eje indicado

void matrix.Reshape(const ulong rows, const ulong cols)

reshape

Cambia la forma de una matriz sin modificar sus datos

void matrix.Resize(const ulong rows,const ulong cols)

resize

Retorna una nueva matriz con la forma indicada

bool matrix.SwapRows(const ulong row1, const ulong row2)

 

Muda de sitio las líneas en una matriz

bool matrix.SwapCols(const ulong col1, const ulong col2)

 

Muda de sitio las columnas en una matriz

double vector.Ptp()

double matrix.Ptp()

vector matrix.Ptp(const int axis)

ptp

Retorna el intervalo de valores de una matriz/vector o del eje indicado de una matriz y del equivalente al resultado Max() - Min()

double vector.Percentile(const int percent)

double matrix.Percentile(const int percent)

vector matrix.Percentile(const int percent,const int axis)

percentile

Calcula el percentil indicado de los valores de los elementos de una matriz/vector o de los elementos a lo largo del eje indicado. Los valores permitidos del parámetro percent se encuentran en el intervalo [0, 100]

double vector.Quantile(const int percent)

double matrix.Quantile(const int percent)

vector matrix.Quantile(const int percent,const int axis)

quantile

Calcula el cuantil indicado de los valores de los elementos de una matriz/vector o de los elementos a lo largo del eje indicado. El intervalo de valores del parámetro percent adopta los valores en el intervalo [0, 1]

double vector.Median()

double matrix.Median()

vector matrix.Median(const int axis)

median

Calcula la mediana de los elementos de una matriz/vector. La mediana es un valor tal que exactemente la mitad de los elementos de una matriz/vector resultará menor a él, mientras que la otra será mayor.

double vector.Average()

double matrix.Average()

vector matrix.Average(const int axis)

average

Calcula la media aritmética ponderada de los elementos de una matriz/vector. La suma de los pesos en el denominador no puede ser igual a 0, pero ciertos pesos pueden ser iguales a 0

double vector.Std()

double matrix.Std()

vector matrix.Std(const int axis)

std

Calcula la desviación media cuadrática (estándar) de los valores de los elementos de una matriz/vector o del eje indicado

double vector.Var()

double matrix.Var()

vector matrix.Var(const int axis)

var

Calcula la varianza de los valores de los elementos de una matriz/vector

double vector.CorrCoef(const vector& v)

matrix matrix.CorrCoef()

corrcoef

Calcula el coeficiente de correlación de Pearson (coeficiente de correlación lineal). El coeficiente de correlación se encuentra en el intervalo [-1, 1]

vector vector.Correlate(const vector& v,enum mode)

correlate

Calcula los valores de la función de correlación mutua (correlación cruzada) de dos vectores. El parámetro "mode" determina el modo de cálculo de la convolución lineal

vector vector.Convolve(const vector& v, enum mode)

convolve

Retorna la convolución lineal discreta de dos vectores El parámetro "mode" determina el modo de cálculo de la convolución lineal

matrix matrix.Cov()

matrix vector.Cov(const vector& v); (matriz resultante 2 x 2)

cov

Calcula la matriz de covarianza.  La covarianza de dos muestras (dos magnitudes aleatorias) es la medida de su dependencia lineal