objective-c – 在C中执行复数的矩阵运算
发布时间:2020-12-16 10:20:19 所属栏目:百科 来源:网络整理
导读:我正在尝试执行涉及矩阵运算和复杂数学的计算 – 有时在C中.我非常熟悉Matlab,我知道这些类型的计算可以简单有效地执行.例如,两个相同大小的矩阵A和B,每个都具有复数值的元素,可以通过表达式A B轻松求和.是否有任何软件包或技术可以建议在C语言中使用这些类
我正在尝试执行涉及矩阵运算和复杂数学的计算 – 有时在C中.我非常熟悉Matlab,我知道这些类型的计算可以简单有效地执行.例如,两个相同大小的矩阵A和B,每个都具有复数值的元素,可以通过表达式A B轻松求和.是否有任何软件包或技术可以建议在C语言中使用这些类型的表达式编程目标C?我知道complex.h允许对复数执行操作,但我不知道如何在复杂矩阵上执行操作,这就是我真正想要的.同样,我知道允许对矩阵进行操作的包,但不认为它们在处理复杂矩阵时会有用.
解决方法
您希望将
BLAS用于基本线性代数运算,例如求和或乘以两个矩阵,以及LAPACK用于更多计算密集型算法,例如分解矩阵.
BLAS例程有一些有趣的名字,看起来像字母汤.这是因为旧的Fortran限制了函数名的长度.名称的第一个字母表示BLAS例程操作的数据类型.由于您对复数感兴趣,因此您需要查看以c开头的例程(对于复杂的单精度)或z(对于复杂的双精度).例如,将复数矩阵A和B相乘的BLAS例程是CGEMM或ZGEMM(这里GEMM代表一般矩阵矩阵乘法.) 看起来在Objective C中,BLAS可以通过Accelerate框架获得.命名约定是将cblas_前置为原始BLAS名称.例如,这里是cblas_zgemm的documentation. 通常,供应商为其平台提供了BLAS的优化版本.这些例程通常可以比这些矩阵运算的朴素实现快得多.经常利用这些可以实现或几乎实现机器的峰值浮点性能例程.实际上,LINPACK基准测试(LINPACK是LAPACK的前身)使用了这些例程,以超级计算机为基准和排名. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |