- Types Integer
- Types Réels (double, float)
- Nombre complexe (complex)
- Type String
- Structures, Classes et Interfaces
- Tableau Dynamique d'Objets
- Matrices et vecteurs
- Conformation des types
- Type Void et Constante NULL
- Types des données
- Pointeurs d'Objets
- Références : Modificateur & et Mot-Clé this
Matrices et vecteurs
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 types de données suivants existent :
- matrix une matrice contenant des éléments de type double.
- matrixf une matrice contenant des éléments de type float.
- matrixc une matrice contenant des éléments de type complexe.
- vector un vecteur contenant des éléments de type double.
- vectorf un vecteur contenant des éléments de type float.
- vectorc un vecteur contenant des éléments de type complexe.
Les fonctions templatées prennent en charge les notations telles que matrix<double>, matrix<float>, vector<double>, vector<float> au lieu des types correspondants.
Les opérations algébriques suivantes sont définies pour les matrices :
- Ajout de matrices de même taille
- Multiplication de matrices de taille appropriée : le nombre de colonnes de la matrice de gauche doit être égal au nombre de lignes de la matrice de droite
- Multiplication matricielle par un vecteur colonne ; multiplication d'un vecteur ligne par une matrice selon la règle de multiplication matricielle. En ce sens, le vecteur est un cas particulier d'une matrice
- Multiplication matricielle par un nombre, c'est-à-dire par un scalaire
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.
Liste des méthodes matricielles et vectorielles
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) 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) |
|
Compare les éléments de deux matrices/vecteurs avec la précision demandée |
double matrix.Flat(const ulong index) bool matrix.Flat(const ulong index,const double value) |
Permet d'adresser un élément de matrice via un index au lieu de deux |
|
double vector.ArgMax() double matrix.ArgMax() vector matrix.ArgMax(const int axis) |
Renvoie l'indice de la valeur maximale |
|
double vector.ArgMin() double matrix.ArgMin() vector matrix.ArgMin(const int axis) |
Renvoie l'indice de la valeur minimale |
|
double vector.Max() double matrix.Max() vector matrix.Max(const int axis) |
Renvoie la valeur maximale dans une matrice/vecteur |
|
double vector.Mean() double matrix.Mean() vector matrix.Mean(const int axis) |
Calculer la moyenne arithmétique des valeurs des éléments |
|
double vector.Min() double matrix.Min() vector matrix.Min(const int axis) |
Renvoie la valeur minimale dans une matrice/vecteur |
|
double vector.Sum() double matrix.Sum() vector matrix.Sum(const int axis) |
Renvoie la somme des éléments de matrice/vecteur qui peuvent également être exécutés pour l'axe (les axes) donné(s). |
|
void vector.Clip(const double min_value,const double max_value) void matrix.Clip(const double min_value,const double max_value) |
Limite les éléments d'une matrice/d'un vecteur à un intervalle spécifié de valeurs valides |
|
vector vector.CumProd() vector matrix.CumProd() matrix matrix.CumProd(const int axis) |
Retourne le produit cumulatif des éléments d'une matrice/d'un vecteur, y compris ceux le long de l'axe donné |
|
vector vector.CumSum() vector matrix.CumSum() matrix matrix.CumSum(const int axis) |
Renvoie la somme cumulée des éléments d'une matrice/d'un vecteur, y compris ceux le long de l'axe donné |
|
double vector.Prod(const double initial=1) double matrix.Prod(const double initial=1) vector matrix.Prod(const int axis,const double initial=1) |
Renvoie le produit des éléments d'une matrice/d'un vecteur qui peut également être effectué pour l'axe donné |
|
void matrix.Reshape(const ulong rows, const ulong cols) |
Change la forme d'une matrice sans changer ses données |
|
void matrix.Resize(const ulong rows,const ulong cols) |
Renvoie une nouvelle matrice avec une forme et une taille modifiées |
|
bool matrix.SwapRows(const ulong row1, const ulong row2) |
|
Échanger des lignes dans une matrice |
bool matrix.SwapCols(const ulong col1, const ulong col2) |
|
Échanger des colonnes dans une matrice |
double vector.Ptp() double matrix.Ptp() vector matrix.Ptp(const int axis) |
Renvoie la plage de valeurs d'une matrice/d'un vecteur ou de l'axe de la matrice donné, équivalent à Max() - Min() |
|
double vector.Percentile(const int percent) double matrix.Percentile(const int percent) vector matrix.Percentile(const int percent,const int axis) |
Renvoie le centile spécifié des valeurs des éléments d'une matrice/d'une vecteur ou des éléments le long de l'axe spécifié. Les valeurs valides du paramètre 'percent' sont comprises dans la plage [0, 100] |
|
double vector.Quantile(const int percent) double matrix.Quantile(const int percent) vector matrix.Quantile(const int percent,const int axis) |
Renvoie le quantile spécifié des valeurs des éléments d'une matrice/d'un vecteur ou des éléments le long de l'axe spécifié. Le paramètre 'percent' prend des valeurs dans la plage [0, 1] |
|
double vector.Median() double matrix.Median() vector matrix.Median(const int axis) |
Calcule la médiane des éléments d'une matrice/d'un vecteur. La médiane est la valeur médiane qui sépare la moitié la plus élevée des éléments du tableau/vecteur de la moitié la plus basse des éléments. |
|
double vector.Average() double matrix.Average() vector matrix.Average(const int axis) |
Calculer la moyenne arithmétique des valeurs d'une matrice/vecteur. La somme des poids du dénominateur ne peut pas être égale à 0, mais certains poids peuvent être 0 |
|
double vector.Std() double matrix.Std() vector matrix.Std(const int axis) |
Renvoie l'écart type des valeurs des éléments d'une matrice/d'un vecteur ou des éléments le long de l'axe donné |
|
double vector.Var() double matrix.Var() vector matrix.Var(const int axis) |
Calculer la variance des valeurs des éléments d'une matrice/d'un vecteur |
|
double vector.CorrCoef(const vector& v) matrix matrix.CorrCoef() |
Calcule le coefficient de corrélation de Pearson (coefficient de corrélation linéaire). Le coefficient de corrélation est dans la plage [-1, 1] |
|
vector vector.Correlate(const vector& v,enum mode) |
Calcule la corrélation croisée de deux vecteurs. Le paramètre 'mode' détermine le mode de calcul de la convolution linéaire |
|
vector vector.Convolve(const vector& v, enum mode) |
Renvoie la convolution linéaire discrète de deux vecteurs. Le paramètre 'mode' détermine le mode de calcul de la convolution linéaire |
|
matrix matrix.Cov() matrix vector.Cov(const vector& v); (resulting matrix 2 x 2) |
Calculer la matrice de covariance. La covariance de deux échantillons (deux variables aléatoires) est une mesure de leur dépendance linéaire |