请注意,标记中的语言/软件包存在以下缺陷:
Matlab:不支持四重精度。
Python/NumPy/SciPy:具有float128数据类型的矩阵产生float64的特征向量。
Sage:通过GP/PARI接口会产生晦涩的错误信息。
是否有人用四重精度执行过对角化和矩阵对数操作?如果有,是如何实现的?
@Matlab:不支持四倍精度。
MATLAB多重精度计算工具箱 提供了任意精度下的线性代数运算的函数。
它还涵盖了许多其他领域 - 基础数学、数值方法(积分,ode,优化)、特殊函数和基本数据分析。
此外,它允许在仅对源代码进行最小或不进行任何更改的情况下,在任意精度下运行现有的 Matlab 程序。
更新(2013年3月27日):现在工具箱还包括快速四倍精度模式,与其他替代方案相比,它快近100倍。有关比较和详细信息,请参见MATLAB中的快速四倍精度计算。
针对建议替代方案的批评意见:
符号计算工具箱(MATLAB)是Mathworks针对符号计算的一种工具箱。因此,它缺少许多任意精度数值计算所需的基本功能。
例如,无法比较两个vpa()
数字,因为它们是“符号型”(按设计)。这种限制仅排除了99%的数值分析算法。
符号计算工具箱中缺少的其他基本线性代数函数包括:norm, cond, max, min, sort, lu, qr, chol, schur
。
免费的多重精度工具箱(MATLAB)。
除了极其缓慢(每次算术运算都执行操作数到字符串的转换:+, -, ...
),并且缺乏必要的功能(eig,det,cond,\,...
)外,在它具备的功能中,它的答案也可能是错误的。
例如由svd
函数产生的错误结果使我的研究变得毫无意义,而找出错误则非常痛苦。
mpmath(Python)
主要针对特殊函数计算(尤其是超几何家族)。并且不支持更多或更高级的数值算法。对于矩阵的支持很少。虽然在最新版本中似乎已经有了您正在寻找的矩阵对数。
实际上,所有这些缺点都促使我开发了自己的 MATLAB 扩展程序,以使其能够进行任意精度计算(在开始时称为MATLAB多重精度计算工具箱)。我只需要它来完成我的工作。
它正在积极开发中(但已经修复了其他替代方案中列出的所有问题) - 我将非常感谢任何反馈。