【发布时间】:2011-07-30 22:45:10
【问题描述】:
如何在解决矩阵特征值问题时在 MATLAB 中实现四倍精度(128 位算术)?
我正在尝试解决不可压缩平面 Couette 流的线性稳定性分析问题,而 MATLAB 的默认 64 位精度对于更高的雷诺数值(大约 4000)是不够的。
【问题讨论】:
标签: matlab floating-point precision
如何在解决矩阵特征值问题时在 MATLAB 中实现四倍精度(128 位算术)?
我正在尝试解决不可压缩平面 Couette 流的线性稳定性分析问题,而 MATLAB 的默认 64 位精度对于更高的雷诺数值(大约 4000)是不够的。
【问题讨论】:
标签: matlab floating-point precision
您可以在 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"。
【讨论】:
我在 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.
【讨论】:
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)。
Multiprecision Computing Toolbox for MATLAB 具有快速四倍精度模式。
特别是,它能够以 x70-x100 倍的速度计算 100 x 100 矩阵的特征值和向量(使用相同的四倍精度)。
请参阅Fast Quadruple Precision Computations in MATLAB 页面了解比较和详细信息。
除了建议的替代方案 - Symbolic Math Toolbox 和 Ben Barrowes 的库都有很大的局限性,请参阅我的回答 here。
【讨论】: