Espacios de nombres
Variantes
Acciones

Algoritmos básicos de álgebra lineal (desde C++26)

De cppreference.com
< cpp‎ | numeric
 
 
 
 

Los algoritmos básicos de álgebra lineal se basan en las densas Subrutinas de Álgebra Lineal Básica (BLAS) que corresponden a un subconjunto del Estándar BLAS . Estos algoritmos que acceden a los elementos de las matrices ven esos elementos a través de std::mdspan que representa un vector o una matriz.

Los algoritmos BLAS se clasifican 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 recuento de accesos de arraystd::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 escalares, normas y suma de vectores.
  • BLAS 2: Todos los algoritmos tienen complejidad general en tiempo cuadrático. Estos algoritmos contienen operaciones de matriz-vector, como multiplicaciones de matriz-vector y un solucionador 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 solucionador de múltiples sistemas lineales triangulares.

Contenido

Transformaciones in situ

Definido en el archivo de 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) [editar]
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) [editar]
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) [editar]
(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) [editar]
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) [editar]
Devuelve un std::mdspan nuevo que representa la transpuesta de la matriz de entrada por el std::mdspan dado .
(plantilla de función) [editar]
Devuelve una vista transpuesta conjugada de un objeto.
(plantilla de función) [editar]

Funciones BLAS 1

Definido en el archivo de encabezado <linalg>
Definido en el espacio de nombres std::linalg
Genera una rotación de plano.
(plantilla de función) [editar]
Aplica rotación de plano a vectores.
(plantilla de función) [editar]
Intercambia todos los miembros correspondientes de una matriz o un vector.
(plantilla de función) [editar]
(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) [editar]
(C++26)
Copia elementos de una matriz o vector en otra(o).
(plantilla de función) [editar]
(C++26)
Agrega vectores o matrices elemento por elemento.
(plantilla de función) [editar]
(C++26)
Devuelve el producto escalar no conjugado de dos vectores.
(plantilla de función) [editar]
(C++26)
Devuelve el producto escalar conjugado de dos vectores.
(plantilla de función) [editar]
Devuelve la suma escalada de cuadrados de los elementos del vector.
(plantilla de función) [editar]
Devuelve la norma euclidiana de un vector.
(plantilla de función) [editar]
Devuelve la suma de los valores absolutos de los elementos del vector.
(plantilla de función) [editar]
Devuelve el índice del valor absoluto máximo de los elementos vectoriales.
(plantilla de función) [editar]
Devuelve la norma de Frobenius de una matriz.
(plantilla de función) [editar]
Devuelve una norma de una matriz.
(plantilla de función) [editar]
Devuelve la norma de infinito de una matriz.
(plantilla de función) [editar]

Funciones BLAS 2

Definido en el archivo de encabezado <linalg>
Definido en el espacio de nombres std::linalg
Calcula el producto matriz-vector.
(plantilla de función) [editar]
Calcula el producto matriz-vector simétrica.
(plantilla de función) [editar]
Calcula el producto matriz-vector hermitiana.
(plantilla de función) [editar]
Calcula el producto matriz-vector triangular.
(plantilla de función) [editar]
Resuelve un sistema lineal triangular.
(plantilla de función) [editar]
Realiza una actualización no simétrica, no conjugada, y de rango 1 de una matriz.
(plantilla de función) [editar]
Realiza una actualización no simétrica, conjugada, y de rango 1 de una matriz.
(plantilla de función) [editar]
Realiza una actualización de rango 1 de una matriz simétrica.
(plantilla de función) [editar]
Realiza una actualización de una matriz hermitiana de rango 1.
(plantilla de función) [editar]
Realiza una actualización de rango 2 de una matriz simétrica.
(plantilla de función) [editar]
Realiza una actualización de rango 2 de una matriz hermitiana.
(plantilla de función) [editar]

Funciones BLAS 3

Definido en el archivo de encabezado <linalg>
Definido en el espacio de nombres std::linalg
Calcula el producto matriz-matriz.
(plantilla de función) [editar]
Calcula el producto matriz-matriz simétrica.
(plantilla de función) [editar]
Calcula el producto matriz-matriz hermitiana.
(plantilla de función) [editar]
Calcula el producto triangular matriz-matriz.
(plantilla de función) [editar]
Realiza una actualización de rango k de una matriz simétrica.
(plantilla de función) [editar]
Realiza una actualización de rango k de una matriz hermitiana.
(plantilla de función) [editar]
Realiza una actualización de rango 2k de una matriz simétrica.
(plantilla de función) [editar]
Realiza una actualización de rango 2k de una matriz hermitiana.
(plantilla de función) [editar]
Resuelve múltiples sistemas lineales triangulares.
(plantilla de función) [editar]

Elementos auxiliares

Definido en el archivo de 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)[editar]
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)[editar]
Especifica si los algoritmos deben acceder a las entradas diagonales de la matriz.
(tag)[editar]
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) [editar]

[editar] Notas

Macro de Prueba de característica Valor Estándar Comentario
__cpp_lib_linalg 202311L (C++26) Algoritmos básicos de álgebra lineal

[editar] Ejemplo

#include <cassert>
#include <cstddef>
#include <execution>
#include <linalg>
#include <mdspan>
#include <numeric>
#include <vector>
 
int main()
{
    constexpr std::size_t N = 40;
    std::vector<double> x_vec(N);
    std::ranges::iota(x_vec, 0);
 
    std::mdspan x(x_vec.data(), N);
 
    // 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 != N; ++i)
        assert(x[i] == 6.0 * static_cast<double>(i));
}