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)

eye

Construit une matrice avec des 1 sur la diagonale et des 0 ailleurs

void matrix.Identity(const int rows)

identity

Construit une matrice carrée avec des unités sur la diagonale principale

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

ones

Construit une nouvelle matrice de lignes et de colonnes données, remplies de 1

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

zeros

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)

full

Construit une nouvelle matrice de lignes et de colonnes données, remplies d'une valeur scalaire

void matrix.Copy(const matrix a)

copy

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)

frombuffer

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)

fromfile

Construit une matrice à partir des données d'un fichier texte ou binaire

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

fromstring

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)

arange

Construit des valeurs régulièrement espacées dans un intervalle donné

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

diag

Extrait une diagonale ou construit une matrice diagonale

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

tri

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)

tril

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)

triu

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)

vander

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()

transpose

Inverse ou permute les axes d'une matrice ; renvoie la matrice modifiée

matrix matrix.Dot(const matrix b)

dot

Produit scalaire de deux matrices

matrix matrix.Inner(const matrix b)

inner

Produit scalaire de deux matrices

matrix matrix.Outer(const matrix b)

outer

Calcule le produit extérieur de deux matrices

matrix matrix.MatMul(const matrix b)

matmul

Produit matriciel de deux matrices

matrix matrix.MatrixPower(const int power)

matrix_power

Éleve une matrice carrée à la puissance (entière) n

matrix matrix.Kron(const matrix b)

kron

Renvoie le produit de Kronecker de deux matrices

bool matrix.Cholesky(matrix& L)

cholesky

Renvoie la décomposition de Cholesky

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

qr

Calcule la factorisation qr d'une matrice

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

svd

Décomposition en valeur singulière

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

eig

Calcule les valeurs propres et les vecteurs propres droits d'une matrice carrée

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

eigh

Renvoie les valeurs propres et vecteurs propres d'une matrice Hermitienne

bool matrix.EigVals(vector& eigen_values)

eigvals

Calcule les valeurs propres d'une matrice générale

bool matrix.EigValsH(vector& eigen_values)

eigvalsh

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)

norm

Renvoie la matrice ou le vecteur normé

double matrix.Cond(const norm)

cond

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()

det

Calcule le déterminant d'un tableau

int matrix.Rank()

matrix_rank

Retourne le rang matriciel du tableau à l'aide de la méthode Gaussienne

int matrix.SLogDet(int& sign)

slogdet

Calcule le signe et le logarithme du déterminant d'un tableau

double matrix.Trace()

trace

Renvoie la somme le long des diagonales de la matrice

vector matrix.Solve(const vector b)

solve

Résoud une équation matricielle linéaire ou un système d'équations algébriques linéaires

vector matrix.LstSq(const vector b)

lstsq

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()

inv

Calcule l'inverse (multiplicatif) d'une matrice

matrix matrix.PInv()

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)

flat

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)

argmax

Renvoie l'indice de la valeur maximale

double vector.ArgMin()

double matrix.ArgMin()

vector matrix.ArgMin(const int axis)

argmin

Renvoie l'indice de la valeur minimale

double vector.Max()

double matrix.Max()

vector matrix.Max(const int axis)

max

Renvoie la valeur maximale dans une matrice/vecteur

double vector.Mean()

double matrix.Mean()

vector matrix.Mean(const int axis)

mean

Calculer la moyenne arithmétique des valeurs des éléments

double vector.Min()

double matrix.Min()

vector matrix.Min(const int axis)

min

Renvoie la valeur minimale dans une matrice/vecteur

double vector.Sum()

double matrix.Sum()

vector matrix.Sum(const int axis)

sum

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)

clip

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)

cumprod

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)

cumsum

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)

prod

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)

reshape

Change la forme d'une matrice sans changer ses données

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

resize

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)

ptp

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)

percentile

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)

quantile

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)

median

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)

average

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)

std

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)

var

Calculer la variance des valeurs des éléments d'une matrice/d'un vecteur

double vector.CorrCoef(const vector& v)

matrix matrix.CorrCoef()

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)

correlate

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)

convolve

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)

cov

Calculer la matrice de covariance. La covariance de deux échantillons (deux variables aléatoires) est une mesure de leur dépendance linéaire