基本線性代數演算法 (C++26 起)
來自 cppreference.com
基本線性代數演算法基於密集基本線性代數子程式(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) |
返回矩陣的 Frobenius 範數 (函式模板) | |
(C++26) |
返回矩陣的 1-範數 (函式模板) | |
(C++26) |
返回矩陣的無窮範數 (函式模板) | |
BLAS 2 函式 | ||
定義於標頭檔案
<linalg> | ||
在名稱空間
std::linalg 中定義 | ||
(C++26) |
計算矩陣-向量積 (函式模板) | |
計算對稱矩陣-向量積 (函式模板) | ||
計算 Hermitian 矩陣-向量積 (函式模板) | ||
計算三角矩陣-向量積 (函式模板) | ||
求解三角線性系統 (函式模板) | ||
(C++26) |
執行矩陣的非對稱非共軛秩-1 更新 (函式模板) | |
(C++26) |
執行矩陣的非對稱共軛秩-1 更新 (函式模板) | |
執行對稱矩陣的秩-1 更新 (函式模板) | ||
執行 Hermitian 矩陣的秩-1 更新 (函式模板) | ||
執行對稱矩陣的秩-2 更新 (函式模板) | ||
執行 Hermitian 矩陣的秩-2 更新 (函式模板) | ||
BLAS 3 函式 | ||
定義於標頭檔案
<linalg> | ||
在名稱空間
std::linalg 中定義 | ||
(C++26) |
計算矩陣-矩陣積 (函式模板) | |
(C++26) |
計算對稱矩陣-矩陣積 (函式模板) | |
(C++26) |
計算 Hermitian 矩陣-矩陣積 (函式模板) | |
計算三角矩陣-矩陣積 (函式模板) | ||
執行對稱矩陣的秩-k 更新 (函式模板) | ||
執行 Hermitian 矩陣的秩-k 更新 (函式模板) | ||
執行對稱矩陣的秩-2k 更新 (函式模板) | ||
執行 Hermitian 矩陣的秩-2k 更新 (函式模板) | ||
求解多個三角線性系統 (函式模板) | ||
輔助項 (Helper items) | ||
定義於標頭檔案
<linalg> | ||
在名稱空間
std::linalg 中定義 | ||
描述使用 linalg::layout_blas_packed 佈局的 std::mdspan 中元素的順序 (標籤) | ||
指定演算法和其他矩陣使用者應訪問矩陣的上三角或下三角 (標籤) | ||
指定演算法是否應訪問矩陣的對角線元素 (標籤) | ||
(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 技術論壇 |