【问题标题】:Quadruple Precision Eigenvalues, Eigenvectors and Matrix Logarithms四重精度特征值、特征向量和矩阵对数
【发布时间】:2012-03-18 12:18:54
【问题描述】:

我正在尝试以四倍精度对矩阵进行对角化,并取它们的对数。有没有一种语言可以让我使用内置函数来完成这项工作?

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

Matlab:不支持四精度。

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

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

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

【问题讨论】:

  • 前面忘记说了,mpmath不支持多精度对角化和矩阵函数。不过,它几乎可以完成所有其他工作。
  • @BenCriger - 对于它的价值,我认为 numpy 的根本问题是大多数 BLAS 实现不支持 128 位浮点精度。
  • 我想知道@woodchips 是否可以帮助我们解决这个问题
  • 你没有提到mathematica。它具有 real128 类型,但我不知道特征向量是否精度较低。如果您无法访问它,您能以某种方式使用 wolfram alpha 吗?

标签: python matlab numpy scipy sage


【解决方案1】:

@Matlab:不支持四精度。

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

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

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

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


对建议替代方案的批评:

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

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

符号数学工具箱中缺少的其他基本线性代数函数是:norm, cond, max, min, sort, lu, qr, chol, schur

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

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

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

mpmath(Python)

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


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

它正在积极开发中(但已经用其他替代品解决了所有列出的问题) - 我会很感激任何反馈。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      关于对角化,也许this 可以帮助您(他还需要比给他的两倍的特征值更准确的特征值,并最终使用四倍精度)。

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

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

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

      【讨论】:

        猜你喜欢
        • 2012-08-08
        • 2019-04-27
        • 2018-10-31
        • 2011-09-29
        • 1970-01-01
        • 2017-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多