[英]Performing matrix operations with complex numbers in C
我正在嘗試執行涉及矩陣運算和復雜數學的計算 - 有時在C中。我非常熟悉Matlab,我知道這些類型的計算可以簡單有效地執行。 例如,相同大小的兩個矩陣A和B,每個具有復數值的元素,可以通過表達式A + B容易地求和。 是否有任何軟件包或技術可以建議在C或Objective C中使用這些類型的表達式編程? 我知道complex.h允許對復數執行操作,但我不知道如何在復雜矩陣上執行操作,這就是我真正想要的。 同樣,我知道允許對矩陣進行操作的包,但不認為它們在處理復雜矩陣時會有用。
您希望將BLAS用於基本線性代數運算,例如求和或乘以兩個矩陣,以及LAPACK用於更多計算密集型算法,例如分解矩陣。
BLAS例程有一些有趣的名字,看起來像字母湯。 這是因為舊的Fortran限制了函數名的長度。 名稱的第一個字母表示BLAS例程操作的數據類型。 由於您對復數感興趣,因此您需要查看以c
開頭的例程(對於復雜的單精度)或z
(對於復雜的雙精度)。 例如,將復數矩陣A
和B
相乘的BLAS例程是CGEMM
或ZGEMM
(這里GEMM
代表一般矩陣矩陣乘法。)
看起來在Objective C中,BLAS可以通過Accelerate框架獲得。 命名約定是將cblas_
為原始BLAS名稱。 例如,這里是cblas_zgemm
的文檔 。
通常,供應商為其平台提供了BLAS的優化版本。 這些例程通常比這些矩陣運算的朴素實現快得多。 通常,利用這些例程可以實現或幾乎實現機器的峰值浮點性能。 事實上,LINPACK基准測試(LINPACK是LAPACK的前身)使用這些例程來對超級計算機進行基准測試和排名。
您正在尋找BLAS或LAPACK。 它們是線性代數庫,您可以下載和安裝它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.