- Tipos de matrices y vectores
- Creación e inicialización de matrices y vectores
- Copiar matrices, vectores y arrays
- Copiar series temporales en matrices y vectores
- Copiar el historial de ticks en matrices y vectores
- Evaluación de expresiones con matrices y vectores
- Manipulación de matrices y vectores
- Productos de matrices y vectores
- Transformaciones (descomposición) de matrices
- Obtener estadísticas
- Características de matrices y vectores
- Resolución de ecuaciones
- Métodos de aprendizaje automático
Productos de matrices y vectores
La multiplicación de matrices es una de las operaciones básicas de diversos métodos numéricos. Por ejemplo, suele utilizarse al aplicar métodos de propagación hacia delante y hacia atrás en capas de redes neuronales.
También se pueden atribuir varios tipos de convoluciones a la categoría de productos matriciales. El grupo de tales funciones en MQL5 tiene este aspecto:
- MatMul: producto matricial de dos matrices
- Power: elevar una matriz cuadrada a la potencia entera especificada
- Inner: producto interior de dos matrices
- Outer: producto exterior de dos matrices o dos vectores
- Kron: producto Kronecker de dos matrices, una matriz y un vector, un vector y una matriz, o dos vectores
- CorrCoef: calcular la correlación de Pearson entre filas o columnas de una matriz, o entre vectores
- Cov: calcular la matriz de covarianza de filas o columnas de una matriz, o entre dos vectores
- Correlate: calcular la correlación mutua (correlación cruzada) de dos vectores
- Convolve: calcular la convolución lineal discreta de dos vectores
- Dot: producto escalar de dos vectores
Para dar una idea general de cómo manejar estos métodos, daremos sus prototipos (en el siguiente orden: de matriz, pasando por matriz-vector mixto, a vector).
matrix<T> matrix<T>::MatMul(const matrix<T> &m)
matrix<T> matrix<T>::Power(const int power)
matrix<T> matrix<T>::Inner(const matrix<T> &m)
matrix<T> matrix<T>::Outer(const matrix<T> &m)
matrix<T> matrix<T>::Kron(const matrix<T> &m)
matrix<T> matrix<T>::Kron(const vector<T> &v)
matrix<T> matrix<T>::CorrCoef(const bool rows = true)
matrix<T> matrix<T>::Cov(const bool rows = true)
matrix<T> vector<T>::Cov(const vector<T> &v)
T vector<T>::CorrCoef(const vector<T> &v)
vector<T> vector<T>::Correlate(const vector<T> &v, ENUM_VECTOR_CONVOLVE mode)
vector<T> vector<T>::Convolve(const vector<T> &v, ENUM_VECTOR_CONVOLVE mode)
matrix<T> vector<T>::Outer(const vector<T> &v)
matrix<T> vector<T>::Kron(const matrix<T> &m)
matrix<T> vector<T>::Kron(const vector<T> &v)
T vector<T>::Dot(const vector<T> &v)
He aquí un ejemplo sencillo del producto matricial de dos matrices utilizando el método MatMul:
matrix a = {{1, 0, 0},
|
Las matrices de la forma A[M,N] * B[N,K] = C[M,K] pueden multiplicarse, es decir, el número de columnas de la primera matriz debe ser igual al número de filas de la segunda matriz. Si las dimensiones no son coherentes, el resultado es una matriz vacía.
Al multiplicar una matriz y un vector se permiten dos opciones:
- El vector horizontal (fila) se multiplica por la matriz de la derecha, la longitud del vector es igual al número de filas de la matriz.
- La matriz se multiplica por un vector vertical (columna) de la derecha, la longitud del vector es igual al número de columnas de la matriz.
Los vectores también pueden multiplicarse entre sí. En MatMul, esto equivale siempre al producto punto (el método Dot) de un vector fila por un vector columna, y la opción cuando se multiplica un vector columna por un vector fila y se obtiene una matriz se admite en otro método: Outer.
Vamos a demostrar el producto Outer del vector v5 por el vector v3, y en orden inverso. En ambos casos, un vector columna está implícito a la izquierda, y un vector fila está implícito a la derecha.
vector v3 = {1, 2, 3};
|