Basic linear algebra algorithms (since C++26)
From cppreference.net
Les algorithmes fondamentaux d'algèbre linéaire sont basés sur les routines de base d'algèbre linéaire dense ( BLAS ) qui correspondent à un sous-ensemble du BLAS Standard . Ces algorithmes qui accèdent aux éléments des tableaux visualisent ces éléments via std::mdspan représentant des vecteurs ou matrices.
Les algorithmes BLAS sont classés en trois ensembles d'opérations appelés niveaux , qui correspondent généralement au degré du polynôme dans les complexités des algorithmes :
- BLAS 1 : Tous les algorithmes avec des paramètres std::mdspan effectuent un décompte d'accès aux tableaux std::mdspan et d'opérations arithmétiques qui sont linéaires dans le produit maximum des dimensions de tout paramètre std::mdspan . Ces algorithmes contiennent des opérations vectorielles telles que les produits scalaires, les normes et l'addition de vecteurs.
- BLAS 2 : Tous les algorithmes ont une complexité générale en temps quadratique . Ces algorithmes contiennent des opérations matrice-vecteur telles que les multiplications matrice-vecteur et un solveur de système linéaire triangulaire.
- BLAS 3 : Tous les algorithmes ont une complexité générale en temps cubique . Ces algorithmes contiennent des opérations matrice-matrice telles que les multiplications matrice-matrice et un solveur de systèmes linéaires triangulaires multiples.
Transformations en place |
||
|
Défini dans l'en-tête
<linalg>
|
||
|
Défini dans l'espace de noms
std::linalg
|
||
|
(C++26)
|
std::mdspan
politique d'accès dont la référence représente le produit d'un facteur d'échelle fixe et de la référence de son accesseur
std::mdspan
imbriqué
(modèle de classe) |
|
|
(C++26)
|
std::mdspan
politique d'accès dont la référence représente le conjugué complexe de la référence de son
std::mdspan
accessor imbriqué
(modèle de classe) |
|
|
(C++26)
|
std::mdspan
politique de mappage de disposition qui échange les deux indices, dimensions et pas les plus à droite de toute politique de mappage de disposition unique
(modèle de classe) |
|
|
(C++26)
|
retourne un nouveau
std::mdspan
en lecture seule calculé par le produit élément par élément du facteur d'échelle et des éléments correspondants du
std::mdspan
donné
(modèle de fonction) |
|
|
(C++26)
|
retourne un nouveau
std::mdspan
en lecture seule dont les éléments sont les conjugués complexes des éléments correspondants du
std::mdspan
donné
(modèle de fonction) |
|
|
(C++26)
|
retourne un nouveau
std::mdspan
représentant la transposée de la matrice d'entrée via le
std::mdspan
donné
(modèle de fonction) |
|
|
(C++26)
|
renvoie une vue transposée conjuguée d'un objet
(modèle de fonction) |
|
Fonctions BLAS 1 |
||
|
Défini dans l'en-tête
<linalg>
|
||
|
Défini dans l'espace de noms
std::linalg
|
||
|
(C++26)
|
génère une rotation plane
(modèle de fonction) |
|
|
(C++26)
|
applique une rotation plane aux vecteurs
(modèle de fonction) |
|
|
(C++26)
|
échange tous les éléments correspondants d'une matrice ou d'un vecteur
(modèle de fonction) |
|
|
(C++26)
|
remplace une matrice ou un vecteur par le résultat du calcul de la multiplication élément par élément par un scalaire
(modèle de fonction) |
|
|
(C++26)
|
copie les éléments d'une matrice ou d'un vecteur dans un autre
(modèle de fonction) |
|
|
(C++26)
|
additionne des vecteurs ou matrices élément par élément
(modèle de fonction) |
|
|
(C++26)
|
retourne le produit scalaire non conjugué de deux vecteurs
(modèle de fonction) |
|
|
(C++26)
|
retourne le produit scalaire conjugué de deux vecteurs
(modèle de fonction) |
|
|
(C++26)
|
retourne la somme pondérée des carrés des éléments du vecteur
(modèle de fonction) |
|
|
(C++26)
|
retourne la norme euclidienne d'un vecteur
(modèle de fonction) |
|
|
(C++26)
|
retourne la somme des valeurs absolues des éléments du vecteur
(modèle de fonction) |
|
|
(C++26)
|
retourne l'indice de la valeur absolue maximale des éléments du vecteur
(modèle de fonction) |
|
|
(C++26)
|
retourne la norme de Frobenius d'une matrice
(modèle de fonction) |
|
|
(C++26)
|
retourne la norme un d'une matrice
(modèle de fonction) |
|
|
(C++26)
|
retourne la norme infinie d'une matrice
(modèle de fonction) |
|
Fonctions BLAS 2 |
||
|
Défini dans l'en-tête
<linalg>
|
||
|
Défini dans l'espace de noms
std::linalg
|
||
|
(C++26)
|
calcule le produit matrice-vecteur
(modèle de fonction) |
|
|
(C++26)
|
calcule le produit matrice-vecteur symétrique
(modèle de fonction) |
|
|
(C++26)
|
calcule le produit matrice-vecteur hermitien
(modèle de fonction) |
|
|
(C++26)
|
calcule le produit matrice-vecteur triangulaire
(modèle de fonction) |
|
|
(C++26)
|
résout un système linéaire triangulaire
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 1 non symétrique et non conjuguée d'une matrice
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 1 conjuguée non symétrique d'une matrice
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 1 d'une matrice symétrique
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 1 d'une matrice hermitienne
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 2 d'une matrice hermitienne
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 2 d'une matrice hermitienne
(modèle de fonction) |
|
Fonctions BLAS 3 |
||
|
Défini dans l'en-tête
<linalg>
|
||
|
Défini dans l'espace de noms
std::linalg
|
||
|
(C++26)
|
calcule le produit matriciel
(modèle de fonction) |
|
|
(C++26)
|
calcule le produit matriciel symétrique
(modèle de fonction) |
|
|
(C++26)
|
calcule le produit matriciel hermitien
(modèle de fonction) |
|
|
calcule le produit matriciel triangulaire
(modèle de fonction) |
||
|
(C++26)
|
effectue une mise à jour de rang k d'une matrice symétrique
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang k d'une matrice hermitienne
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 2k d'une matrice symétrique
(modèle de fonction) |
|
|
(C++26)
|
effectue une mise à jour de rang 2k d'une matrice hermitienne
(modèle de fonction) |
|
|
résout plusieurs systèmes linéaires triangulaires
(modèle de fonction) |
||
Éléments d'assistance |
||
|
Défini dans l'en-tête
<linalg>
|
||
|
Défini dans l'espace de noms
std::linalg
|
||
|
décrit l'ordre des éléments dans un
std::mdspan
avec la disposition
linalg::layout_blas_packed
(balise) |
||
|
spécifie si les algorithmes et autres utilisateurs d'une matrice doivent accéder au triangle supérieur ou au triangle inférieur de la matrice
(balise) |
||
|
spécifie si les algorithmes doivent accéder aux entrées diagonales de la matrice
(balise) |
||
|
(C++26)
|
std::mdspan
politique de mappage de disposition qui représente une matrice carrée stockant uniquement les entrées d'un triangle, dans un format contigu compact
(modèle de classe) |
|
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_linalg
|
202311L
|
(C++26) | Algorithmes d'algèbre linéaire de base (BLAS) |
Exemple
Exécuter ce code
#include <cassert> #include <cstddef> #include <execution> #include <linalg> #include <mdspan> #include <numeric> #include <vector> int main() { std::vector<double> x_vec(42); std::ranges::iota(x_vec, 0.0); std::mdspan x(x_vec.data(), x_vec.size()); // x[i] *= 2.0, exécuté séquentiellement std::linalg::scale(2.0, x); // x[i] *= 3.0, exécuté en parallèle std::linalg::scale(std::execution::par_unseq, 3.0, x); for (std::size_t i{}; i != x.size(); ++i) assert(x[i] == 6.0 * static_cast<double>(i)); }
Liens externes
| 1. | Page d'accueil BLAS |
| 2. | Forum technique BLAS |