【问题标题】:MATLAB precisionMATLAB 精度
【发布时间】:2011-07-30 22:45:10
【问题描述】:

如何在解决矩阵特征值问题时在 MATLAB 中实现四倍精度(128 位算术)?

我正在尝试解决不可压缩平面 Couette 流的线性稳定性分析问题,而 MATLAB 的默认 64 位精度对于更高的雷诺数值(大约 4000)是不够的。

【问题讨论】:

    标签: matlab floating-point precision


    【解决方案1】:

    您可以在 MATLAB 中使用Symbolic Math Toolbox 执行variable-precision arithmetic。如果您使用34 作为significant digits 的编号,您应该得到与quadruple precision floating-point number 几乎相同的精度。

    如果您无法访问符号数学工具箱,我会在 MathWorks File Exchange 上查看来自 Ben Barrowes 的提交 "Multiple Precision Toolbox for MATLAB"

    【讨论】:

      【解决方案2】:

      我在 MATLAB 中有一个通用的精度浮点算术工具箱,它不需要符号工具箱。现在可以在 File Exchange 上使用它。例如,以 200 位精度...

      >> X = hpf('1.2',200)
      X =
          1.2
      
      >> X^723 - 2
      ans =
          1770275636625441478440184064843963160282702377364043536065.674784028
      335311702907341138106304578079399191891193908698215227428501441099262538
      4031886249461115861966367898404170725299823585166135087107488           
      

      如果您希望在使用 HPF 数字时以 200 位精度进行所有算术运算,则只需将其指定为默认值。

      >> DefaultNumberOfDigits 200
      >> hpf('pi')
      ans =
          3.141592653589793238462643383279502884197169399375105820974944592307
      816406286208998628034825342117067982148086513282306647093844609550582231
      7253594081284811174502841027019385211055596446229489549303819           
      

      HPF 在设计上并不是真正的可变精度工具,因为它以固定位数工作。它在数万位数的情况下相当有效。所以要得到 100 位的 exp(pi),这大约需要 1/4 秒。

      >> timeit(@() exp(hpf('pi',100)))
      ans =
         0.2643
      

      Trig 函数也是如此。这里是 sin(pi) 的 1000 位数字。当然应该是零。

      >> tic,sin(hpf('pi',1000)),toc
      ans =
          0
      Elapsed time is 0.201679 seconds.
      

      【讨论】:

      • 我目前正在尝试使用符号工具箱解决问题。但是,如果您能将通用精度浮点算术工具箱的代码邮寄给我,那就太好了。
      • HPF 现在正在进行文件交换。 mathworks.com/matlabcentral/fileexchange/…
      • 根据PDF文档,这个工具箱实现了加法、乘法、除法,1/x, sqrt(x), 1/sqrt(x), exp(x), ln(x), 2^x, log2(x), sin(x), cos(x), tan(x), arcsin(x), arccos(x), arctan(x), sinh(x), cosh(x), tanh(x), arsinh(x), arcosh(x), artanh(x)
      【解决方案3】:

      Multiprecision Computing Toolbox for MATLAB 具有快速四倍精度模式。

      特别是,它能够以 x70-x100 倍的速度计算 100 x 100 矩阵的特征值和向量(使用相同的四倍精度)。

      请参阅Fast Quadruple Precision Computations in MATLAB 页面了解比较和详细信息。

      除了建议的替代方案 - Symbolic Math Toolbox 和 Ben Barrowes 的库都有很大的局限性,请参阅我的回答 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-28
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 2016-12-09
        • 2016-11-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多