Namespaces
Variants

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.
**Übersetzungserläuterungen:** - "Contents" → "Inhaltsverzeichnis" (Standardübersetzung für Inhaltsverzeichnis) - "In-place transformations" → "In-place-Transformationen" (Fachbegriff beibehalten mit angepasster Schreibweise) - "BLAS X functions" → "BLAS X Funktionen" (BLAS als Fachbegriff unverändert gelassen) - "Helper items" → "Hilfselemente" - "Notes" → "Hinweise" - "Example" → "Beispiel" - "External links" → "Externe Links" Alle HTML-Tags, Attribute und numerischen Werte wurden unverändert beibehalten.

Inhaltsverzeichnis

In-place-Transformationen

Definiert in Header <linalg>
Definiert im namespace std::linalg
std::mdspan Zugriffspolitik, deren Referenz das Produkt eines festen Skalierungsfaktors und der Referenz des verschachtelten std::mdspan Zugriffsobjekts darstellt
(Klassentemplate)
std::mdspan Accessor-Policy, deren Referenz die komplex Konjugierte der Referenz ihres verschachtelten std::mdspan Accessors darstellt
(Klassentemplate)
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)
gibt eine konjugiert transponierte Ansicht eines Objekts zurück
(Funktionstemplate)

BLAS 1-Funktionen

Definiert im Header <linalg>
Definiert in namespace std::linalg
erzeugt eine Ebenenrotation
(Funktionsschablone)
wendet ebene Rotation auf Vektoren an
(Funktionsschablone)
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)
gibt skalierten Summe der Quadrate der Vektorelemente zurück
(Funktionsschablone)
gibt die euklidische Norm eines Vektors zurück
(Funktionstemplate)
gibt die Summe der Absolutwerte der Vektorelemente zurück
(Funktionsschablone)
gibt den Index des maximalen Absolutwerts der Vektorelemente zurück
(Funktionsschablone)
gibt die Frobenius-Norm einer Matrix zurück
(Funktionsschablone)
gibt die 1-Norm einer Matrix zurück
(Funktionstemplate)
gibt die Unendlichkeitsnorm einer Matrix zurück
(Funktionsschablone)

BLAS 2-Funktionen

Definiert im Header <linalg>
Definiert in Namespace std::linalg
berechnet Matrix-Vektor-Produkt
(Funktionstemplate)
berechnet symmetrische Matrix-Vektor-Produkt
(Funktions-Template)
berechnet das Hermitesche Matrix-Vektor-Produkt
(Funktionstemplate)
berechnet das Dreiecksmatrix-Vektor-Produkt
(Funktionsschablone)
löst ein trianguläres lineares System
(Funktionsschablone)
führt einen nicht-symmetrischen nicht-konjugierten Rang-1-Update einer Matrix durch
(Funktionsschablone)
führt einen nichtsymmetrischen konjugierten Rang-1-Update einer Matrix durch
(Funktionsschablone)
führt Rang-1-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone)
führt einen Rang-1-Update einer hermiteschen Matrix durch
(Funktionstemplate)
führt Rang-2-Update einer hermiteschen Matrix durch
(Funktionsschablone)
führt einen Rang-2-Update einer hermiteschen Matrix durch
(Funktionsschablone)

BLAS 3-Funktionen

Definiert in Header <linalg>
Definiert in Namespace std::linalg
berechnet Matrix-Matrix-Produkt
(Funktions-Template)
berechnet symmetrisches Matrix-Matrix-Produkt
(Funktionstemplate)
berechnet das hermitesche Matrix-Matrix-Produkt
(Funktionsschablone)
berechnet das Dreiecksmatrix-Matrix-Produkt
(Funktions-Template)
führt einen Rang-k-Update einer symmetrischen Matrix durch
(Funktionsschablone)
führt einen Rang-k-Update einer hermiteschen Matrix durch
(Funktionsschablone)
führt Rang-2k-Aktualisierung einer symmetrischen Matrix durch
(Funktionsschablone)
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)
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

#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));
}
**Übersetzungsdetails:** - "Run this code" → "Diesen Code ausführen" - "executed sequentially" → "sequentiell ausgeführt" - "executed in parallel" → "parallel ausgeführt" - HTML-Tags, Attribute und Code-Bereiche wurden unverändert beibehalten - C++-spezifische Begriffe (Funktionsnamen, Typen, etc.) wurden nicht übersetzt - Professionelle, präzise Übersetzung beibehalten

Externe Links

1. BLAS-Startseite
2. BLAS Technisches Forum