Namespaces
Variants

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.

Table des matières

Transformations en place

Défini dans l'en-tête <linalg>
Défini dans l'espace de noms std::linalg
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)
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)
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)
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
génère une rotation plane
(modèle de fonction)
applique une rotation plane aux vecteurs
(modèle de fonction)
é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)
retourne la somme pondérée des carrés des éléments du vecteur
(modèle de fonction)
retourne la norme euclidienne d'un vecteur
(modèle de fonction)
retourne la somme des valeurs absolues des éléments du vecteur
(modèle de fonction)
retourne l'indice de la valeur absolue maximale des éléments du vecteur
(modèle de fonction)
retourne la norme de Frobenius d'une matrice
(modèle de fonction)
retourne la norme un d'une matrice
(modèle de fonction)
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
calcule le produit matrice-vecteur
(modèle de fonction)
calcule le produit matrice-vecteur symétrique
(modèle de fonction)
calcule le produit matrice-vecteur hermitien
(modèle de fonction)
calcule le produit matrice-vecteur triangulaire
(modèle de fonction)
résout un système linéaire triangulaire
(modèle de fonction)
effectue une mise à jour de rang 1 non symétrique et non conjuguée d'une matrice
(modèle de fonction)
effectue une mise à jour de rang 1 conjuguée non symétrique d'une matrice
(modèle de fonction)
effectue une mise à jour de rang 1 d'une matrice symétrique
(modèle de fonction)
effectue une mise à jour de rang 1 d'une matrice hermitienne
(modèle de fonction)
effectue une mise à jour de rang 2 d'une matrice hermitienne
(modèle de fonction)
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
calcule le produit matriciel
(modèle de fonction)
calcule le produit matriciel symétrique
(modèle de fonction)
calcule le produit matriciel hermitien
(modèle de fonction)
calcule le produit matriciel triangulaire
(modèle de fonction)
effectue une mise à jour de rang k d'une matrice symétrique
(modèle de fonction)
effectue une mise à jour de rang k d'une matrice hermitienne
(modèle de fonction)
effectue une mise à jour de rang 2k d'une matrice symétrique
(modèle de fonction)
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)
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

#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