Namensräume
Varianten
Aktionen

Grundlegende Algorithmen der linearen Algebra (seit C++26)

Von cppreference.com
< cpp‎ | numeric
 
 
 
 

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.

Inhalt

In-place Transformationen

Definiert in Header <linalg>
Definiert im Namespace std::linalg
std::mdspan Accessor-Richtlinie, deren Referenz das Produkt eines festen Skalierungsfaktors und der Referenz des verschachtelten std::mdspan Accessors darstellt
(Klassenschablone) [bearbeiten]
std::mdspan Accessor-Richtlinie, deren Referenz die komplexe Konjugation der Referenz des verschachtelten std::mdspan Accessors darstellt
(Klassenschablone) [bearbeiten]
std::mdspan Layout-Mapping-Richtlinie, die die beiden rechtesten Indizes, Erstreckungen und Schritte jeder eindeutigen Layout-Mapping-Richtlinie vertauscht
(Klassenschablone) [bearbeiten]
(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) [bearbeiten]
gibt ein neues schreibgeschütztes std::mdspan zurück, dessen Elemente die komplexen Konjugierten der entsprechenden Elemente des gegebenen std::mdspan sind
(Funktionsschablone) [bearbeiten]
gibt ein neues std::mdspan zurück, das die Transponierte der Eingabematrix des gegebenen std::mdspan darstellt
(Funktionsschablone) [bearbeiten]
gibt eine konjugierte transponierte Ansicht eines Objekts zurück
(Funktionsschablone) [bearbeiten]

BLAS 1 Funktionen

Definiert in Header <linalg>
Definiert im Namespace std::linalg
generiert eine Ebenendrehung
(Funktionsschablone) [bearbeiten]
wendet Ebenendrehungen auf Vektoren an
(Funktionsschablone) [bearbeiten]
tauscht alle entsprechenden Elemente von Matrix oder Vektor
(Funktionsschablone) [bearbeiten]
(C++26)
überschreibt Matrix oder Vektor mit dem Ergebnis der elementweisen Multiplikation mit einem Skalar
(Funktionsschablone) [bearbeiten]
(C++26)
kopiert Elemente von einer Matrix oder einem Vektor in eine andere
(Funktionsschablone) [bearbeiten]
(C++26)
addiert Vektoren oder Matrizen elementweise
(Funktionsschablone) [bearbeiten]
(C++26)
gibt das nicht-konjugierte Skalarprodukt zweier Vektoren zurück
(Funktionsschablone) [bearbeiten]
(C++26)
gibt das konjugierte Skalarprodukt zweier Vektoren zurück
(Funktionsschablone) [bearbeiten]
gibt die skalierte Summe der Quadrate der Vektorelemente zurück
(Funktionsschablone) [bearbeiten]
gibt die Euklidische Norm eines Vektors zurück
(Funktionsschablone) [bearbeiten]
gibt die Summe der Absolutwerte der Vektorelemente zurück
(Funktionsschablone) [bearbeiten]
gibt den Index des maximalen Absolutwerts der Vektorelemente zurück
(Funktionsschablone) [bearbeiten]
gibt die Frobenius-Norm einer Matrix zurück
(Funktionsschablone) [bearbeiten]
gibt die Eins-Norm einer Matrix zurück
(Funktionsschablone) [bearbeiten]
gibt die Unendlich-Norm einer Matrix zurück
(Funktionsschablone) [bearbeiten]

BLAS 2 Funktionen

Definiert in Header <linalg>
Definiert im Namespace std::linalg
berechnet Matrix-Vektor-Produkt
(Funktionsschablone) [bearbeiten]
berechnet symmetrisches Matrix-Vektor-Produkt
(Funktionsschablone) [bearbeiten]
berechnet hermitesches Matrix-Vektor-Produkt
(Funktionsschablone) [bearbeiten]
berechnet lineares Dreiecks-Matrix-Vektor-Produkt
(Funktionsschablone) [bearbeiten]
löst ein lineares Dreieckssystem
(Funktionsschablone) [bearbeiten]
führt nicht-symmetrische nicht-konjugierte Rang-1-Aktualisierung einer Matrix durch
(Funktionsschablone) [bearbeiten]
führt nicht-symmetrische, konjugierte Rang-1-Aktualisierung einer Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-1-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-1-Aktualisierung einer hermiteschen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-2-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-2-Aktualisierung einer hermiteschen Matrix durch
(Funktionsschablone) [bearbeiten]

BLAS 3 Funktionen

Definiert in Header <linalg>
Definiert im Namespace std::linalg
berechnet Matrix-Matrix-Produkt
(Funktionsschablone) [bearbeiten]
berechnet symmetrisches Matrix-Matrix-Produkt
(Funktionsschablone) [bearbeiten]
berechnet hermitesches Matrix-Matrix-Produkt
(Funktionsschablone) [bearbeiten]
berechnet lineares Dreiecks-Matrix-Matrix-Produkt
(Funktionsschablone) [bearbeiten]
führt Rang-k-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-k-Aktualisierung einer hermiteschen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-2k-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone) [bearbeiten]
führt Rang-2k-Aktualisierung einer hermiteschen Matrix durch
(Funktionsschablone) [bearbeiten]
löst mehrere lineare Dreieckssysteme
(Funktionsschablone) [bearbeiten]

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)[bearbeiten]
geben an, ob Algorithmen und andere Benutzer einer Matrix das obere oder untere Dreieck der Matrix abrufen sollen
(Tag)[bearbeiten]
geben an, ob Algorithmen auf die Diagonaleinträge der Matrix zugreifen sollen
(Tag)[bearbeiten]
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]

[bearbeiten] Anmerkungen

Feature-Test-Makro Wert Std Feature
__cpp_lib_linalg 202311L (C++26) Grundlegende Algorithmen der linearen Algebra (BLAS)

[bearbeiten] Beispiel

#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