在C中执行复数的矩阵运算

时间:2011-10-07 04:34:30

标签: objective-c c matrix operations complex-numbers

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

2 个答案:

答案 0 :(得分:8)

您希望将BLAS用于基本线性代数运算,例如求和或乘以两个矩阵,以及LAPACK用于更多计算密集型算法,例如分解矩阵。

BLAS例程有一些有趣的名字,看起来像字母汤。这是因为旧的Fortran限制了函数名的长度。名称的第一个字母表示BLAS例程操作的数据类型。由于您对复数的兴趣,您希望查看从c开始的例程(对于复杂的单精度)或z(对于复杂的双精度)。例如,将复数矩阵AB相乘的BLAS例程为CGEMMZGEMM(此处GEMM代表一般矩阵矩阵乘法。)

在Objective C中,BLAS可通过Accelerate框架获得。命名约定是将cblas_添加到原始BLAS名称之前。例如,cblas_zgemmdocumentation

通常,供应商为其平台提供了BLAS的优化版本。这些例程 通常可以比这些矩阵运算的朴素实现快得多。经常 利用这些可以实现或几乎实现机器的峰值浮点性能 例程。实际上,LINPACK基准测试(LINPACK是LAPACK的前身)使用了这些 例程,以超级计算机为基准和排名。

答案 1 :(得分:4)

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