如何在求解Matrix特征值问题的同时在MATLAB中实现四倍精度(128位运算)?
我正在尝试解决不可压缩平面Couette流的线性稳定性分析问题,并且对于更高的雷诺数值(大约4000),MATLAB的默认64位精度是不够的。
答案 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。