Namespaces
Variants

Basic linear algebra algorithms (since C++26)

From cppreference.net

Los algoritmos básicos de álgebra lineal se basan en las Subrutinas Básicas de Álgebra Lineal Densas ( BLAS ) que corresponden a un subconjunto del BLAS Standard . Estos algoritmos que acceden a los elementos de los arrays visualizan dichos elementos a través de std::mdspan representando vectores o matrices.

Los algoritmos BLAS se clasifican en tres conjuntos de operaciones llamados niveles , que generalmente corresponden al grado del polinomio en las complejidades de los algoritmos:

  • BLAS 1 : Todos los algoritmos con parámetros std::mdspan realizan un conteo de accesos a arrays std::mdspan y operaciones aritméticas que son lineales en el producto máximo de extensiones de cualquier parámetro std::mdspan . Estos algoritmos contienen operaciones vectoriales como productos punto, normas y suma de vectores.
  • BLAS 2 : Todos los algoritmos tienen complejidad general en tiempo cuadrático . Estos algoritmos contienen operaciones matriz-vector como multiplicaciones matriz-vector y un resolvedor del sistema lineal triangular.
  • BLAS 3 : Todos los algoritmos tienen complejidad general en tiempo cúbico . Estos algoritmos contienen operaciones matriz-matriz como multiplicaciones matriz-matriz y un resolvedor de los múltiples sistemas lineales triangulares.

Contenidos

Transformaciones in situ

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
std::mdspan política de acceso cuyo reference representa el producto de un factor de escalado fijo y el reference del acceso anidado de std::mdspan
(plantilla de clase)
std::mdspan política de acceso cuyo referencia representa el conjugado complejo de la referencia de su std::mdspan acceso anidado
(plantilla de clase)
std::mdspan política de diseño de mapeo que intercambia los dos índices, extensiones y pasos más a la derecha de cualquier política de diseño de mapeo única
(plantilla de clase)
(C++26)
devuelve un nuevo std::mdspan de solo lectura calculado mediante el producto elemento a elemento del factor de escala y los elementos correspondientes del std::mdspan dado
(plantilla de función)
(C++26)
devuelve un nuevo std::mdspan de solo lectura cuyos elementos son los conjugados complejos de los elementos correspondientes del std::mdspan dado
(plantilla de función)
(C++26)
devuelve un nuevo std::mdspan que representa la transpuesta de la matriz de entrada mediante el std::mdspan dado
(plantilla de función)
devuelve una vista de la transpuesta conjugada de un objeto
(plantilla de función)

Funciones BLAS 1

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
genera rotación de plano
(plantilla de función)
aplica rotación plana a vectores
(plantilla de función)
intercambia todos los elementos correspondientes de matriz o vector
(plantilla de función)
(C++26)
sobrescribe una matriz o vector con el resultado de calcular la multiplicación elemento por elemento por un escalar
(plantilla de función)
(C++26)
copia elementos de una matriz o vector en otra
(plantilla de función)
(C++26)
suma vectores o matrices elemento por elemento
(plantilla de función)
(C++26)
devuelve el producto punto no conjugado de dos vectores
(plantilla de función)
(C++26)
devuelve el producto punto conjugado de dos vectores
(plantilla de función)
devuelve la suma escalada de cuadrados de los elementos del vector
(plantilla de función)
devuelve la norma euclidiana de un vector
(plantilla de función)
devuelve la suma de los valores absolutos de los elementos del vector
(plantilla de función)
devuelve el índice del valor absoluto máximo de los elementos del vector
(plantilla de función)
devuelve la norma de Frobenius de una matriz
(plantilla de función)
devuelve la norma uno de una matriz
(plantilla de función)
devuelve la norma infinito de una matriz
(plantilla de función)

Funciones BLAS 2

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
calcula el producto matriz-vector
(plantilla de función)
calcula el producto matriz-vector simétrico
(plantilla de función)
calcula el producto matriz-vector hermítico
(plantilla de función)
calcula el producto matriz-vector triangular
(plantilla de función)
resuelve un sistema lineal triangular
(plantilla de función)
realiza una actualización de rango 1 no simétrica y no conjugada de una matriz
(plantilla de función)
realiza una actualización de rango-1 conjugada no simétrica de una matriz
(plantilla de función)
realiza una actualización de rango 1 de una matriz simétrica
(plantilla de función)
realiza una actualización de rango 1 de una matriz hermítica
(plantilla de función)
realiza una actualización de rango 2 de una matriz simétrica
(plantilla de función)
realiza una actualización de rango 2 de una matriz hermítica
(plantilla de función)

Funciones BLAS 3

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
calcula el producto matriz-matriz
(plantilla de función)
calcula el producto matriz-matriz simétrico
(plantilla de función)
calcula el producto matriz-matriz hermítico
(plantilla de función)
calcula el producto matriz-matriz triangular
(plantilla de función)
realiza una actualización de rango k de una matriz simétrica
(plantilla de función)
realiza una actualización de rango-k de una matriz hermítica
(plantilla de función)
realiza una actualización de rango 2k de una matriz simétrica
(plantilla de función)
realiza una actualización de rango 2k de una matriz hermítica
(plantilla de función)
resuelve múltiples sistemas lineales triangulares
(plantilla de función)

Elementos auxiliares

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
describen el orden de los elementos en un std::mdspan con diseño linalg::layout_blas_packed
(etiqueta)
especifica si los algoritmos y otros usuarios de una matriz deben acceder al triángulo superior o al triángulo inferior de la matriz
(etiqueta)
especificar si los algoritmos deben acceder a las entradas diagonales de la matriz
(etiqueta)
std::mdspan política de mapeo de diseño que representa una matriz cuadrada que almacena únicamente las entradas en un triángulo, en un formato contiguo empaquetado
(plantilla de clase)

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_linalg 202311L (C++26) Algoritmos básicos de álgebra lineal (BLAS)

Ejemplo

#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, ejecutado secuencialmente
    std::linalg::scale(2.0, x);
    // x[i] *= 3.0, ejecutado en paralelo
    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));
}

Enlaces externos

1. Página principal de BLAS
2. Foro Técnico de BLAS