簡體   English   中英

在C中執行復數的矩陣運算

[英]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 (對於復雜的雙精度)。 例如,將復數矩陣AB相乘的BLAS例程是CGEMMZGEMM (這里GEMM代表一般矩陣矩陣乘法。)

看起來在Objective C中,BLAS可以通過Accelerate框架獲得。 命名約定是將cblas_為原始BLAS名稱。 例如,這里是cblas_zgemm文檔

通常,供應商為其平台提供了BLAS的優化版本。 這些例程通常比這些矩陣運算的朴素實現快得多。 通常,利用這些例程可以實現或幾乎實現機器的峰值浮點性能。 事實上,LINPACK基准測試(LINPACK是LAPACK的前身)使用這些例程來對超級計算機進行基准測試和排名。

您正在尋找BLAS或LAPACK。 它們是線性代數庫,您可以下載和安裝它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM