MATLAB精度

时间:2011-04-06 15:29:03

标签: matlab floating-point precision

如何在求解Matrix特征值问题的同时在MATLAB中实现四倍精度(128位运算)?

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

3 个答案:

答案 0 :(得分:10)

您可以使用MATLAB中的variable-precision arithmetic执行Symbolic Math Toolbox。如果您使用34作为quadruple precision floating-point number函数significant digits的数量,则应该与VPA的精度几乎相同。

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

答案 1 :(得分:8)

我在MATLAB中有一个通用的精度浮点运算工具箱,它不需要符号工具箱。它现在可以在文件交换中使用。例如,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.

答案 2 :(得分:2)

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

特别是,它能够计算特征值& 100 x 100矩阵的向量比Symbolic Math Toolbox快x70-x100倍(使用相同的四倍精度)。

有关比较和详细信息,请参阅Fast Quadruple Precision Computations in MATLAB页。

除了建议的替代方案 - 符号数学工具箱和Ben Barrowes的图书馆都有很大的局限性,请参阅我的回答here