2012-02-29 194 views
7

我试图以四倍精度对角化矩阵,并取其对数。有没有一种语言可以使用内置函数完成此操作?四元精度特征值,特征向量和矩阵对数

注意,语言/在标签封装不足,从以下不足的痛苦:

Matlab的:不支持四精度。

Python/NumPy/SciPy:使用dtype float128的矩阵产生float64中的特征向量。

Sage:通过GP/PARI接口产生隐蔽的错误信息。

有没有人执行过对角化和矩阵对数来精确四舍五入,如果是这样,怎么样?

+2

试试这个:[http://code.google.com/p/mpmath/](http://code.google.com/p/mpmath/) – 2012-02-29 00:44:25

+2

我忘了提前说过,mpmath不支持多个精确对角化和矩阵函数。不过,它几乎可以做任何其他事情。 – 2012-02-29 15:23:49

+0

@BenCriger - 我认为numpy的基本问题是,大多数BLAS实现不支持128位浮点精度。 – 2012-02-29 17:52:30

回答

8

@Matlab:不支持四倍精度。

Multiprecision Computing Toolbox for MATLAB为任意精度的线性代数计算提供了例程。它涵盖了许多其他领域 - 基础数学,数值方法(积分,赋值,优化),特殊功能和基础数据分析。

除此之外,它允许以任意精度运行现有的Matlab程序,只需对源代码进行最少(或无任何)修改。

更新(2013年3月27日):现在工具箱中还包括快四精度模式,相较于替代品是快了近100倍。请参阅Fast Quadruple Precision Computations in MATLAB进行比较和详细信息。


评论家对建议的替代:

符号数学工具箱(MATLAB)从Mathworks公司针对符号计算。因此它缺少任意精确数值计算所需的许多基本特征。

例如,甚至不可能比较两个vpa()数字,因为它们是“符号”类型(按设计)。这个唯一的限制从数值分析中排除了99%的算法。

符号数学工具箱中缺少的其他基本线性代数函数为:norm, cond, max, min, sort, lu, qr, chol, schur

免费多精度工具箱(MATLAB)。除了速度非常慢(它在每个算术运算上执行操作数的数字到字符串转换:+, -, ...)并且缺少基本功能(eig, det, cond, \, ...)之外,它在它所具有的函数中给出了错误的结果。

E.g. svd函数提供的不正确的结果使得我的研究在某个时间点毫无意义,错误很难找到。

mpmath(Python)的

主要针对特殊功能的计算(超几何家人尤其是)。并且不支持或多或少先进的数值算法。对矩阵的支持很少。虽然似乎有矩阵对数你正在寻找最新版本。


其实所有这些缺点把我推到开发自己的扩展MATLAB与任意精度计算(开头提到 - Multiprecision Computing Toolbox for MATLAB)启用它。我只需要它为我的工作。

它正处于积极的发展阶段(但已经解决了所有列出的问题与其他选择) - 我会很感激任何反馈。

2

关于对角化,也许this可以帮助你(他还需要更多的准确的特征值比双倍给予他,并最终使用四倍精度)。

他正在使用fortran。更改为四边形涉及将整数定义为16而不是8,并使用gfortran使用“-fdefault-real-8”将LAPACK重新编译为四元组。 ¿也许你可以像这样构建LAPACK,然后在NumPy中使用它?我不知道。

当然,由于这个精度实际上是模拟的,所以程序慢了10倍。

对不起,我没有尝试过这样的东西,但我记起了这篇博客文章,它可能足以让您至少上手。

相关问题