Spec-Zone.ru › C++

Базовые алгоритмы линейной алгебры (начиная с C++26)

Базовые алгоритмы линейной алгебры основаны на плотных базовых подпрограммах линейной алгебры (BLAS), которые соответствуют подмножеству стандарта BLAS. Эти алгоритмы, обращающиеся к элементам массивов, рассматривают их через std::mdspan, представляющий вектор или матрицу.

Алгоритмы BLAS делятся на три набора операций, называемые уровнями, которые в целом соответствуют степени многочлена в оценке сложности алгоритмов:

  • BLAS 1: Все алгоритмы с параметрами std::mdspan выполняют количество обращений к массиву std::mdspan и арифметических операций, линейное относительно максимального произведения размеров любого параметра std::mdspan. Эти алгоритмы включают операции над векторами, такие как скалярное произведение, нормы и сложение векторов.
  • BLAS 2: Все алгоритмы имеют общую сложность, соответствующую квадратичному времени. Эти алгоритмы включают операции с матрицами и векторами, такие как умножение матрицы на вектор и решение треугольной системы линейных уравнений.
  • BLAS 3: Все алгоритмы имеют общую сложность, соответствующую кубическому времени. Эти алгоритмы включают операции с матрицами, такие как умножение матриц и решение нескольких треугольных систем линейных уравнений.

Преобразования на месте

Определено в заголовке <linalg>
Определено в пространстве имён std::linalg
scaled_accessor
(C++26)
Политика доступа std::mdspan, ссылка которой представляет произведение фиксированного масштабного коэффициента и ссылки вложенной политики доступа std::mdspan
(шаблон класса)
conjugated_accessor
(C++26)
Политика доступа std::mdspan, ссылка которой представляет комплексно-сопряжённое значение ссылки вложенной политики доступа std::mdspan
(шаблон класса)
layout_transpose
(C++26)
Политика отображения std::mdspan, меняющая местами два крайних справа индекса, размера и шага любой политики отображения уникальной раскладки
(шаблон класса)
scaled
(C++26)
возвращает новое доступное только для чтения std::mdspan, полученное поэлементным умножением масштабного коэффициента на соответствующие элементы заданного std::mdspan
(шаблон функции)
conjugated
(C++26)
возвращает новое доступное только для чтения std::mdspan, элементы которого являются комплексно-сопряжёнными значениями соответствующих элементов заданного std::mdspan
(шаблон функции)
transposed
(C++26)
возвращает новое std::mdspan, представляющее транспонированную входную матрицу согласно заданному std::mdspan
(шаблон функции)
conjugate_transposed
(C++26)
возвращает представление объекта в виде эрмитово-сопряжённой матрицы
(шаблон функции)

Функции BLAS 1

Определено в заголовке <linalg>
Определено в пространстве имён std::linalg
setup_givens_rotation
(C++26)
формирует плоское вращение
(шаблон функции)
apply_givens_rotation
(C++26)
применяет плоское вращение к векторам
(шаблон функции)
swap_elements
(C++26)
меняет местами все соответствующие элементы матрицы или вектора
(шаблон функции)
scale
(C++26)
перезаписывает матрицу или вектор результатом поэлементного умножения на скаляр
(шаблон функции)
copy
(C++26)
копирует элементы одной матрицы или вектора в другую матрицу или вектор
(шаблон функции)
add
(C++26)
поэлементно складывает векторы или матрицы
(шаблон функции)
dot
(C++26)
возвращает нескомплексно-сопряжённое скалярное произведение двух векторов
(шаблон функции)
dotc
(C++26)
возвращает комплексно-сопряжённое скалярное произведение двух векторов
(шаблон функции)
vector_sum_of_squares
(C++26)
возвращает масштабированную сумму квадратов элементов вектора
(шаблон функции)
vector_two_norm
(C++26)
возвращает евклидову норму вектора
(шаблон функции)
vector_abs_sum
(C++26)
возвращает сумму абсолютных значений элементов вектора
(шаблон функции)
vector_idx_abs_max
(C++26)
возвращает индекс элемента вектора с максимальным абсолютным значением
(шаблон функции)
matrix_frob_norm
(C++26)
возвращает норму Фробениуса матрицы
(шаблон функции)
matrix_one_norm
(C++26)
возвращает первую норму матрицы
(шаблон функции)
matrix_inf_norm
(C++26)
возвращает бесконечную норму матрицы
(шаблон функции)

Функции BLAS 2

Определено в заголовке <linalg>
Определено в пространстве имён std::linalg
matrix_vector_product
(C++26)
вычисляет произведение матрицы на вектор
(шаблон функции)
symmetric_matrix_vector_product
(C++26)
вычисляет произведение симметричной матрицы на вектор
(шаблон функции)
hermitian_matrix_vector_product
(C++26)
вычисляет произведение эрмитовой матрицы на вектор
(шаблон функции)
triangular_matrix_vector_product
(C++26)
вычисляет произведение треугольной матрицы на вектор
(шаблон функции)
triangular_matrix_vector_solve
(C++26)
решает треугольную систему линейных уравнений
(шаблон функции)
matrix_rank_1_update
(C++26)
выполняет несимметричное несопряжённое обновление матрицы ранга 1
(шаблон функции)
matrix_rank_1_update_c
(C++26)
выполняет несимметричное сопряжённое обновление матрицы ранга 1
(шаблон функции)
symmetric_matrix_rank_1_update
(C++26)
выполняет обновление симметричной матрицы ранга 1
(шаблон функции)
hermitian_matrix_rank_1_update
(C++26)
выполняет обновление эрмитовой матрицы ранга 1
(шаблон функции)
hermitian_matrix_rank_2_update
(C++26)
выполняет обновление симметричной матрицы ранга 2
(шаблон функции)
hermitian_matrix_rank_2_update
(C++26)
выполняет обновление эрмитовой матрицы ранга 2
(шаблон функции)

Функции BLAS 3

Определено в заголовке <linalg>
Определено в пространстве имён std::linalg
matrix_product
(C++26)
вычисляет произведение матриц
(шаблон функции)
symmetric_matrix_product
(C++26)
вычисляет произведение симметричных матриц
(шаблон функции)
hermitian_matrix_product
(C++26)
вычисляет произведение эрмитовых матриц
(шаблон функции)
triangular_matrix_producttriangular_matrix_left_producttriangular_matrix_right_product
(C++26)
вычисляет произведение треугольных матриц
(шаблон функции)
symmetric_matrix_rank_k_update
(C++26)
выполняет обновление симметричной матрицы ранга k
(шаблон функции)
hermitian_matrix_rank_k_update
(C++26)
выполняет обновление эрмитовой матрицы ранга k
(шаблон функции)
symmetric_matrix_rank_2k_update
(C++26)
выполняет обновление симметричной матрицы ранга 2k
(шаблон функции)
hermitian_matrix_rank_2k_update
(C++26)
выполняет обновление эрмитовой матрицы ранга 2k
(шаблон функции)
triangular_matrix_matrix_left_solvetriangular_matrix_matrix_right_solve
(C++26)
решает несколько треугольных систем линейных уравнений
(шаблон функции)

Вспомогательные элементы

Определено в заголовке <linalg>
Определено в пространстве имён std::linalg
column_majorrow_majorcolumn_major_trow_major_t
(C++26)
описывают порядок элементов в std::mdspan с раскладкой linalg::layout_blas_packed
(тег)
upper_trianglelower_triangleupper_triangle_tlower_triangle_t
(C++26)
указывают, к какой части матрицы — верхнему или нижнему треугольнику — должны обращаться алгоритмы и другие пользователи матрицы
(тег)
implicit_unit_diagonalexplicit_diagonalimplicit_unit_diagonal_texplicit_diagonal_t
(C++26)
указывают, должны ли алгоритмы обращаться к диагональным элементам матрицы
(тег)
layout_blas_packed
(C++26)
Политика отображения std::mdspan, представляющая квадратную матрицу, в которой в упакованном непрерывном формате хранятся только элементы одного треугольника
(шаблон класса)

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_linalg 202311L (C++26) Базовые алгоритмы линейной алгебры (BLAS)

Пример

#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, executed sequentially
    std::linalg::scale(2.0, x);

    // x[i] *= 3.0, executed in parallel
    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));
}

Внешние ссылки

1. Главная страница BLAS
2. Технический форум BLAS

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/linalg

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API