Grundlegende Algorithmen der linearen Algebra (seit C++26)
Von cppreference.com
Grundlegende Algorithmen der linearen Algebra 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 über std::mdspan, das Vektoren oder Matrizen darstellt.
Die BLAS-Algorithmen sind in drei Sätze von Operationen unterteilt, die als Levels bezeichnet werden und im Allgemeinen dem Grad des Polynoms in den Komplexitäten von Algorithmen entsprechen
- BLAS 1: Alle Algorithmen mit std::mdspan-Parametern führen eine Anzahl von std::mdspan Array-Zugriffen und arithmetischen Operationen durch, die linear zur maximalen Produkt der Erstreckungen eines std::mdspan-Parameters sind. Diese Algorithmen enthalten Vektoroperationen wie Skalarprodukte, Normen und Vektoraddition.
- BLAS 2: Alle Algorithmen haben eine allgemeine Komplexität in quadratischer Zeit. Diese Algorithmen enthalten Matrix-Vektor-Operationen wie Matrix-Vektor-Multiplikationen und einen Löser für lineare Dreieckssysteme.
- BLAS 3: Alle Algorithmen haben eine allgemeine Komplexität in kubischer Zeit. Diese Algorithmen enthalten Matrix-Matrix-Operationen wie Matrix-Matrix-Multiplikationen und einen Löser für mehrere lineare Dreieckssysteme.
In-place Transformationen | ||
| Definiert in Header
<linalg> | ||
| Definiert im Namespace
std::linalg | ||
| (C++26) |
std::mdspan Accessor-Richtlinie, deren Referenz das Produkt eines festen Skalierungsfaktors und der Referenz des verschachtelten std::mdspan Accessors darstellt (Klassenschablone) | |
| (C++26) |
std::mdspan Accessor-Richtlinie, deren Referenz die komplexe Konjugation der Referenz des verschachtelten std::mdspan Accessors darstellt (Klassenschablone) | |
| (C++26) |
std::mdspan Layout-Mapping-Richtlinie, die die beiden rechtesten Indizes, Erstreckungen und Schritte jeder eindeutigen Layout-Mapping-Richtlinie vertauscht (Klassenschablone) | |
| (C++26) |
gibt ein neues schreibgeschütztes std::mdspan zurück, das durch das elementweise Produkt des Skalierungsfaktors und der entsprechenden Elemente des gegebenen std::mdspan berechnet wird (Funktionsschablone) | |
| (C++26) |
gibt ein neues schreibgeschütztes std::mdspan zurück, dessen Elemente die komplexen Konjugierten der entsprechenden Elemente des gegebenen std::mdspan sind (Funktionsschablone) | |
| (C++26) |
gibt ein neues std::mdspan zurück, das die Transponierte der Eingabematrix des gegebenen std::mdspan darstellt (Funktionsschablone) | |
| (C++26) |
gibt eine konjugierte transponierte Ansicht eines Objekts zurück (Funktionsschablone) | |
BLAS 1 Funktionen | ||
| Definiert in Header
<linalg> | ||
| Definiert im Namespace
std::linalg | ||
| (C++26) |
generiert eine Ebenendrehung (Funktionsschablone) | |
| (C++26) |
wendet Ebenendrehungen auf Vektoren an (Funktionsschablone) | |
| (C++26) |
tauscht alle entsprechenden Elemente von Matrix oder Vektor (Funktionsschablone) | |
| (C++26) |
überschreibt Matrix oder Vektor mit dem Ergebnis der elementweisen Multiplikation mit einem Skalar (Funktionsschablone) | |
| (C++26) |
kopiert Elemente von einer Matrix oder einem Vektor in eine andere (Funktionsschablone) | |
| (C++26) |
addiert Vektoren oder Matrizen elementweise (Funktionsschablone) | |
| (C++26) |
gibt das nicht-konjugierte Skalarprodukt zweier Vektoren zurück (Funktionsschablone) | |
| (C++26) |
gibt das konjugierte Skalarprodukt zweier Vektoren zurück (Funktionsschablone) | |
| (C++26) |
gibt die skalierte Summe der Quadrate der Vektorelemente zurück (Funktionsschablone) | |
| (C++26) |
gibt die Euklidische Norm eines Vektors zurück (Funktionsschablone) | |
| (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 Eins-Norm einer Matrix zurück (Funktionsschablone) | |
| (C++26) |
gibt die Unendlich-Norm einer Matrix zurück (Funktionsschablone) | |
BLAS 2 Funktionen | ||
| Definiert in Header
<linalg> | ||
| Definiert im Namespace
std::linalg | ||
| (C++26) |
berechnet Matrix-Vektor-Produkt (Funktionsschablone) | |
| berechnet symmetrisches Matrix-Vektor-Produkt (Funktionsschablone) | ||
| berechnet hermitesches Matrix-Vektor-Produkt (Funktionsschablone) | ||
| berechnet lineares Dreiecks-Matrix-Vektor-Produkt (Funktionsschablone) | ||
| löst ein lineares Dreieckssystem (Funktionsschablone) | ||
| (C++26) |
führt nicht-symmetrische nicht-konjugierte Rang-1-Aktualisierung einer Matrix durch (Funktionsschablone) | |
| (C++26) |
führt nicht-symmetrische, konjugierte Rang-1-Aktualisierung einer Matrix durch (Funktionsschablone) | |
| führt Rang-1-Aktualisierung einer symmetrischen Matrix durch (Funktionsschablone) | ||
| führt Rang-1-Aktualisierung einer hermiteschen Matrix durch (Funktionsschablone) | ||
| führt Rang-2-Aktualisierung einer symmetrischen Matrix durch (Funktionsschablone) | ||
| führt Rang-2-Aktualisierung einer hermiteschen Matrix durch (Funktionsschablone) | ||
BLAS 3 Funktionen | ||
| Definiert in Header
<linalg> | ||
| Definiert im Namespace
std::linalg | ||
| (C++26) |
berechnet Matrix-Matrix-Produkt (Funktionsschablone) | |
| (C++26) |
berechnet symmetrisches Matrix-Matrix-Produkt (Funktionsschablone) | |
| (C++26) |
berechnet hermitesches Matrix-Matrix-Produkt (Funktionsschablone) | |
| berechnet lineares Dreiecks-Matrix-Matrix-Produkt (Funktionsschablone) | ||
| führt Rang-k-Aktualisierung einer symmetrischen Matrix durch (Funktionsschablone) | ||
| führt Rang-k-Aktualisierung einer hermiteschen Matrix durch (Funktionsschablone) | ||
| führt Rang-2k-Aktualisierung einer symmetrischen Matrix durch (Funktionsschablone) | ||
| führt Rang-2k-Aktualisierung einer hermiteschen Matrix durch (Funktionsschablone) | ||
| löst mehrere lineare Dreieckssysteme (Funktionsschablone) | ||
Hilfselemente | ||
| Definiert in Header
<linalg> | ||
| Definiert im Namespace
std::linalg | ||
| beschreiben die Reihenfolge der Elemente in einem std::mdspan mit linalg::layout_blas_packed Layout (Tag) | ||
| geben an, ob Algorithmen und andere Benutzer einer Matrix das obere oder untere Dreieck der Matrix abrufen sollen (Tag) | ||
| geben an, ob Algorithmen auf die Diagonaleinträge der Matrix zugreifen sollen (Tag) | ||
| (C++26) |
std::mdspan Layout-Mapping-Richtlinie, die eine quadratische Matrix darstellt, die nur die Einträge in einem Dreieck in einem gepackten, zusammenhängenden Format speichert (Klassenschablone) | |
[bearbeiten] Anmerkungen
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_linalg |
202311L |
(C++26) | Grundlegende Algorithmen der linearen Algebra (BLAS) |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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, executed sequentially std::linalg::scale(2.0, x); // x[i] *= 3.0, executed in parallel 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)); }
[bearbeiten] Externe Links
| 1. | BLAS-Homepage |
| 2. | BLAS Technical Forum |