UKOnline

Calcul vectoriel

Dans la section précédente, on a vu comment créer des matrices et donc indirectement des vecteurs qui sont en fait simplement des matrices avec une ligne ou une colonne. Dans cette section, on va se concentrer sur les calculs qu'il est possible de réaliser sur base de vecteurs.

Un vecteur est donc une matrice-ligne ou une matrice-colonne. Les premières pouvant être tout simplement représentées par des tableaux à une dimension, on les préfère souvent. L'exemple suivant crée deux vecteurs $u$ et $v$ représentant deux points dans l'espace :

Les deux vecteurs créés sont en fait des tableaux de formes $(3,)$, comme on le voit sur le résultat de l'exécution :

[1 2 3]
[4 5 6]

Notez bien la différence avec une véritable matrice-ligne qui aurait une forme de $(1, 3)$, c'est-à-dire une matrice avec une ligne de trois éléments.

Opération de base

On peut facilement calculer la somme et la différence de deux vecteurs, et la multiplication par un scalaire, à l'aide des opérateurs arithmétiques habituels que l'on a vu précédemment avec les ndarray. Voici un exemple de calcul vectoriel qui combine ces opérations :

Cette instruction calcule le nouveau vecteur $2u + v$, en multipliant donc d'abord le vecteur $u$ par deux pour ensuite additionner le résultat obtenu avec le vecteur $v$. Le résultat obtenu est le suivant :

[ 6  9 12]

Norme

Une autre information de base souvent utilisée en calcul vectoriel consiste à calculer la norme d'un vecteur. Il existe plusieurs définitions possibles de norme d'un vecteur. La plus classique est la norme euclidienne qui, étant donné un vecteur $\overrightarrow{u} = (u_1, ..., u_k)$, se calcule comme suit :

$$\left\| \overrightarrow{u} \right\| = \sqrt{u_1^2 + ... + u_k^2}.$$

On pourrait la calculer soi-même, mais il faut avant tout comprendre comment fonctionne le produit de vecteurs qui est expliqué un peu plus loin dans cette section sur le calcul vectoriel. Une autre solution consiste à utiliser la fonction norm du module numpy.linalg. Celle-ci permet de calculer plusieurs normes différentes et voici comment l'utiliser pour trouver la norme euclidienne d'un vecteur :

Utilisée avec les valeurs par défaut de ses paramètres, la fonction norm calcule donc bien la norme euclidienne, puisque le résultat affiché après exécution est de $\sqrt{1 + 4 + 9} = \sqrt{14} = 3,\!74...$ :

3.7416573867739413

Produit

Calculer le produit de deux vecteurs peut se faire de différentes manière puisqu'il y a différents produits qui sont définis sur les vecteurs.

Produit scalaire

Une première possibilité est le produit scalaire qui multiplie deux vecteurs de même longueur pour produire un scalaire comme résultat. Pour rappel, étant donné les vecteurs $\overrightarrow{u} = (u_1, ..., u_k)$ et $\overrightarrow{v} = (v_1, ..., v_k)$, leur produit scalaire est défini par :

$$\overrightarrow{u} \cdot \overrightarrow{v} = \sum_{i = 0}^k u_i v_i = u_1 v_1 + ... + u_k v_k$$

Le produit scalaire de deux vecteurs, appelé « dot product » en anglais, se calcule avec la fonction vdot. Voici comment calculer le produit scalaire des deux vecteurs u et v définis précédemment :

Le résultat produit par l'exécution affiche bien le produit scalaire des deux vecteurs, à savoir $\overrightarrow{u} \cdot \overrightarrow{v} = 1 \cdot 4 + 2 \cdot 5 + 3 \cdot 6 = 4 + 10 + 18 = 32$, renvoyé sous forme d'un scalaire :

32

Produit vectoriel

On peut également calculer le produit vectoriel de deux vecteurs. Pour rappel, ce dernier n'est applicable qu'aux vecteurs de longueur $3$ et calcule un vecteur de longueur $3$ comme résultat. Le produit vectoriel des deux vecteurs $\overrightarrow{u} = (u_1, u_2, u_3)$ et $\overrightarrow{v} = (v_1, v_2, v_3)$ vaut :

$$\overrightarrow{u} \times \overrightarrow{v} = (u_2v_3 - u_3v_2, u_3v_1 - u_1v_3, u_1v_2 - u_2v_1)$$

Avec NumPy, pas besoin de retenir cette formule, il suffit d'utiliser la fonction cross, comme dans l'exemple suivant :

Le résultat obtenu après exécution est bien un vecteur de longueur 3 et les valeurs de ses éléments correspondent bien à la formule du produit vectoriel, rappelée plus haut :

[-3  6 -3]

Produit par élément

Un autre type de produit, que l'on peut réaliser, consiste à multiplier les éléments des vecteurs entre eux. Cette opération, similaire au produit de Hadamard pour les matrices, multiplie deux vecteurs de mêmes longueurs et produit comme résultat un vecteur de même longueur dont chaque élément est le produit des éléments situés à la même position dans les deux vecteurs multipliés. Le produit par élément des deux vecteurs $\overrightarrow{u} = (u_1, ..., u_k)$ et $\overrightarrow{v} = (v_1, ..., v_k)$ vaut :

$$\overrightarrow{u} \circ \overrightarrow{v} = (u_1v_1, ..., u_kv_k)$$

Pour calculer ce produit, il suffit d'utiliser l'opérateur * sur deux vecteurs qui ont la même longueur, comme par exemple :

Le résultat produit par l'exécution affiche bien le produit par élément des deux vecteurs, à savoir $\overrightarrow{u} \circ \overrightarrow{v} = (1 \cdot 4, 2 \cdot 5, 3 \cdot 6) = (4, 10, 18)$, renvoyé sous forme d'un vecteur :

[ 4 10 18]

Grâce à ce produit, on peut maintenant comprendre comment la norme euclidienne d'un vecteur peut être calculée autrement qu'avec la fonction norm. Il suffit en fait de faire la racine carrée de la somme des éléments du vecteur obtenu en multipliant par lui-même celui dont on cherche la norme. Ainsi, l'instruction print(norm(u)) est équivalente à :

Évidemment, c'est plus efficace et lisible d'utiliser la fonction norm plutôt que de faire le calcul explicitement.