命名空間
變體
動作

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

出自 cppreference.com
 
 
 
 

基本線性代數演算法基於稠密基本線性代數子程式 (BLAS),對應於 BLAS 標準的一個子集。這些存取陣列元素的演算法透過代表向量或矩陣的 std::mdspan 來檢視這些元素。

BLAS 演算法被歸類為三個操作集,稱為層級 (levels),它們通常對應於演算法複雜度中多項式的次數。

  • BLAS 1:所有帶有 std::mdspan 參數的演算法,其 std::mdspan 陣列存取與算術運算的計數,相對於任何 std::mdspan 參數維度乘積的最大值而言是線性的。這些演算法包含點積、範數與向量加法等向量運算。
  • BLAS 2:所有演算法的通用複雜度為二次方時間。這些演算法包含矩陣-向量乘法與三角線性系統求解器等矩陣-向量運算。
  • BLAS 3:所有演算法的通用複雜度為三次方時間。這些演算法包含矩陣-矩陣乘法與多重三角線性系統求解器等矩陣-矩陣運算。

目錄

原地變換

定義於標頭檔 <linalg>
定義於命名空間 std::linalg
std::mdspan 存取器策略,其參照代表一個固定的縮放因子與其嵌套的 std::mdspan 存取器參照的乘積。
(類別樣板) [編輯]
std::mdspan 存取器策略,其參照代表其嵌套的 std::mdspan 存取器參照的複共軛。
(類別樣板) [編輯]
std::mdspan 佈局映射策略,用於交換任何唯一佈局映射策略的最右側兩個索引、維度與步長。
(類別樣板) [編輯]
(C++26)
傳回一個新的唯讀 std::mdspan,由縮放因子與給定 std::mdspan 的對應元素進行逐元素乘法計算得出。
(函式樣板) [編輯]
傳回一個新的唯讀 std::mdspan,其元素為給定 std::mdspan 對應元素的複共軛。
(函式樣板) [編輯]
傳回一個新的 std::mdspan,代表給定 std::mdspan 輸入矩陣的轉置。
(函式樣板) [編輯]
傳回一個物件的共軛轉置視圖。
(函式樣板) [編輯]

BLAS 1 函式

定義於標頭檔 <linalg>
定義於命名空間 std::linalg
產生平面旋轉。
(函式樣板) [編輯]
將平面旋轉應用於向量。
(函式樣板) [編輯]
交換矩陣或向量的所有對應元素。
(函式樣板) [編輯]
(C++26)
將矩陣或向量覆寫為執行逐元素純量乘法後的結果。
(函式樣板) [編輯]
(C++26)
將一個矩陣或向量的元素複製到另一個。
(函式樣板) [編輯]
(C++26)
逐元素相加向量或矩陣。
(函式樣板) [編輯]
(C++26)
傳回兩個向量的非共軛點積。 (函式樣板) [編輯]
(C++26)
傳回兩個向量的共軛點積。
(函式樣板) [編輯]
傳回向量元素的縮放平方和。
(函式樣板) [編輯]
傳回向量的歐幾里得範數。
(函式樣板) [編輯]
傳回向量元素絕對值的總和。
(函式樣板) [編輯]
傳回向量元素中絕對值最大的索引。 (函式樣板) [編輯]
傳回矩陣的弗羅貝尼烏斯範數 (Frobenius norm)。
(函式樣板) [編輯]
傳回矩陣的 1-範數。
(函式樣板) [編輯]
傳回矩陣的無窮範數 (infinity norm)。
(函式樣板) [編輯]

BLAS 2 函式

定義於標頭檔 <linalg>
定義於命名空間 std::linalg
計算矩陣-向量乘積。 (函式樣板) [編輯]
計算對稱矩陣-向量乘積。 (函式樣板) [編輯]
計算埃爾米特矩陣-向量乘積。 (函式樣板) [編輯]
計算三角矩陣-向量乘積。 (函式樣板) [編輯]
求解三角線性系統。 (函式樣板) [編輯]
執行矩陣的非對稱、非共軛秩 1 更新。 (函式樣板) [編輯]
執行矩陣的非對稱、共軛秩 1 更新。 (函式樣板) [編輯]
執行對稱矩陣的秩 1 更新。 (函式樣板) [編輯]
執行埃爾米特矩陣的秩 1 更新。 (函式樣板) [編輯]
執行對稱矩陣的秩 2 更新。 (函式樣板) [編輯]
執行埃爾米特矩陣的秩 2 更新。 (函式樣板) [編輯]

BLAS 3 函式

定義於標頭檔 <linalg>
定義於命名空間 std::linalg
計算矩陣-矩陣乘積。 (函式樣板) [編輯]
計算對稱矩陣-矩陣乘積。 (函式樣板) [編輯]
計算埃爾米特矩陣-矩陣乘積。 (函式樣板) [編輯]
計算三角矩陣-矩陣乘積。 (函式樣板) [編輯]
執行對稱矩陣的秩 k 更新。 (函式樣板) [編輯]
執行埃爾米特矩陣的秩 k 更新。 (函式樣板) [編輯]
執行對稱矩陣的秩 2k 更新。 (函式樣板) [編輯]
執行埃爾米特矩陣的秩 2k 更新。 (函式樣板) [編輯]
求解多重三角線性系統。 (函式樣板) [編輯]

輔助項目

定義於標頭檔 <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 技術論壇
English Deutsch 日本語 中文(简体) 中文(繁體)