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.
Transformaciones in situ |
||
|
Definido en el encabezado
<linalg>
|
||
|
Definido en el espacio de nombres
std::linalg
|
||
|
(C++26)
|
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) |
|
|
(C++26)
|
std::mdspan
política de acceso cuyo referencia representa el conjugado complejo de la referencia de su
std::mdspan
acceso anidado
(plantilla de clase) |
|
|
(C++26)
|
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) |
|
|
(C++26)
|
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
|
||
|
(C++26)
|
genera rotación de plano
(plantilla de función) |
|
|
(C++26)
|
aplica rotación plana a vectores
(plantilla de función) |
|
|
(C++26)
|
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) |
|
|
(C++26)
|
devuelve la suma escalada de cuadrados de los elementos del vector
(plantilla de función) |
|
|
(C++26)
|
devuelve la norma euclidiana de un vector
(plantilla de función) |
|
|
(C++26)
|
devuelve la suma de los valores absolutos de los elementos del vector
(plantilla de función) |
|
|
(C++26)
|
devuelve el índice del valor absoluto máximo de los elementos del vector
(plantilla de función) |
|
|
(C++26)
|
devuelve la norma de Frobenius de una matriz
(plantilla de función) |
|
|
(C++26)
|
devuelve la norma uno de una matriz
(plantilla de función) |
|
|
(C++26)
|
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
|
||
|
(C++26)
|
calcula el producto matriz-vector
(plantilla de función) |
|
|
(C++26)
|
calcula el producto matriz-vector simétrico
(plantilla de función) |
|
|
(C++26)
|
calcula el producto matriz-vector hermítico
(plantilla de función) |
|
|
(C++26)
|
calcula el producto matriz-vector triangular
(plantilla de función) |
|
|
(C++26)
|
resuelve un sistema lineal triangular
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango 1 no simétrica y no conjugada de una matriz
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango-1 conjugada no simétrica de una matriz
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango 1 de una matriz simétrica
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango 1 de una matriz hermítica
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango 2 de una matriz simétrica
(plantilla de función) |
|
|
(C++26)
|
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
|
||
|
(C++26)
|
calcula el producto matriz-matriz
(plantilla de función) |
|
|
(C++26)
|
calcula el producto matriz-matriz simétrico
(plantilla de función) |
|
|
(C++26)
|
calcula el producto matriz-matriz hermítico
(plantilla de función) |
|
|
calcula el producto matriz-matriz triangular
(plantilla de función) |
||
|
(C++26)
|
realiza una actualización de rango k de una matriz simétrica
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango-k de una matriz hermítica
(plantilla de función) |
|
|
(C++26)
|
realiza una actualización de rango 2k de una matriz simétrica
(plantilla de función) |
|
|
(C++26)
|
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) |
||
|
(C++26)
|
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
Ejecutar este código
#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 |