命名空间
变体
操作

基本线性代数算法 (C++26 起)

来自 cppreference.cn
< cpp‎ | 数值
 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
基本线性代数算法 (C++26)
数据并行类型 (SIMD) (C++26)
浮点环境 (C++11)
复数
数值数组 (valarray)
伪随机数生成
位操作 (C++20)
因子运算
(C++17)
(C++17)
插值
(C++20)
(C++20)
饱和算术
(C++26)
(C++26)
(C++26)
(C++26)
(C++26)

通用数值运算
(C++17)
(C++17)
(C++17)
(C++17)
 
 

基本线性代数算法基于密集基本线性代数子程序(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 访问器引用的乘积
(类模板) [编辑]
std::mdspan 访问器策略,其引用表示其嵌套 std::mdspan 访问器引用的复共轭
(类模板) [编辑]
std::mdspan 布局映射策略,交换任何唯一布局映射策略的最右两个索引、范围和步长
(类模板) [编辑]
(C++26)
返回一个新的只读 std::mdspan,其元素通过缩放因子与给定 std::mdspan 对应元素的逐元素乘积计算得到
(函数模板) [编辑]
(C++26)
返回一个新的只读 std::mdspan,其元素是给定 std::mdspan 对应元素的复共轭
(函数模板) [编辑]
(C++26)
返回一个新的 std::mdspan,表示通过给定 std::mdspan 输入矩阵的转置
(函数模板) [编辑]
返回对象的共轭转置视图
(函数模板) [编辑]

BLAS 1 函数

定义于头文件 <linalg>
在命名空间 std::linalg 中定义
生成平面旋转
(函数模板) [编辑]
将平面旋转应用于向量
(函数模板) [编辑]
(C++26)
交换矩阵或向量的所有对应元素
(函数模板) [编辑]
(C++26)
用通过标量进行逐元素乘法的结果覆盖矩阵或向量
(函数模板) [编辑]
(C++26)
将一个矩阵或向量的元素复制到另一个
(函数模板) [编辑]
(C++26)
逐元素添加向量或矩阵
(函数模板) [编辑]
(C++26)
返回两个向量的非共轭点积
(函数模板) [编辑]
(C++26)
返回两个向量的共轭点积
(函数模板) [编辑]
返回向量元素的平方和(缩放后)
(函数模板) [编辑]
(C++26)
返回向量的欧几里得范数
(函数模板) [编辑]
(C++26)
返回向量元素绝对值之和
(函数模板) [编辑]
返回向量元素最大绝对值的索引
(函数模板) [编辑]
返回矩阵的 Frobenius 范数
(函数模板) [编辑]
(C++26)
返回矩阵的 1-范数
(函数模板) [编辑]
(C++26)
返回矩阵的无穷范数
(函数模板) [编辑]

BLAS 2 函数

定义于头文件 <linalg>
在命名空间 std::linalg 中定义
计算矩阵-向量积
(函数模板) [编辑]
计算对称矩阵-向量积
(函数模板) [编辑]
计算 Hermitian 矩阵-向量积
(函数模板) [编辑]
计算三角矩阵-向量积
(函数模板) [编辑]
求解三角线性系统
(函数模板) [编辑]
执行矩阵的非对称非共轭秩-1 更新
(函数模板) [编辑]
执行矩阵的非对称共轭秩-1 更新
(函数模板) [编辑]
执行对称矩阵的秩-1 更新
(函数模板) [编辑]
执行 Hermitian 矩阵的秩-1 更新
(函数模板) [编辑]
执行对称矩阵的秩-2 更新
(函数模板) [编辑]
执行 Hermitian 矩阵的秩-2 更新
(函数模板) [编辑]

BLAS 3 函数

定义于头文件 <linalg>
在命名空间 std::linalg 中定义
(C++26)
计算矩阵-矩阵积
(函数模板) [编辑]
计算对称矩阵-矩阵积
(函数模板) [编辑]
计算 Hermitian 矩阵-矩阵积
(函数模板) [编辑]
计算三角矩阵-矩阵积
(函数模板) [编辑]
执行对称矩阵的秩-k 更新
(函数模板) [编辑]
执行 Hermitian 矩阵的秩-k 更新
(函数模板) [编辑]
执行对称矩阵的秩-2k 更新
(函数模板) [编辑]
执行 Hermitian 矩阵的秩-2k 更新
(函数模板) [编辑]
求解多个三角线性系统
(函数模板) [编辑]

辅助项 (Helper items)

定义于头文件 <linalg>
在命名空间 std::linalg 中定义
描述使用 linalg::layout_blas_packed 布局的 std::mdspan 中元素的顺序
(标签)[编辑]
指定算法和其他矩阵用户应访问矩阵的上三角或下三角
(标签)[编辑]
指定算法是否应访问矩阵的对角线元素
(标签)[编辑]
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 技术论坛