7

我试图以四倍精度对矩阵进行对角化,并取它们的对数。是否有一种语言可以使用内置函数来完成此任务?

注意,标签中的语言/包是不够的,存在以下不足:

Matlab:不支持四精度。

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

Sage:通过 GP/PARI 的接口会产生神秘的错误消息。

有没有人执行对角化和矩阵对数到四精度,如果是,如何?

4

3 回答 3

8

@Matlab:不支持四精度。

Multiprecision Computing Toolbox for MATLAB为任意精度的线性代数计算提供了例程。

它涵盖了许多其他领域——基础数学、数值方法(积分、ode、优化)、特殊函数和基础数据分析。

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

更新(2013 年 3 月 27 日):现在工具箱还包括快速四倍精度模式,与替代品相比快了近 100 倍。有关比较和详细信息,请参阅MATLAB 中的快速四倍精度计算。


对建议替代品的批评:

Mathworks 的Symbolic Math Toolbox (MATLAB) 专门用于符号计算。因此,它缺乏任意精度数值计算所需的许多基本特征。

例如,甚至不可能比较两个vpa()数字,因为它们是“符号”类型(按设计)。仅此限制将 99% 的算法排除在数值分析之外。

Symbolic Math Toolbox 中缺少的其他基本线性代数函数有:norm, cond, max, min, sort, lu, qr, chol, schur.

免费的多精度工具箱(MATLAB)。

除了非常慢(它在每个算术运算上执行操作数的数字到字符串转换:)+, -, ...和缺乏基本功能(eig, det, cond, \, ...)之外,它在它拥有的函数中给出了错误的结果。

例如,svd函数提供的不正确结果使我的研究在某些时候变得毫无意义,并且发现错误很痛苦。

mpmath (Python)

主要针对特殊函数计算(尤其是超几何族)。并且不支持或多或少的高级数值算法。对矩阵的支持很少。尽管在最新版本中似乎有您正在寻找的矩阵对数。


实际上,所有这些缺点都促使我为 MATLAB 开发自己的扩展,以使其能够进行任意精度计算(在开头提到 - Multiprecision Computing Toolbox for MATLAB)。我的工作只需要它。

它正在积极开发中(但已经用其他替代方案修复了所有列出的问题) - 我将不胜感激任何反馈。

于 2012-03-07T02:00:02.200 回答
3

关于对角化,也许可以帮助你(他还需要更准确的特征值,而不是在给他的地方加倍并最终使用四倍精度)。

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

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

抱歉没有更具体:我没有尝试过这样的事情,但我记得博客文章,它可能足以让你至少开始。

于 2012-02-29T20:04:53.033 回答
1

Symbolic Math Toolbox或免费提供的Multiple Precision Toolbox (均适用于 MATLAB)能否满足您的需求?Multiple Precision Toolbox 似乎没有 的等价物eig,但确实有svd.

于 2012-03-01T11:54:37.320 回答