在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。 它们是线性代数库,您可以下载和安装它们。