如何在 MATLAB 中实现四倍精度(128 位算术),同时求解矩阵 eigenvalue 问题?
我正在尝试解决不可压缩平面 Couette flow 的线性稳定性分析问题,并且 MATLAB 的默认 64 位精度不足以满足更高的 Reynolds number 值(大约 4000)。
您可以使用 MATLAB 中的符号数学工具箱执行变精度算术。如果您使用 34
作为
vpa
函数的有效位数,您应该获得与四倍精度浮点数 几乎相同的精度。
如果您无法访问符号数学工具箱,我会查看来自 Ben Barrowes 在 MathWorks File Exchange 上提交的 “Multiple Precision Toolbox for MATLAB”。
我在 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
还有三角函数。这里有 1000 位 sin(pi)。当然应该为零。
>> tic,sin(hpf('pi',1000)),toc
ans =
0
Elapsed time is 0.201679 seconds.
MATLAB 多精度计算工具箱 具有快速四倍精度模式。
特别是,它能够比 Symbolic Math Toolbox(使用相同的四倍精度)快 x70-x100 倍地计算 100 x 100 矩阵的特征值和向量。
请参阅 MATLAB 中的快速四倍精度计算 页面以了解比较和详细信息。
除了建议的替代方案 - Symbolic Math Toolbox 和 Ben Barrowes 的库都有很大的局限性,请参阅我的答案here。