Основные алгоритмы линейной алгебры (с C++26)
Основные алгоритмы линейной алгебры основаны на плотных базовых подпрограммах линейной алгебры (BLAS), которые соответствуют подмножеству стандарта BLAS. Эти алгоритмы, которые обращаются к элементам массивов, рассматривают эти элементы через std::mdspan, представляющие вектор или матрицу.
Алгоритмы BLAS разделены на три группы операций, называемые уровнями, которые, как правило, соответствуют степени многочлена в сложностях алгоритмов:
- BLAS 1: Все алгоритмы с
std::mdspanпараметрами выполняют подсчётstd::mdspanобращений к элементам массива и арифметических операций, которые линейны по максимальному произведению размеров любогоstd::mdspanпараметра. Эти алгоритмы содержат операции с векторами, такие как скалярное произведение, нормы и сложение векторов. - BLAS 2: Все алгоритмы имеют общую сложность в квадратичном времени. Эти алгоритмы содержат операции с матрицей-вектором, такие как умножение матрицы на вектор и решение треугольной системы линейных уравнений.
- BLAS 3: Все алгоритмы имеют общую сложность в кубическом времени. Эти алгоритмы содержат операции с матрицей-матрицей, такие как умножение матриц и решение нескольких треугольных систем линейных уравнений.
Преобразования на месте |
|
Определено в заголовке <linalg> |
|
|---|---|
Определено в пространстве имен std::linalg |
|
|
(C++26) | std::mdspan политика доступа, ссылка которой представляет собой произведение фиксированного масштабирующего коэффициента и ссылки вложенного std::mdspan доступа (шаблон класса) |
|
(C++26) | std::mdspan политика доступа, ссылка которой представляет комплексно сопряжённую ссылку вложенного std::mdspan доступа (шаблон класса) |
|
(C++26) | std::mdspan политика отображения структуры, меняющая местами два правых индекса, объёмы и шаги любой уникальной политики отображения структуры (шаблон класса) |
|
(C++26) | возвращает новый вид только для чтения std::mdspan, вычисленный как произведение масштабирующего коэффициента и соответствующих элементов заданного std::mdspan (шаблон функции) |
|
(C++26) | возвращает новый вид только для чтения std::mdspan, элементы которого являются комплексно сопряжёнными соответствующим элементам заданного std::mdspan (шаблон функции) |
|
(C++26) | возвращает новый std::mdspan, представляющий транспонированную матрицу, используя заданный std::mdspan (шаблон функции) |
|
(C++26) | возвращает вид сопряжённой транспонированной матрицы (шаблон функции) |
Функции BLAS 1 |
|
Определено в заголовке <linalg> |
|
Определено в пространстве имен std::linalg |
|
|
(C++26) | генерирует поворот по плоскости (шаблон функции) |
|
(C++26) | применяет поворот по плоскости к векторам (шаблон функции) |
|
(C++26) | меняет местами соответствующие элементы матрицы или вектора (шаблон функции) |
|
(C++26) | перезаписывает матрицу или вектор результатом поэлементного умножения на скаляр (шаблон функции) |
|
(C++26) | копирует элементы одной матрицы или вектора в другую (шаблон функции) |
|
(C++26) | поэлементно складывает векторы или матрицы (шаблон функции) |
|
(C++26) | возвращает не сопряжённое скалярное произведение двух векторов (шаблон функции) |
|
(C++26) | возвращает сопряжённое скалярное произведение двух векторов (шаблон функции) |
|
(C++26) | возвращает масштабированную сумму квадратов элементов вектора (шаблон функции) |
|
(C++26) | возвращает евклидову норму вектора (шаблон функции) |
|
(C++26) | возвращает сумму абсолютных значений элементов вектора (шаблон функции) |
|
(C++26) | возвращает индекс элемента с максимальным абсолютным значением в векторе (шаблон функции) |
|
(C++26) | возвращает норму Фробениуса матрицы (шаблон функции) |
|
(C++26) | возвращает одну норму матрицы (шаблон функции) |
|
(C++26) | возвращает бесконечную норму матрицы (шаблон функции) |
Функции BLAS 2 |
|
Определено в заголовке <linalg> |
|
|---|---|
Определено в пространстве имён std::linalg |
|
|
(C++26) | вычисляет произведение матрицы и вектора (шаблон функции) |
|
(C++26) | вычисляет произведение симметричной матрицы и вектора (шаблон функции) |
|
(C++26) | вычисляет произведение эрмитовой матрицы и вектора (шаблон функции) |
|
(C++26) | вычисляет произведение треугольной матрицы и вектора (шаблон функции) |
|
(C++26) | решает треугольную систему линейных уравнений (шаблон функции) |
|
(C++26) | выполняет несимметричное несопряжённое обновление матрицы ранга 1 (шаблон функции) |
|
(C++26) | выполняет несимметричное сопряжённое обновление матрицы ранга 1 (шаблон функции) |
|
(C++26) | выполняет обновление симметричной матрицы ранга 1 (шаблон функции) |
|
(C++26) | выполняет обновление эрмитовой матрицы ранга 1 (шаблон функции) |
|
(C++26) | выполняет обновление симметричной матрицы ранга 2 (шаблон функции) |
|
(C++26) | выполняет обновление эрмитовой матрицы ранга 2 (шаблон функции) |
Функции BLAS 3 |
|
Определено в заголовке <linalg> |
|
Определено в пространстве имён std::linalg |
|
|
(C++26) | вычисляет произведение матриц (шаблон функции) |
|
(C++26) | вычисляет произведение симметричных матриц (шаблон функции) |
|
(C++26) | вычисляет произведение эрмитовых матриц (шаблон функции) |
|
(C++26) | вычисляет произведение треугольных матриц (шаблон функции) |
|
(C++26) | выполняет обновление симметричной матрицы ранга k (шаблон функции) |
|
(C++26) | выполняет обновление эрмитовой матрицы ранга k (шаблон функции) |
|
(C++26) | выполняет обновление симметричной матрицы ранга 2k (шаблон функции) |
|
(C++26) | выполняет обновление эрмитовой матрицы ранга 2k (функция-шаблон) |
|
(C++26) | решает несколько треугольных систем линейных уравнений (функция-шаблон) |
Вспомогательные элементы |
|
Определено в заголовочном файле <linalg> |
|
|---|---|
Определено в пространстве имён std::linalg |
|
|
(C++26) | описывают порядок элементов в std::mdspan с linalg::layout_blas_packed структурой расположения (метка) |
|
(C++26) | определяют, должны ли алгоритмы и другие пользователи матрицы обращаться к верхней или нижней треугольной части матрицы (метка) |
|
(C++26) | определяют, должны ли алгоритмы обращаться к диагональным элементам матрицы (метка) |
|
(C++26) | политика отображения расположения std::mdspan, которая представляет квадратную матрицу, хранящую только элементы одного треугольника в упакованном смежном формате (шаблон класса) |
Примечания
| Тест на наличие функции макрос | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_linalg | 202311L | (C++26) | Основные алгоритмы линейной алгебры |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/linalg