- 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
Transformaciones (descomposición) de matrices
Las transformaciones matriciales son las operaciones más utilizadas cuando se trabaja con datos. No obstante, muchas transformaciones complejas no pueden realizarse analíticamente y con absoluta precisión.
Las transformaciones matriciales (o, dicho de otro modo, las descomposiciones) son métodos que descomponen una matriz en sus partes componentes, lo que facilita el cálculo de operaciones matriciales más complejas. Los métodos de descomposición de matrices, también llamados métodos de factorización de matrices, son la base de los algoritmos de álgebra lineal, como la resolución de sistemas de ecuaciones lineales y el cálculo de la inversa de una matriz o determinante.
En concreto, la descomposición en valores singulares (SVD, por sus siglas en inglés) es muy utilizada en el aprendizaje automático, ya que permite representar la matriz original como producto de otras tres matrices. La descomposición SVD se utiliza para resolver diversos problemas, desde la aproximación por mínimos cuadrados hasta la compresión y el reconocimiento de imágenes.
Lista de métodos disponibles:
- Cholesky: calcular la descomposición de Cholesky
- Eig: calcular los valores propios y los vectores propios derechos de una matriz cuadrada
- Eig Vals: calcular los valores propios de la matriz común
- LU: implementar la factorización LU de una matriz como producto de una matriz triangular inferior y una matriz triangular superior
- LUP: implementar la factorización LUP con rotación parcial, que es una factorización LU sólo con permutaciones de filas, PA=LU
- QR: aplicar la factorización QR de la matriz
- SVD: descomposición en valores singulares
A continuación se presentan los prototipos de métodos.
bool matrix<T>::Cholesky(matrix<T> &L)
bool matrix<T>::Eig(matrix<T> &eigen_vectors, vector<T> &eigen_values)
bool matrix<T>::EigVals(vector<T> &eigen_values)
bool matrix<T>::LU(matrix<T> &L, matrix<T> &U)
bool matrix<T>::LUP(matrix<T> &L, matrix<T> &U, matrix<T> &P)
bool matrix<T>::QR(matrix<T> &Q, matrix<T> &R)
bool matrix<T>::SVD(matrix<T> &U, matrix<T> &V, vector<T> &singular_values)
Veamos un ejemplo de descomposición de valores singulares con el método SVD (véase. archivo MatrixSVD.mq5). En primer lugar, inicializamos la matriz original.
matrix a = {{0, 1, 2, 3, 4, 5, 6, 7, 8}};
|
Seguidamente hacemos una descomposición SVD:
matrix U, V;
|
Comprobemos la expansión, que debe cumplir la siguiente igualdad: U * "singular diagonal" * V = A.
matrix matrix_s;
|
Vamos a comprobar la matriz resultante y la original en busca de errores.
ulong errors = (int)a.Compare(matrix_usvt, 1e-9);
|
El registro debería tener este aspecto:
matrix a
|
Otro caso práctico de aplicación del método Convolve se incluye en el ejemplo de Métodos de aprendizaje automático.