名稱空間
變體
操作

基本線性代數演算法 (C++26 起)

來自 cppreference.com
< 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 技術論壇