四倍精度特征值、特征向量和矩阵对数

7
我正在尝试对四重精度矩阵进行对角化,并取它们的对数。是否有一种语言可以使用内置函数来实现这一点?
请注意,标记中的语言/软件包存在以下缺陷:
Matlab:不支持四重精度。
Python/NumPy/SciPy:具有float128数据类型的矩阵产生float64的特征向量。
Sage:通过GP/PARI接口会产生晦涩的错误信息。
是否有人用四重精度执行过对角化和矩阵对数操作?如果有,是如何实现的?

2
试试这个:[http://code.google.com/p/mpmath/] (http://code.google.com/p/mpmath/) - Joel Cornett
2
我之前忘了提到,mpmath不支持多精度对角化和矩阵函数。但它几乎可以完成其他所有功能。 - Ben Criger
@BenCriger - 就我所知,numpy的潜在问题在于大多数BLAS实现不支持128位浮点精度。 - Joe Kington
我想知道 @woodchips 是否能帮助我们解决这个问题。 - macduff
你不需要提到Mathematica。它有real128类型,但我不知道特征向量是否具有较低的精度。如果你无法访问它,你能否以某种方式使用Wolfram Alpha? - andrew cooke
3个回答

8

@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多重精度计算工具箱)。我只需要它来完成我的工作。

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


3
关于对角化,也许这篇文章可以帮助你(他需要比double提供的更精确的特征值,并最终使用了四倍精度)。
他正在使用Fortran语言。改为使用四倍精度需要将整数定义为16而不是8,并使用"-fdefault-real-8"重新编译gfortran中的LAPACK,以将double转换为四倍精度。也许您可以像这样构建LAPACK,然后从NumPy中使用它?我不确定。
当然,由于此精度实际上是模拟的,因此程序变得慢了10倍。
抱歉没有更具体的说明:我没有尝试过这样的事情,但我记得这篇博客文章,至少可以让您开始。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接