Le type vector est un type de données spécial dans MQL5, qui permet des opérations avec des vecteurs. Un vecteur est un tableau à une dimension de type double. C'est l'un des concepts fondamentaux de l'algèbre linéaire, qui est utilisé dans de nombreux domaines scientifiques, notamment la physique, la géométrie et d'autres. Les vecteurs sont utilisés pour résoudre des systèmes d'équations linéaires, dans les graphiques 3D et dans d'autres domaines d'application. Les vecteurs peuvent être ajoutés et multipliés. La longueur ou la distance entre les vecteurs peut être obtenue grâce à la Norme. En programmation, les vecteurs sont généralement représentés par des tableaux d'éléments homogènes, qui peuvent ne pas avoir d'opérations vectorielles régulières, c'est-à-dire lorsque les tableaux ne peuvent pas être additionnés ou multipliés et qu'ils n'ont pas de norme.
Les vecteurs peuvent être représentés sous forme de vecteurs de ligne et de vecteurs de chaîne lorsque vous travaillez avec des matrices. De plus, les vecteurs en algèbre linéaire utilisent les concepts de covariance et de contravariance. Ces concepts ne font aucune différence lors de l'écriture d'un code MQL5, car seul le programmeur décide de ce qu'est chaque objet de type vectoriel. Par exemple, il peut s'agir d'un vecteur de rotation, de déplacement ou de compression dans les graphiques 3D.
D'une manière générale, du point de vue de l'algèbre linéaire, un nombre est aussi un vecteur, mais dans un espace vectoriel à une dimension. Un vecteur lui-même peut être considéré comme un cas particulier de matrice.
Le type matrix est un autre type de données spécial dans MQL5 pour représenter des matrices. Une matrice est en fait un tableau à deux dimensions de type double. Les vecteurs et des matrices ont été introduits dans MQL5 pour faciliter les opérations avec certains types de jeux de données. Avec eux, les développeurs peuvent bénéficier des possibilités d'algèbre linéaire sous une forme simple et mathématique. Les matrices peuvent être utilisées pour écrire de manière compacte des systèmes d'équations linéaires ou différentielles. Le nombre de lignes de la matrice correspond au nombre d'équations, tandis que le nombre de colonnes est égal au nombre d'inconnues. En conséquence, les systèmes d'équations linéaires peuvent être résolus par des opérations matricielles.
Les opérations algébriques suivantes sont définies pour les matrices :
Les mathématiques considèrent de nombreux types de matrices différents. Par exemple, matrice d'identité, matrices symétriques, asymétriques, triangulaires supérieure et inférieure et autres types. Diverses formes Normales jouent un rôle important dans la théorie des matrices. Elles représentent une certaine forme canonique d'une matrice, qui peut être obtenue au moyen de certaines transformations. En pratique, on utilise des formes normales qui ont des propriétés supplémentaires, comme par exemple la stabilité.
L'utilisation de vecteurs et de matrices, ou plutôt de méthodes spéciales des types concernés, permet de créer un code plus simple, plus bref et plus clair, proche de la notation mathématique. Avec ces méthodes, vous pouvez éviter d'avoir à créer des boucles imbriquées ou de vous soucier de l'indexation correcte des tableaux dans les calculs. Par conséquent, l'utilisation de ces méthodes augmente la fiabilité et la vitesse de développement de programmes complexes.
Les types matrix et vector incluent des méthodes qui correspondent aux méthodes NumPy correspondantes de la bibliothèque. En utilisant ces méthodes, vous pouvez traduire des algorithmes et des codes de Python en MQL5 avec un minimum d'efforts. De nombreuses tâches de traitement de données, d'équations mathématiques, de réseaux de neurones et de tâches d'apprentissage automatique peuvent être résolus à l'aide de méthodes et de bibliothèques Python prêtes à l'emploi.
Méthode Matrice/vecteur |
Méthode analogue dans NumPy |
Description |
---|---|---|
void matrix.Eye(const int rows, const int cols, const int ndiag=0) |
Construit une matrice avec des 1 sur la diagonale et des 0 ailleurs |
|
void matrix.Identity(const int rows) |
Construit une matrice carrée avec des unités sur la diagonale principale |
|
void matrix.Ones(const int rows, const int cols) |
Construit une nouvelle matrice de lignes et de colonnes données, remplies de 1 |
|
void matrix.Zeros(const int rows, const int cols) |
Construit une nouvelle matrice de lignes et de colonnes données, remplies de 0 |
|
void matrix.Full(const int rows, const int cols, const scalar value) |
Construit une nouvelle matrice de lignes et de colonnes données, remplies d'une valeur scalaire |
|
void matrix.Copy(const matrix a) |
Construit une copie de la matrice donnée |
|
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) |
Construit une matrice créée à partir d'un tableau à 1 dimension |
|
void matrix.FromFile(const int rows, condt int cols, const int file_handle, const int count=-1, const int offset=0) |
Construit une matrice à partir des données d'un fichier texte ou binaire |
|
void vector.FromString(const string source, const string sep=" ") |
Construit un vecteur initialisé à partir de données texte dans une chaîne |
|
void vector.Arange(const scalar start, const scalar stop, const scalar step=1) |
Construit des valeurs régulièrement espacées dans un intervalle donné |
|
void matrix.Diag(const vector v, const int ndiag=0) |
Extrait une diagonale ou construit une matrice diagonale |
|
void matrix.Tri(const int rows, const int cols, const int ndiag=0) |
Construit une matrice avec des 1 au niveau et en dessous de la diagonale donnée et des 0 ailleurs |
|
void matrix.Tril(const int rows, const int cols, const scalar array[], const int ndiag=0) |
Renvoie une copie d'une matrice avec des éléments au-dessus de la k-ième diagonale mis à zéro |
|
void matrix.Triu(const int rows, const int cols, const scalar array[], const int ndiag=0) |
Renvoie une copie d'une matrice avec les éléments sous la k-ième diagonale mis à zéro |
|
void matrix.Vander(const vector v, const int cols=-1, const bool increasing=false) |
Générer une matrice de Vandermonde |
|
vector matrix.Row(const unsigned nrow) |
|
Renvoie un vecteur ligne |
vector matrix.Col(const unsigned ncol) |
|
Renvoie un vecteur colonne |
unsigned matrix.Rows() |
|
Renvoie le nombre de lignes d'une matrice |
unsigned matrix.Cols() |
|
Renvoie le nombre de colonnes d'une matrice |
void matrix.Init() |
|
Initialise une matrice |
matrix matrix.Transpose() |
Inverse ou permute les axes d'une matrice ; renvoie la matrice modifiée |
|
matrix matrix.Dot(const matrix b) |
Produit scalaire de deux matrices |
|
matrix matrix.Inner(const matrix b) |
Produit scalaire de deux matrices |
|
matrix matrix.Outer(const matrix b) |
Calcule le produit extérieur de deux matrices |
|
matrix matrix.MatMul(const matrix b) |
Produit matriciel de deux matrices |
|
matrix matrix.MatrixPower(const int power) |
Éleve une matrice carrée à la puissance (entière) n |
|
matrix matrix.Kron(const matrix b) |
Renvoie le produit de Kronecker de deux matrices |
|
bool matrix.Cholesky(matrix& L) |
Renvoie la décomposition de Cholesky |
|
bool matrix.QR(matrix& Q, matrix& R) |
Calcule la factorisation qr d'une matrice |
|
bool matrix.SVD(matrix& U, matrix& V, vector& singular_values) |
Décomposition en valeur singulière |
|
bool matrix.Eig(matrix& eigen_vectors, vector& eigen_values) |
Calcule les valeurs propres et les vecteurs propres droits d'une matrice carrée |
|
bool matrix.EigH(matrix& eigen_vectors, vector& eigen_values) |
Renvoie les valeurs propres et vecteurs propres d'une matrice Hermitienne |
|
bool matrix.EigVals(vector& eigen_values) |
Calcule les valeurs propres d'une matrice générale |
|
bool matrix.EigValsH(vector& eigen_values) |
Calcule les valeurs propres d'une matrice Hermitienne |
|
bool matrix.LU(matrix& L, matrix& U) |
|
Décomposition LU d'une matrice comme le produit d'une matrice triangulaire inférieure et d'une matrice triangulaire supérieure |
bool matrix.LUP(matrix& L, matrix& U, matrix& P) |
|
Décomposition LUP avec pivotement partiel, qui fait référence à la décomposition LU avec permutations de lignes uniquement : PA=LU |
double matrix.Norm(const norm) |
Renvoie la matrice ou le vecteur normé |
|
double matrix.Cond(const norm) |
Calcule le nombre de conditions d'une matrice |
|
vector matrix.Spectrum() |
|
Calcule le spectre d'une matrice comme l'ensemble de ses valeurs propres à partir du produit AT*A |
double matrix.Det() |
Calcule le déterminant d'un tableau |
|
int matrix.Rank() |
Retourne le rang matriciel du tableau à l'aide de la méthode Gaussienne |
|
int matrix.SLogDet(int& sign) |
Calcule le signe et le logarithme du déterminant d'un tableau |
|
double matrix.Trace() |
Renvoie la somme le long des diagonales de la matrice |
|
vector matrix.Solve(const vector b) |
Résoud une équation matricielle linéaire ou un système d'équations algébriques linéaires |
|
vector matrix.LstSq(const vector b) |
Renvoie la solution des moindres carrés des équations algébriques linéaires (pour les matrices non carrées ou dégénérées) |
|
matrix matrix.Inv() |
Calcule l'inverse (multiplicatif) d'une matrice |
|
matrix matrix.PInv() |
Calcule le pseudo-inverse d'une matrice par la méthode de Moore-Penrose |
|
int matrix.Compare(const matrix matrix_c, const double epsilon) |
|
Compare deux matrices |