Basic linear algebra algorithms (since C++26)
From cppreference.net
Grundlegende lineare Algebra Algorithmen basieren auf den dichten Basic Linear Algebra Subroutines ( BLAS ), die einer Teilmenge des BLAS Standards entsprechen. Diese Algorithmen, die auf die Elemente von Arrays zugreifen, betrachten diese Elemente durch std::mdspan , die Vektoren oder Matrizen repräsentieren.
Die BLAS-Algorithmen sind in drei Gruppen von Operationen kategorisiert, die als Levels bezeichnet werden und generell dem Polynomgrad in den Komplexitäten der Algorithmen entsprechen:
- BLAS 1 : Alle Algorithmen mit std::mdspan -Parametern führen eine Anzahl von std::mdspan -Array-Zugriffen und arithmetischen Operationen aus, die linear im maximalen Produkt der Ausdehnungen eines beliebigen std::mdspan -Parameters sind. Diese Algorithmen umfassen Vektor -Operationen wie Skalarprodukte, Normen und Vektoraddition.
- BLAS 2 : Alle Algorithmen haben eine allgemeine Komplexität in quadratischer Zeit. Diese Algorithmen umfassen Matrix-Vektor -Operationen wie Matrix-Vektor-Multiplikationen und einen Löser für das triangulare lineare System.
- BLAS 3 : Alle Algorithmen haben eine allgemeine Komplexität in kubischer Zeit. Diese Algorithmen umfassen Matrix-Matrix -Operationen wie Matrix-Matrix-Multiplikationen und einen Löser für die multiplen triangularen linearen Systeme.
In-place-Transformationen |
||
|
Definiert in Header
<linalg>
|
||
|
Definiert im namespace
std::linalg
|
||
|
(C++26)
|
std::mdspan
Zugriffspolitik, deren Referenz das Produkt eines festen Skalierungsfaktors und der Referenz des verschachtelten
std::mdspan
Zugriffsobjekts darstellt
(Klassentemplate) |
|
|
(C++26)
|
std::mdspan
Accessor-Policy, deren Referenz die komplex Konjugierte der Referenz ihres verschachtelten
std::mdspan
Accessors darstellt
(Klassentemplate) |
|
|
(C++26)
|
std::mdspan
Layout-Mapping-Strategie, die die beiden rechtesten Indizes, Extents und Strides einer beliebigen eindeutigen Layout-Mapping-Strategie vertauscht
(Klassentemplate) |
|
|
(C++26)
|
gibt einen neuen schreibgeschützten
std::mdspan
zurück, berechnet durch das elementweise Produkt des Skalierungsfaktors und der entsprechenden Elemente des gegebenen
std::mdspan
(Funktionstemplate) |
|
|
(C++26)
|
gibt einen neuen schreibgeschützten
std::mdspan
zurück, dessen Elemente die komplex Konjugierten der entsprechenden Elemente des gegebenen
std::mdspan
sind
(Funktionstemplate) |
|
|
(C++26)
|
gibt ein neues
std::mdspan
zurück, das die Transponierte der Eingabematrix durch das gegebene
std::mdspan
darstellt
(Funktionstemplate) |
|
|
(C++26)
|
gibt eine konjugiert transponierte Ansicht eines Objekts zurück
(Funktionstemplate) |
|
BLAS 1-Funktionen |
||
|
Definiert im Header
<linalg>
|
||
|
Definiert in namespace
std::linalg
|
||
|
(C++26)
|
erzeugt eine Ebenenrotation
(Funktionsschablone) |
|
|
(C++26)
|
wendet ebene Rotation auf Vektoren an
(Funktionsschablone) |
|
|
(C++26)
|
tauscht alle entsprechenden Elemente einer Matrix oder eines Vektors
(Funktionsschablone) |
|
|
(C++26)
|
überschreibt Matrix oder Vektor mit dem Ergebnis der elementweisen Multiplikation mit einem Skalar
(Funktionstemplate) |
|
|
(C++26)
|
kopiert Elemente einer Matrix oder eines Vektors in eine andere
(Funktionsschablone) |
|
|
(C++26)
|
addiert Vektoren oder Matrizen elementweise
(Funktionstemplate) |
|
|
(C++26)
|
gibt das nichtkonjugierte Skalarprodukt zweier Vektoren zurück
(Funktionstemplate) |
|
|
(C++26)
|
gibt das konjugierte Skalarprodukt zweier Vektoren zurück
(Funktionstemplate) |
|
|
(C++26)
|
gibt skalierten Summe der Quadrate der Vektorelemente zurück
(Funktionsschablone) |
|
|
(C++26)
|
gibt die euklidische Norm eines Vektors zurück
(Funktionstemplate) |
|
|
(C++26)
|
gibt die Summe der Absolutwerte der Vektorelemente zurück
(Funktionsschablone) |
|
|
(C++26)
|
gibt den Index des maximalen Absolutwerts der Vektorelemente zurück
(Funktionsschablone) |
|
|
(C++26)
|
gibt die Frobenius-Norm einer Matrix zurück
(Funktionsschablone) |
|
|
(C++26)
|
gibt die 1-Norm einer Matrix zurück
(Funktionstemplate) |
|
|
(C++26)
|
gibt die Unendlichkeitsnorm einer Matrix zurück
(Funktionsschablone) |
|
BLAS 2-Funktionen |
||
|
Definiert im Header
<linalg>
|
||
|
Definiert in Namespace
std::linalg
|
||
|
(C++26)
|
berechnet Matrix-Vektor-Produkt
(Funktionstemplate) |
|
|
(C++26)
|
berechnet symmetrische Matrix-Vektor-Produkt
(Funktions-Template) |
|
|
(C++26)
|
berechnet das Hermitesche Matrix-Vektor-Produkt
(Funktionstemplate) |
|
|
(C++26)
|
berechnet das Dreiecksmatrix-Vektor-Produkt
(Funktionsschablone) |
|
|
(C++26)
|
löst ein trianguläres lineares System
(Funktionsschablone) |
|
|
(C++26)
|
führt einen nicht-symmetrischen nicht-konjugierten Rang-1-Update einer Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt einen nichtsymmetrischen konjugierten Rang-1-Update einer Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt Rang-1-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt einen Rang-1-Update einer hermiteschen Matrix durch
(Funktionstemplate) |
|
|
(C++26)
|
führt Rang-2-Update einer hermiteschen Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt einen Rang-2-Update einer hermiteschen Matrix durch
(Funktionsschablone) |
|
BLAS 3-Funktionen |
||
|
Definiert in Header
<linalg>
|
||
|
Definiert in Namespace
std::linalg
|
||
|
(C++26)
|
berechnet Matrix-Matrix-Produkt
(Funktions-Template) |
|
|
(C++26)
|
berechnet symmetrisches Matrix-Matrix-Produkt
(Funktionstemplate) |
|
|
(C++26)
|
berechnet das hermitesche Matrix-Matrix-Produkt
(Funktionsschablone) |
|
|
berechnet das Dreiecksmatrix-Matrix-Produkt
(Funktions-Template) |
||
|
(C++26)
|
führt einen Rang-k-Update einer symmetrischen Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt einen Rang-k-Update einer hermiteschen Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt Rang-2k-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) |
|
|
(C++26)
|
führt einen Rang-2k-Update einer hermiteschen Matrix durch
(Funktionsschablone) |
|
|
löst mehrere Dreiecksmatrix-Linearsysteme
(Funktionstemplate) |
||
Hilfsmittel |
||
|
Definiert im Header
<linalg>
|
||
|
Definiert in Namespace
std::linalg
|
||
|
beschreiben die Reihenfolge der Elemente in einem
std::mdspan
mit
linalg::layout_blas_packed
Layout
(Tag) |
||
|
gibt an, ob Algorithmen und andere Nutzer einer Matrix auf das obere Dreieck oder untere Dreieck der Matrix zugreifen sollen
(Tag) |
||
|
gibt an, ob Algorithmen auf Diagonaleinträge der Matrix zugreifen sollen
(Tag) |
||
|
(C++26)
|
std::mdspan
Layout-Mapping-Policy, die eine quadratische Matrix repräsentiert, die nur die Einträge in einem Dreieck in einem gepackten zusammenhängenden Format speichert
(Klassentemplate) |
|
Hinweise
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_linalg
|
202311L
|
(C++26) | Grundlegende lineare Algebra Algorithmen (BLAS) |
Beispiel
Diesen Code ausführen
#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, sequentiell ausgeführt std::linalg::scale(2.0, x); // x[i] *= 3.0, parallel ausgeführt 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)); }
Externe Links
| 1. | BLAS-Startseite |
| 2. | BLAS Technisches Forum |