我正在尝试执行涉及矩阵运算和复杂数学的计算 - 有时一起,在 C 中。我非常熟悉 Matlab,我知道这些类型的计算可以简单有效地执行。例如,两个大小相同的矩阵 A 和 B,每个都有复数值的元素,可以通过表达式 A+B 轻松求和。是否可以推荐任何包或技术来使用 C 或 Objective C 中的这些类型的表达式进行编程?我知道 complex.h 允许对复数执行运算,但我不知道如何对复杂矩阵执行运算,这正是我真正追求的。同样,我知道允许对矩阵进行操作的包,但认为它们在处理复杂矩阵时不会有用。
问问题
2890 次
2 回答
8
您想将BLAS用于基本的线性代数运算,例如对两个矩阵求和或相乘,而将 LAPACK 用于计算密集型算法,例如分解矩阵。
BLAS 例程的名称很有趣,看起来像字母汤。这是因为旧的 Fortran 对函数名长度的限制。名称的第一个字母表示 BLAS 例程操作的数据类型。由于您对复数感兴趣,因此您希望查看从c
(对于复杂单精度)或z
(对于复杂双精度)开始的例程。例如 BLAS 例程乘以复数矩阵A
和B
是CGEMM
或ZGEMM
(这里GEMM
代表一般矩阵矩阵乘法。)
看起来在 Objective C 中,BLAS 可以通过Accelerate框架获得。命名约定是添加cblas_
到原始 BLAS 名称之前。例如,这里是cblas_zgemm
.
通常,供应商会为其平台提供优化的 BLAS 版本。这些例程通常比这些矩阵运算的简单实现要快得多。使用这些例程通常可以或几乎可以实现机器的峰值浮点性能。事实上,LINPACK 基准测试(LINPACK 是 LAPACK 的前身)使用这些例程来对超级计算机进行基准测试和排名。
于 2011-10-07T05:26:43.897 回答
4
您正在寻找 BLAS 或 LAPACK。它们是您可以下载和安装的线性代数库。
于 2011-10-07T04:37:08.230 回答