Espacios de nombres
Variantes
Acciones
 
 
 
 

Los algoritmos básicos de álgebra lineal se basan en las subrutinas básicas de álgebra lineal densa (BLAS), que corresponden a un subconjunto del Estándar BLAS. Estos algoritmos que acceden a los elementos de los arrays ven esos elementos a través de std::mdspan que representan un vector o una matriz.

Los algoritmos BLAS se categorizan en tres conjuntos de operaciones llamadas 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 las 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 una complejidad general en tiempo cuadrático. Estos algoritmos contienen operaciones matriz-vector como multiplicaciones de matriz-vector y un solucionador del sistema lineal triangular.
  • BLAS 3: Todos los algoritmos tienen una complejidad general en tiempo cúbico. Estos algoritmos contienen operaciones matriz-matriz como multiplicaciones de matriz-matriz y un solucionador de múltiples sistemas lineales triangulares.

Transformaciones in situ

Definido en el encabezado <linalg>
Definido en el espacio de nombres std::linalg
Política de descriptor de acceso a std::mdspan cuya referencia representa el producto de un factor de escala que está fijo y su referencia a descriptor de acceso a std::mdspan anidada.
(plantilla de clase)
Política de descriptor de acceso a std::mdspan cuya referencia representa el conjugado complejo de la referencia de su descriptor de acceso a std::mdspan anidado.
(plantilla de clase)
Política de mapeo de diseño a std::mdspan que intercambia los dos índices más a la derecha, dimensiones y avances de cualquier política de mapeo de diseño única.
(plantilla de clase)
(C++26)
Devuelve un nuevo std::mdspan de solo lectura calculado por el producto por elementos del factor de escala y los elementos correspondientes del std::mdspan dado.
(plantilla de función)
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)
Devuelve un std::mdspan nuevo que representa la transpuesta de la matriz de entrada por el std::mdspan dado .
(plantilla de función)
Devuelve una vista 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 una rotación de plano.
(plantilla de función)
Aplica rotación de plano a vectores.
(plantilla de función)
Intercambia todos los miembros correspondientes de una matriz o un vector.
(plantilla de función)
(C++26)
sobrescribe la matriz o el vector con el resultado de calcular la multiplicación de elemento por elemento por un escalar
(plantilla de función)
(C++26)
Copia elementos de una matriz o vector en otra(o).
(plantilla de función)
(C++26)
Agrega vectores o matrices elemento por elemento.
(plantilla de función)
(C++26)
Devuelve el producto escalar no conjugado de dos vectores.
(plantilla de función)
(C++26)
Devuelve el producto escalar 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 vectoriales.
(plantilla de función)
Devuelve la norma de Frobenius de una matriz.
(plantilla de función)
Devuelve una norma de una matriz.
(plantilla de función)
Devuelve la norma de 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étrica.
(plantilla de función)
Calcula el producto matriz-vector hermitiana.
(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 no simétrica, no conjugada, y de rango 1 de una matriz.
(plantilla de función)
Realiza una actualización no simétrica, conjugada, y de rango 1 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 una matriz hermitiana de rango 1.
(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 hermitiana.
(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étrica.
(plantilla de función)
Calcula el producto matriz-matriz hermitiana.
(plantilla de función)
Calcula el producto triangular matriz-matriz.
(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 hermitiana.
(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 hermitiana.
(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
Describe el orden de los elementos en un std::mdspan con un diseño linalg::layout_blas_packed.
(tag)
Especifica si los algoritmos y otros usuarios de una matriz deben acceder al triángulo superior o al triángulo inferior de la matriz.
(tag)
Especifica si los algoritmos deben acceder a las entradas diagonales de la matriz.
(tag)
Política de mapeo de diseño a std::mdspan que representa una matriz cuadrada que almacena solo las entradas en un triángulo, en un formato contiguo empaquetado.
(plantilla de clase)

Notas

Macro de Prueba de característica Valor Estándar Comentario
__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

  Página de inicio de BLAS
  Foro técnico de BLAS