我试图以四倍精度对矩阵进行对角化,并取它们的对数。是否有一种语言可以使用内置函数来完成此任务?
注意,标签中的语言/包是不够的,存在以下不足:
Matlab:不支持四精度。
Python/NumPy/SciPy:dtype float128 的矩阵在 float64 中产生特征向量。
Sage:通过 GP/PARI 的接口会产生神秘的错误消息。
有没有人执行对角化和矩阵对数到四精度,如果是,如何?
@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)。我的工作只需要它。
它正在积极开发中(但已经用其他替代方案修复了所有列出的问题) - 我将不胜感激任何反馈。
关于对角化,也许这可以帮助你(他还需要更准确的特征值,而不是在给他的地方加倍并最终使用四倍精度)。
他正在使用fortran。更改为四边形涉及将整数定义为 16 而不是 8,并使用“-fdefault-real-8”使用 gfortran 重新编译 LAPACK 以将双精度数提升为四边形。¿ 也许您可以像这样构建 LAPACK,然后从 NumPy 中使用它?我不知道。
当然,由于这个精度实际上是模拟的,所以程序慢了 10 倍。
抱歉没有更具体:我没有尝试过这样的事情,但我记得博客文章,它可能足以让你至少开始。
Symbolic Math Toolbox或免费提供的Multiple Precision Toolbox (均适用于 MATLAB)能否满足您的需求?Multiple Precision Toolbox 似乎没有 的等价物eig
,但确实有svd
.