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

 

Compare deux matrices