在C语言中使用复数进行矩阵运算

3

我正在尝试在C语言中进行涉及矩阵运算和复数计算的计算。我非常熟悉Matlab,知道这些类型的计算可以简单高效地完成。例如,两个相同大小的矩阵A和B,每个元素都是复数值,可以通过表达式A+B轻松求和。是否有任何软件包或技术可以建议在C或Objective C中编写这些类型的表达式?我知道complex.h允许对复数进行操作,但不知道如何对复数矩阵进行操作,这正是我需要的。同样,我知道存在用于矩阵操作的程序包,但不认为它们在处理复杂矩阵时会有用。

2个回答

9

您想使用BLAS进行基本的线性代数运算,如矩阵相加或相乘,并使用LAPACK进行更复杂的计算密集型算法,例如矩阵分解。

BLAS例程有很有趣的名称,看起来像字母汤。这是由于旧的Fortran函数名长度限制所致。名称的第一个字母表示BLAS例程操作的数据类型。由于您对复数感兴趣,因此需要查看以c(用于复数单精度)或z(用于双倍复数双精度)开头的例程。例如,将复矩阵AB相乘的BLAS例程是CGEMMZGEMM(这里GEMM表示常规矩阵矩阵乘法)。

在Objective C中,似乎可以通过Accelerate框架使用BLAS。命名约定是在原始BLAS名称之前添加cblas_。例如,这是cblas_zgemm文档

通常,供应商提供其平台的优化版本的BLAS。这些例程通常比这些矩阵运算的朴素实现快得多。通常可以使用这些例程达到或接近机器的最大浮点性能。事实上,LINPACK基准测试(LINPACK是LAPACK的前身)使用这些例程来对超级计算机进行基准测试和排名。


4
您正在寻找BLAS或LAPACK。它们是线性代数库,您可以下载和安装。

3
+1,但无需下载。CBLAS是Accelerate框架的一部分。 - Dave DeLong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接