我试图以四倍精度对齐矩阵,并采用它们的对数。有没有一种语言可以使用内置函数来实现这一目标?
请注意,标签中的语言/包装不足,存在以下缺陷:
Matlab:不支持四精度。
Python / NumPy / SciPy:带有dtype float128的矩阵在float64中产生特征向量。
Sage:通过GP / PARI接口会产生神秘的错误消息。
有没有人对四边形精度进行对角化和矩阵对数,如果有,怎么做?
答案 0 :(得分:8)
@Matlab:不支持四元精度。
Multiprecision Computing Toolbox for MATLAB以任意精度提供线性代数计算的例程。
它涵盖了许多其他领域 - 基础数学,数值方法(集成,颂歌,优化),特殊功能和基本数据分析。
此外,它允许以任意精度运行现有的Matlab程序,只需对源代码进行最少的修改(或不进行任何修改)。
更新(2013年3月27日):现在工具箱还包括快速四重精度模式,与其他选项相比,快了近100倍。有关比较和详细信息,请参阅Fast Quadruple Precision Computations in MATLAB。
关于建议替代方案的批评者:
Mathworks的符号数学工具箱 (MATLAB)针对符号计算。因此,它缺乏任意精确数值计算所需的许多基本特征。
例如,甚至不可能比较两个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)。我只需要它来完成我的工作。
它正在积极开发中(但已经修复了所有列出的问题与其他替代方案) - 我将不胜感激任何反馈。
答案 1 :(得分:3)
关于对角化,也许this可以帮助你(他还需要更准确的特征值,而不是给予他的两倍,并最终使用四倍精度)。
他正在使用fortran。更改为四边形涉及将整数定义为16而不是8,并使用“-fdefault-real-8”使用gfortran重新编译LAPACK以将双精度提升为四边形。 ¿也许你可以像这样建立LAPACK然后从NumPy中使用它?我不知道。
当然,由于实际模拟了这个精度,程序的速度慢了10倍。
很抱歉没有更具体:我没有尝试过这样的事情,但我记得这篇博文,你可能已经足够至少开始了。
答案 2 :(得分:1)
对于MATLAB,Symbolic Math Toolbox或免费提供的Multiple Precision Toolbox会满足您的需求吗?多精度工具箱似乎没有等效的eig
,但确实有svd
。