其他分享
首页 > 其他分享> > 什么是最广泛使用的C矢量/矩阵数学/线性代数库,以及它们的成本和收益权衡?

什么是最广泛使用的C矢量/矩阵数学/线性代数库,以及它们的成本和收益权衡?

作者:互联网

似乎许多项目慢慢需要进行矩阵数学运算,并陷入首先构建一些向量类并慢慢添加功能的陷阱,直到它们被捕获构建一个半定制的自定义线性代数库,并依赖于它.

我想避免这种情况,而不依赖于某些与切向相关的库(例如OpenCV,OpenSceneGraph).

有哪些常用的矩阵数学/线性代数库,为什么会决定使用另一个?有什么建议不要因某些原因使用?我特意在几何/时间上下文*(2,3,4 Dim)*中使用它,但将来可能会使用更高维数据.

我正在寻找以下任何方面的差异:API,速度,内存使用,广度/完整性,狭窄/特异性,可扩展性和/或成熟度/稳定性.

更新

我最终使用了Eigen3,我非常满意.

解决方法:

有很多项目已经为Generic Graphics Toolkit确定了.那里的GMTL非常好 – 它非常小,非常实用,并且被广泛使用,非常可靠. OpenSG,VRJuggler和其他项目都转而使用它而不是自己的手动滚动/矩阵数学.

我发现它非常好 – 它通过模板完成所有工作,所以它非常灵活,速度非常快.

编辑:

在评论讨论和编辑之后,我想我会抛出一些关于特定实现的好处和缺点的更多信息,以及为什么你可以根据你的情况选择一个而不是另一个.

GMTL

优点:简单的API,专为图形引擎而设计.包括许多面向渲染的原始类型(例如平面,AABB,具有多个插值的quatenrions等),这些类型不在任何其他包中.内存开销非常低,非常快速,易于使用.

缺点:API非常专注于渲染和图形.不包括通用(NxM)矩阵,矩阵分解和求解等,因为它们不在传统图形/几何应用领域之内.

Eigen

好处:Clean API,相当容易使用.包括带有四元数和几何变换的Geometry module.内存开销低.完整,highly performant求解大型NxN矩阵和其他通用数学例程.

缺点:可能比你想要的范围更广(?).与GMTL相比较少的几何/渲染特定例程(即:欧拉角定义等).

IMSL

好处:非常完整的数字库.非常非常快(据说是最快的解算器).迄今为止最大,最完整的数学API.商业支持,成熟和稳定.

缺点:成本 – 不便宜.很少有几何/渲染特定的方法,所以你需要在它们的线性代数类之上自己滚动.

NT2

优点:如果您习惯使用MATLAB,则提供更熟悉的语法.为大型矩阵等提供完全分解和求解.

缺点:数学,而不是重点.可能不像Eigen那样高效.

LAPACK

优点:非常稳定,经过验证的算法.已经很久了.完整的矩阵求解等.模糊数学的许多选项.

缺点:在某些情况下表现不佳.从Fortran移植,使用奇怪的API.

就个人而言,它归结为一个问题 – 你打算如何使用它.如果你专注于渲染和图形,我喜欢Generic Graphics Toolkit,因为它表现良好,并支持许多有用的渲染操作,而无需实现自己的渲染.如果你需要通用矩阵求解(即:大矩阵的SVD或LU分解),我会使用Eigen,因为它处理它,提供一些几何运算,并且非常适合大矩阵解决方案.您可能需要编写更多自己的图形/几何操作(在它们的矩阵/向量之上),但这并不可怕.

标签:c,matrix,math,linear-algebra
来源: https://codeday.me/bug/20190917/1809613.html